这是一个有据可查的错误,修复很容易,但是没有人知道为什么Hadoop数据节点 namespace ID可以如此容易地搞砸,或者Hadoop在启动数据节点时如何分配 namespace ID吗?

这是错误:

2010-08-06 12:12:06,900 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /Users/jchen/Data/Hadoop/dfs/data: namenode namespaceID = 773619367; datanode namespaceID = 2049079249
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:233)
    at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:148)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:298)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:216)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1283)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1238)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1246)
    at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1368)

这似乎甚至发生在单节点实例上。

最佳答案

每次格式化HDFS时,Namenode都会生成新的namespaceID。我认为这可能是为了区分当前版本和先前版本。如果某些不适当的内容,您总是可以回滚到以前的版本,如果namespaceID对于每个格式化的实例而言都不是唯一的,那么这可能是不可能的。

NamespaceID还连接namenode和datanode。数据节点通过namespaceID将自己绑定(bind)到名称节点

08-28 05:19