转:http://www.linuxidc.com/Linux/2014-11/108822.htm
http://blog.163.com/dxy1016@126/blog/static/12233258120165229031614/
查看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
从日志中可以看出,原因是因为datanode的clusterID 和 namenode的clusterID 不匹配。
解决思路:
查看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不崩了方案三:直接重新格式化hdfs:
namenode(active)节点上停止HDFS:sbin/stop-dfs.sh
删除namenode(active和standby)节点{hadoop.tmp.dir}的目录
删除datanode节点上{hadoop.tmp.dir}/dfs/data/current目录
执行格式化hdfs:hadoop namenode -format(集群先要启动zookeeper和journal node节点)
并把{hadoop.tmp.dir} 文件夹拷贝到另一台namenode的目录下
scp -r /home/hadoop/cloud/hadoop-2.7.3/tmp hadoop05:/home/hadoop/cloud/hadoop-2.7.3/
重新启动./sbin/start-dfs.sh