hadoop集群常见问题集锦
hadoop集群搭建、使用过程中遇到了很多,特记录下
1、 ERRORorg.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:Incompatible namespaceIDs 导致datanode启动不了。 no datanode to stop
原因:每次namenode format会重新创建一个namenodeId,而data目录包含了上次format时的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败。
解决办法:停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.data.dir目录。重新格式化namenode。
另一个办法:先停掉集群,然后将datanode节点目录/dfs/data/current/VERSION中的修改为与namenode一致即可。
注意:hadoop搭建完成只能namenode format格式化一次
2、如果datanode连接不上namenode,导致datanode无法启动。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException: Call to ... failed on local exception:java.net.NoRouteToHostException: No route to host
解决方法:关闭防火墙。
注意:最好设置防火墙永久关闭
3、从本地往hdfs文件系统上传文件
INFO hdfs.DFSClient: Exception in createBlockOutputStreamjava.io.IOException: Bad connect ack with firstBadLink
INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023
WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unableto create new block.
解决方法:关闭防火墙: 禁用selinux: 编辑/etc/selinux/config文件,设置“SELINUX=disabled”
4、org.apache.hadoop.yarn.exceptions.YarnException: Unauthorizedrequest to start container
问题原因:namenode,datanode时间同步问题
解决办法:多个datanode与namenode进行时间同步,在每台服务器执行:
ntpdate time.nist.gov,确认时间同步成功。
最好在每台服务器的 /etc/crontab 中加入一行:
0 2 * * * root ntpdate time.nist.gov&& hwclock –w
注意:集群各台服务器时间一定要同步
5、每次执行hadoop命令出现
hadoop2.5 WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
输入命令:
export HADOOP_ROOT_LOGGER=DEBUG,console
调试查看信息
查看本机的libc版本
原因:版本是libc-2.12而需要libc-2.14,
解决方法:升级下libc。
[hadoop@namenode native]$ tar -jxvf/home/hadoop/download/glibc-2.14.tar.bz2
[hadoop@namenode native]$ cd glibc-2.14/
[hadoop@namenode glibc-2.14]$ tar -jxvf/home/hadoop/download/glibc-linuxthreads-2.5.tar.bz2
[hadoop@namenode glibc-2.14]$ cd .. #必须返回上级目录
[root@namenode native]$ exportCFLAGS="-g -O2" #加上优化开关,否则会出现错误,必须用root用户
[root@namenode native]$./glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons--with-headers=/usr/include --with-binutils=/usr/bin
出现问题:没有c编译器,解决方法:yum install gcc 下载gcc
[root@namenode native]$ make #编译,执行很久,可能出错,出错再重新执行
[root@namenode native]$ sudo makeinstall #安装,必须root用户执行
升级成功。问题解决
建议:直接安装centos7,不要安装centos6.5,就不用升级libc版本了。
Make && make install –j8 //8核加速编译,
6、org.apache.hadoop.dfs.SafeModeException:Cannot delete ..., Name node is in safe mode
原因:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
解决方案是:关闭安全模式
hadoop dfsadmin -safemode leave
建议:若要修改删除文件,最好启动后等待一会操作
7、解决"Too manyfetch-failures"
原因:出现这个问题主要是结点间的连通不够全面。
解决方案是:
1)检查"/etc/hosts"
要求本机ip 对应 服务器名
要求要包含所有的服务器ip +服务器
2)检查".ssh/authorized_keys"
要求包含所有服务器(包括其自身)的publickey