查看datanode节点的$HADOOP_HOME/logs/hadoop-xxxx-datanode-xxxx.hadoop.log,发现
java.io.IOException: Incompatible clusterIDs in /home/hadoop/cloud/hadoop-2.7.3/tmp/dfs/data: namenode clusterID = CID-faa1bd0a-194e-43e5-99f8-92a0043aace2; datanode clusterID = CID-d0137514-2400-4afd-973f-57366b894a32
从日志中可以看出,
原因是:
namenode与datanode的clusterID在重新格式化namenode以后已经不再匹配,datanode无法启动。
解决思路:
首先 查看hdfs-site.xml有没有配置项
<property>
<name>dfs.data.dir</name>
<value>/data/hdfs/data</value>
</property>
有则 说明你的datanode配置文件不再默认路径,而是你自己设置过的路径下。
没有
默认路径是/usr/local/hadoop/tmp/dfs/data/current/VERSION。
如果core-site.xml配置了
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/cloud/hadoop-2.7.3/tmp</value>
</property>
可能在{hadoop.tmp.dir}/dfs/data/current目录下
由于版本不同,可能路径也不同,最好自己去找找。
方案一:删除datanode节点current目录下的文件
这样重启datanode的时候会重新去生成文件
引起这个问题,可能是重启namenode或者format namenode的时候,datanode是死的。所以引起datanode和namenode上面的数据不一致。
方案二:修改datanode上这个版本信息文件VERSION
storageID=DS-389d57fb-798e-46d5-bb36-9144c9702b30
clusterID=CID-d0137514-2400-4afd-973f-57366b894
cTime=0
datanodeUuid=770afcf7-15a0-4eb3-831a-c4ef4e70dda9
storageType=DATA_NODE
layoutVersion=-56
直接修改clusterID=CID-d0137514-2400-4afd-973f-57366b894为日志显示namenode clusterID,tmp/dfs/data: namenode clusterID = CID-faa1bd0a-194e-43e5-99f8-92a0043aace2;
修改后:
clusterID=CID-d0137514-2400-4afd-973f-57366b894a32
重启,发现datanode不崩了