java.io.IOException: Incompatible namespaceIDs
问题描述:
在实验的时候,需要往以前的集群中添加一台datanode,在添加之前,由于在调式namenode的时候,格式化了dfs,这就导致了namenode上的namespaceID和以前集群上datanode的namespaceID不一致,结果就会导致在启动hadoop集群的时候,旧的的datanode就没有办法启动hdfs服务,但是旧的dadanode可以启动tasktracker。
2015-01-28 11:01:27,561 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/h\ adoop/hadoop_tmp/hadoop-hadoop/dfs/data: namenode namespaceID = 1437576128; datanode namespaceID = 109908095 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:385) at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:299) at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1582) at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1521) at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1539) at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1665) at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1682)
解决办法:
将旧datanode上的namespaceID修改成和namenode上的namespaceID一样,datanode上存储namespaceID的位置为:~/hadoop_tmp/hadoop-hadoop/dfs/data/current/VERSION ,将其中的namespaceID修改为namenode上的namespaceID,重新启动集群就可以看到新节点成功的加入集群中。