分享

hadoop2.2.0使用遇到的问题

nettman 2014-3-18 15:31:04 发表于 问题解答 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 7524
出现Incompatible clusterIDs可能的原因是什么?
如果只格式化了namenode,没有格式化此datanode,可能会出现什么情况?

加微信w3aboutyun,可拉入技术爱好者群

没找到任何评论,期待你打破沉寂

nettman 发表于 2014-3-18 15:33:56
本帖最后由 nettman 于 2014-3-18 15:36 编辑
(注意: 本人用的版本为hadoop2.2.0, 旧的版本和此版本的解决方法不同)


异常为:
(storage id DS-2102177634-172.16.102.203-50010-1384415799536) service to cluster1/172.16.102.201:9000
java.io.IOException: Incompatible clusterIDs in /home/grid/hadoop-2.2.0-src/hadoop-dist/target/hadoop-2.2.0/yarn_data/dfs/data: namenode clusterID = CID-c833e211-a141-41c9-b0b4-5fbfcffeb5bf; datanode clusterID = CID-0048bbc6-49f8-44dc-bd65-00dbd35e70b7
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:391)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:191)
        at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:219)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:837)
        at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:808)
        at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:280)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:222)
        at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:664)
        at java.lang.Thread.run(Thread.java:744






出错原因:
  hadoop的升级功能需要data-node在它的版本文件里存储一个永久性的clusterID,当它(datanode)启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。

  每次格式化namenode都会长胜一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。



解决之道:



solution1 Start from scratch
1. stop the full cluster

2. 删除出现问题的datanode上的dfs.namenode.data.dir/tmp/hadoop−{user}, 此变量是在$HADOOP_CONF_DIR/下的hdfs-site.xml里定义的。

3. 重新格式化namenode, 此后所有在hdfs上的数据都将被擦除!

4. restart the cluster

solution2 手动更新clusterID(旧的版本对应更新namespaceID(MRV1))

1. 在namenode上, ${dfs.namenode.name.dir}/current/VERSION 里找到clusterID  ( ${dfs.namenode.name.dir}在hdfs-site.xml里定义, 下同 )

2. 在出问题的datanode上, ${dfs.namenode.data.dir}/current/VERSION 里找到clusterID, 用步骤1中得到的clusterID覆盖之。

3. 在问题节点上重启datanode.

评注: 此方法不用格式化dfs, 为首选方法, 这样看来,solution1方法不太好, 而我看了很多很多人写的博客,选择用solution1来解决此问题。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条