ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /var/lib/hadoop-0.20/cache/hdfs/dfs/data: namenode namespaceID = 240012870; datanode namespaceID = 1462711424 .

  问题:Namenode上namespaceID与datanode上namespaceID不一致。

  问题产生原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,所以造成namenode节点上的namespaceID与datanode节点上的namespaceID不一致。启动失败。

  第一种解决方法:即:

  (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)重新启动集群。

  问题解决。

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

下面给出两种解决办法,我使用的是第二种。

Workaround 1: Start from scratch

I can testify that the following steps solve this error, but the side effects won't make you happy (me neither). The crude workaround I have found is to:

1.     stop the cluster

2.     delete the data directory on the problematic datanode: the directory is specified by dfs.data.dir in conf/hdfs-site.xml; if you followed this tutorial, the relevant directory is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data

3.     reformat the namenode (NOTE: all HDFS data is lost during this process!)

4.     restart the cluster

When deleting all the HDFS data and starting from scratch does not sound like a good idea (it might be ok during the initial setup/testing), you might give the second approach a try.

Workaround 2: Updating namespaceID of problematic datanodes

Big thanks to Jared Stehler for the following suggestion. I have not tested it myself yet, but feel free to try it out and send me your feedback. This workaround is "minimally invasive" as you only have to edit one file on the problematic datanodes:

1.     stop the datanode

2.     edit the value of namespaceID in <dfs.data.dir>/current/VERSION to match the value of the current namenode

3.     restart the datanode

If you followed the instructions in my tutorials, the full path of the relevant file is /usr/local/hadoop-datastore/hadoop-hadoop/dfs/data/current/VERSION (background: dfs.data.dir is by default set to ${hadoop.tmp.dir}/dfs/data, and we set hadoop.tmp.dir to /usr/local/hadoop-datastore/hadoop-hadoop).

If you wonder how the contents of VERSION look like, here's one of mine:

#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

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

最新文章

  1. 《java JDK7 学习笔记》之对象封装
  2. php : 基础(5)
  3. 学习PYTHON之路, DAY 4 - PYTHON 基础 4 (内置函数)
  4. 20145230GDB调试汇编堆栈过程分析
  5. php验证登录
  6. Javascript基础系列之(三)数据类型 (数值 Number)
  7. LUA笔记之表
  8. springmvc数据处理模型
  9. 使用JS调用WebService接口
  10. Linux的关机与重启命令
  11. 第一个程序点亮一个LED灯
  12. python webserver, based on SimpleHTTPServer
  13. MySQL用户授权与权限
  14. Linux 之归档与压缩
  15. Java 8 异常该进
  16. mysql的定时任务
  17. Android修行之路------List view无法获取监听方法
  18. Hihocoder #1082 : 然而沼跃鱼早就看穿了一切 暴力
  19. 以安全模式启动firefox
  20. Agc012_E Camel and Oases

热门文章

  1. yii2.0缓存的使用
  2. 进程、线程、ThreadLlocal
  3. 如何安装Microsoft Visual C++6.0
  4. 2016 ACM-ICPC EC-Final题解
  5. wpf中为DataGrid添加checkbox支持多选全选
  6. flask之instance_path实例路径
  7. Js基础之常用对象
  8. Java基础--压缩和解压缩gz包
  9. JAX-WS注解
  10. 机器学习:PCA(高维数据映射为低维数据 封装&amp;调用)