这是一个相当充分记录的错误并且修复很容易,但是有谁知道为什么Hadoop datanode NamespaceID可以如此轻松搞砸或者Hadoop在启动数据节点时如何分配NamespaceID?
这是错误:
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)
这似乎甚至发生在单节点实例上。
答案 0 :(得分:17)
每次格式化HDFS时,Namenode都会生成新的namespaceID。我认为这可能是为了区分当前版本和以前的版本。如果某些内容不正确,您可以随时回滚到以前的版本,如果namespaceID对于每个格式化的实例都不是唯一的,那么这可能是不可能的。
NamespaceID还连接namenode和datanode。 Datanodes通过namespaceID将自己绑定到namenode
答案 1 :(得分:8)
这个问题在以下fine guide
中得到了很好的解释和帮助答案 2 :(得分:5)
我也是这样,然后我尝试将我的配置放在hdfs-site.xml
而不是core-site.xml
。
现在似乎停止并开始没有该错误。
[编辑,2010-08-13]
实际上这种情况仍然存在,并且是由格式引起的。
如果在执行格式化时观察VERSION文件,您会看到(至少我这样做)namenode被分配了一个新的namespaceID,但数据节点却没有。
快速解决方案是在格式化之前删除datanode的VERSION。
[TIDE,2010-08-13]
答案 3 :(得分:0)
当我格式化我的HDFS时,我也遇到了这个错误。除了datanode没有开始,jobtracker也不会启动。 对于datanode,我手动更改了namespaceid;但对于jobtracker,必须创建/ mapred / system(作为hdfs用户)目录并将其所有者更改为mapred。 jobtracker应该在格式之后开始运行。
答案 4 :(得分:0)
我收到以下错误&#34; / home / hadoop / data / dn&#34;中不兼容的namespaceID,
我在集群中有四个数据节点,在启动start-dfs.sh后只有一个数据节点出现,所以解决方案是在nn和jt中停止服务并删除所有数据节点中的dn配置drom hdfs-site,删除dn文件(/ home / hadoop / data / dn)并格式化namenode。 然后再次在所有数据节点中的hdfs-site中添加datanode属性,并格式化namenode一次。现在尝试启动服务所有数据节点肯定会