为什么运行hadoop时数据节点会关闭?

我在VirtualBox上的ubuntu 11.0.4上安装了hadoop 1.0.4(与我的主机名相同),不知怎的,数据节点关闭,在日志文件中出现以下错误

/************************************************************ STARTUP_MSG: Starting DataNode STARTUP_MSG: host = VirtualBox/127.0.1.1 STARTUP_MSG: args = [] STARTUP_MSG: version = 1.0.4 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct 3 05:13:58 UTC 2012 ************************************************************/ 2013-08-18 19:52:21,301 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties 2013-08-18 19:52:21,394 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered. 2013-08-18 19:52:21,412 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s). 2013-08-18 19:52:21,417 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started 2013-08-18 19:52:23,207 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered. 2013-08-18 19:52:23,276 WARN org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Source name ugi already exists! 2013-08-18 19:52:26,887 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /app/hadoop/tmp/dfs/data: namenode namespaceID = 457871323; datanode namespaceID = 2066655210 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.(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) 2013-08-18 19:52:26,903 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down DataNode at VirtualBox/127.0.1.1 ************************************************************/ 

知道为什么吗?我该如何解决?

我已经发生了几次这种情况。 如果重新启动数据节点没有帮​​助,请执行以下操作:

  1. 重启Hadoop
  2. 转到/ app / hadoop / tmp / dfs / name / current
  3. 打开VERSION(即通过vim VERSION
  4. 记录namespaceID
  5. 转到/ app / hadoop / tmp / dfs / data / current
  6. 打开VERSION(即通过vim VERSION
  7. 将namespaceID替换为您在步骤4中记录的namespaceID。

这应该可以解决问题。

当我们格式化名称节点时,这是众所周知的问题。 请参考以下url:

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#javaioioexception-incompatible-namespaceids

这通常会在格式化namenode并且不进行datanode清理并且命名空间更改时产生。

可能的解决方案:

尝试删除/ app / hadoop / tmp / dfs / data目录并重新启动datanode

我在namenode上丢失了数据。 我不得不格式化我的namenode

 hadoop namenode -format 

启动namenode后,由于VERSION问题,datanode无法启动

然后我还需要从datanode中删除所有数据。

我可以简单地清理dfs中的数据文件夹(/{hadoop.tmp.dir}/dfs/data/*)并重启datanode

rm -rf /{hadoop.tmp.dir}/dfs/data/*

要么

删除VERSION文件(/{hadoop.tmp.dir}/dfs/data/current/VERSION)并重启datanode

 Restart Hadoop Go to /app/hadoop/tmp/dfs/name/current Open VERSION (ie by vim VERSION) Record namespaceID Go to /app/hadoop/tmp/dfs/data/current Open VERSION (ie by vim VERSION) Replace the namespaceID with thve namespaceID you recorded in step 4. 

要执行以上步骤,我没有数据文件夹/ tmp / data中的任何文件