最近老是遇到小伙伴问一些hadoop的问题,在这里把一些hadoop常见的问题及解决方案分享给大数据初学者,如果再遇到同样的问题就对号入座。 一、hadoop安装完以后,在执行命令时,经常会提示一下警告: WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 原因: 这个跟系统位数有关系,我们平常使用的是Centos 6.5 64位操作系统。 解决办法: (1)如果你是hadoop2.6的可以下载下面这个: (2)下载完以后,解压到hadoop的native目录下,覆盖原有文件即可。操作如下: tar -x hadoop-native-64-2.4.0.tar -C hadoop/lib/native/ 二、在使用combiner的时候,出现IntWritable is not Text,或者其他的类型不匹配问题 原因:这是设置combiner的时候,map输出的keyvalue类型和combiner输出的keyvalue类型不一致导致的。 解决:如果设置combiner,必须保证一点,map输出的keyvalue类型和combiner输出的keyvalue类型必须一致!!! 三、error:server IPC version 9 cannot communicate with client version 4 原因: (1)如果是在使用插件操作hdfs时报错,是因为,eclipse插件和eclipse的版本不匹配 (2)如果是在执行mapreduce时报错:是因为jar包不匹配 解决:重新编译hadoop插件,使用自己的hadoop和eclipse版本 四、Could not locate executable null\bin\winutils.exe in the Hadoop binaries. 原因:在使用hadoop插件的时候,会在本地找winutils.exe这个文件,而这个文件是hadoop安装包下的文件,必须配置eclipse插件的hadoop的windows本地路径才行。 解决:配置windows的hadoop环境变量,并且重启机器,让环境变量生效 五、Shuffle Error: Exceeded MAX_FAILED_UNIQUE_FETCHES; bailing-out 原因:程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。 解决: 修改2个文件。 /etc/security/limits.conf vi /etc/security/limits.conf 加上: * soft nofile 102400 * hard nofile 409600 $cd /etc/pam.d/ $sudo vi login 添加session required /lib/security/pam_limits.so 六、Too many fetch-failures 原因:出现这个问题主要是结点间的连通不够全面。 解决: 1) 检查/etc/hosts,要求本机ip对应服务器名,要求要包含所有的服务器ip+服务器名 2) 检查 .ssh/authorized_keys,要求包含所有服务器(包括其自身)的public key 七、处理速度特别的慢 出现map很快 但是reduce很慢 而且反复出现 reduce=0% 解决:修改 conf/hadoop-env.sh 中的export HADOOP_HEAPSIZE=4000 八、能够启动datanode,但无法访问,也无法结束的错误 原因:可能原因很多,需要查看日志定位,可能的原因是namespaceId不一致 解决: (1)删除namenode的本地文件夹:${hadoop}/namedir/* (2)删除datanode的本地文件夹:${hadoop}/datadir/* (3)重新格式化 (4)注意:删除是个很危险的动作,不能确认的情况下不能删除!!做好删除的文件等通通备份!! 九java.io.IOException:Could not obtain block:blk_194219614024901469_1100 file=/user/hive/warehouse/src_20090724_log/src_20090724_log 原因:出现这种情况大多是结点断了,没有连接上。 解决:检查datanode是否有宕机情况,恢复 十、java.lang.OutOfMemoryError: Java heap space 原因:出现这种异常,明显是jvm内存不够得原因,要修改所有的datanode的jvm内存大小。 解决:执行命令 Java -Xms1024m -Xmx4096m 一般jvm的最大内存使用应该为总内存大小的一半,我们使用的8G内存,所以设置为4096m,这一值可能依旧不是最优的值。 十一、单个node新加硬盘 原因:datanode的硬盘不够用了 解决:(1)修改需要新加硬盘的node的dfs.data.dir,用逗号分隔新、旧文件目录(2)重启dfs 十二、hdfs的namenode内存飙升,不够用 原因:可能是上传了过多的小文件 解决:用命令合并HDFS小文件 hadoop fs -getmerge 十三、hadoop OutOfMemoryError 解决: mapred.child.java.optsname> -Xmx800M -servervalue> property> With the right JVM size in your hadoop-site.xml , you will have to copy this to all mapred nodes and restart the cluster. 或者:hadoop jar jarfile [main class] -D mapred.child.java.opts=-Xmx800M 十四、Hadoop name -format后Incompatible namespaceIDS 错误解决办法 原因:是格式化namenode后会重新创建一个新的namespaceID,以至于和datanode上原有的不一致。 解决: (1)删除datanode dfs.data.dir目录(默认为tmp/dfs/data)下的数据文件, (2)hadoop namenode -format (3)修改/home/hadoop/data/current/VERSION 文件,把namespaceID修成与namenode上相同即可(log错误里会有提示) 十五、namenode无法启动,不报错 原因:可能原因是:之前用root用户启动过,导致current文件夹的权限和所属用户更改了,需要更改回来 解决:current文件夹位于hadoop安装目录同级目录的tmp/dfs/namesecondary via:小风IT互动 学大数据,就选光环大数据。16年老品牌,上市公司有保障! |
|