问题描述
这是一个相当有据可查的错误,修复很简单,但是有谁知道为什么Hadoop datanode命名空间ID可能会很容易搞砸,或者Hadoop在启动datanode时如何分配命名空间ID?
这是错误:
2010-08-06 12:12:06,900错误组织。 apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException:/ Users / jchen / Data / Hadoop / dfs / data中的不兼容命名空间ID: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)
位于org.apache.hadoop.hdfs.server.datanode.DataNode.startDataNode(DataNode.java:298)
位于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)
在org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1368)
Namenode每次格式化HDFS时都会生成新的namespaceID。我认为这可能是为了区分当前版本和以前的版本。如果某些内容不正确,则可以总是回滚到以前的版本,如果namespaceID对于每个格式化的实例都不唯一,那么这可能是不可能的。
NamespaceID还连接namenode和datanodes。 Datanodes通过namespaceID绑定自己到namenode
This is a fairly well-documented error and the fix is easy, but does anyone know why Hadoop datanode NamespaceIDs can get screwed up so easily or how Hadoop assigns the NamespaceIDs when it starts up the datanodes?
Here's the error:
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)
This seems to even happen for single node instances.
Namenode generates new namespaceID every time you format HDFS. I think this is possibly to differentiate current version and previous version. You can always rollback to previous version if something is not proper which may not be possible if namespaceID is not unique for every formatted instance.
NamespaceID also connects namenode and datanodes. Datanodes bind themselves to namenode through namespaceID
这篇关于为什么Hadoop不兼容的名称空间ID问题发生?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!