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,重新启动集群就可以看到新节点成功的加入集群中。

image
posted @ 2015-01-28 11:17  justinzhang  阅读(1379)  评论(0编辑  收藏  举报