安装环境: ubuntu, hadoop: 1.2.2 JDK:Java 1.7
在安装Hadoop集群的过程中碰到了如下问题:
ERROR org.apache.hadoop.security.UserGroupInformation: PriviledgedActionException as:hadoop cause:java.io.IOException: File /usr/hadoop_dir/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
INFO org.apache.hadoop.ipc.Server: IPC Server handler 4 on 49000, call addBlock(/usr/hadoop_dir/tmp/mapred/system/jobtracker.info, DFSClient_NONMAPREDUCE_1570390041_1, null) from 192.168.2.99:56700: error: java.io.IOException: File /usr/hadoop_dir/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1
通过查看NameNode和DataNode的启动日志信息以及进程信息,发现两个数据节点中有如下错误信息:
DataNode Log info:
2014-03-13 09:57:29,222 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2014-03-13 09:57:29,305 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2014-03-13 09:57:29,305 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2014-03-13 09:57:29,305 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2014-03-13 09:58:12,257 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2014-03-13 09:58:12,278 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists!
2014-03-13 09:58:12,871 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/bladestone/hadoop-1.2.1/tmp/dfs/data: namenode namespaceID = 593374526; datanode namespaceID = 996487692
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:232)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:147)
at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:414)
at org.apache.hadoop.hdfs.server.datanode.DataNode.(DataNode.java:321)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
1. 检查防火墙是否关闭,我的系统是Ubuntu,执行下述命令:
sudo ufw status --> 检查当前的ufw状态, sudo ufw disable --> 关闭ufw
确认ufw被关闭,由于是实验环境,暂且直接关闭,一般而言,是需要添加开发端口而已。
2. 针对DataNode中的问题,有同学说是需要清除tmp下的临时文件。 故执行下属操作:
rm -fr tmp/* 删除tmp下所有文件
则第二次重新启动hadoop集群的过程中,dataNode中的错误信息消失。
经过分析: 主要是重新启动Hadoop集群之前,进行namenode的格式化,导致了datanode的中namespace的不匹配,所以,需要清除其中的tmp文件。
3. 重新检查了一遍各个几点的主机名信息,注释掉了127.0.0.1的信息。
重新调整了一下主机名列表,位置/etc/hosts
4. 重新确认了一下配置文件中,是否有错误配置,比如core-site.xml, hdfs-core.xml等涉及主机名的配置,确保没有问题。
5. 清除tmp下的临时文件
6. bin/hadoop namenode -format: 格式化namenode的信息
7. bin/start-all.sh
成功启动,并未发现上述的错误信息。 主要的修改是Hosts中的内容. 在研究这个问题过程,曾经有人提示过,可以直接给IP即可,估计和这个也有关。
后续补充:
在之后的几次重新启动过程中,还是时常会发现上述namenode的错误信息,不过namenode和datanode都可以正常启动,不知所谓何故。如果各位同学有知道为什么,请不吝告知。