datanode启动失败

背景:hadoop版本切换

hadoop 版本从2.6.5 切换到了2.7.4

结果datanode 启动失败

日志分析

错误提示namespaceIDs不一致。

解决办法1

删掉hadoop tmp目录下所有数据后,重新格式化

  1. 停掉集群服务
  2. 在出问题的datanode节点上删除data目录,data目录即是在hdfs-site.xml文件中配置的dfs.data.dir目录,本机器上那个是/var/lib/hadoop-0.20/cache/hdfs/dfs/data/ (注:我们当时在所有的datanode和namenode节点上均执行了该步骤。以防删掉后不成功,可以先把data目录保存一个副本).
  3. 格式化namenode.
  4. 重新启动集群。

    原因

    每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下 的所有目录. 

这种方法带来的一个副作用即是,hdfs上的所有数据丢失。如果hdfs上存放有重要数据的时候,不建议采用该方法,可以尝试提供的网址中的第二种方法。

解决办法2

更新有问题的datanode 的namespaceID

  1. 停止datanode
  2. 编辑datanode namespaceID in /current/VERSIO to match the value of the current namenode
  3. 重启datanode
1
2
3
4
5
6
#contents of <dfs.data.dir>/current/VERSION
namespaceID=393514426
storageID=DS-1706792599-10.10.10.1-50010-1204306713481
cTime=1215607609074
storageType=DATA_NODE
layoutVersion=-13

参考资料

  1. HADOOP报错Incompatible namespaceIDs