一、问题发现
在启动Hadoop集群后,发现原本应该是启动三台机子的数据节点,结果只有一台node2成功启动,另外两台(node1、node3)并没有启动,如下两图所示:
问题描述:
确认配置信息没问题后,查看Hadoop下hdfs目录中的DataNode日志(配置文件中指定,比如笔者安装Hadoop所在路径为/export/server/hadoop/logs/hdfs),DataNode的日志文件为:
cat该文件发现:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid 9ef28a73-7266-4561-9a03-b79914df66af) service to node1/192.168.88.130:8020. Exiting.
java.io.IOException: All specified directories have failed to load.
问题分析:
由于前一次启动Hadoop集群时,对node2这台机器上的Hadoop的mapred配置错误,因此当时node2的Datanode没有启动成功,因此笔者做了格式化操作(hdfs namenode-format),这就导致namenode中的clusterID重新生成,但Datanode中的clusterID并没有跟着改变,因此出现上述错误。如以下图所示:
图1:DataNode的VERSION
图2:NameNode的VERSION
可以看到,DataNode下VERSION中的clusterID和NameNode下VERSION中的clusterID不一致。
二、解决方法
首先,将Hadoop集群停掉。然后,将DataNode下VERTSION文件中的clusterID更改成和NameNode下VERSION文件中的clusterID一致。改完并重启Hadoop后,三个集群节点顺利启动: