bug:datanode启动后立刻死掉:java.io.IOException: Incompatible clusterIDs in....
2016-06-11 21:02
603 查看
错误描述:
搭建伪分布式hadoop时,format namenode之后,start-dfs.sh启动hdfs,jps发现datanode启动后不久就自动死掉了。在日志文件:/usr/local/hadoop/hadoop-2.6.0/logs/hadoop-liuxianfa-datanode-liuxianfa8.out中看到如下报错信息。上网查了一下,发现了解决办法如下。
(注意:liuxianfa8机器上的hadoop的版本为hadoop2.6.0, 旧的版本和此版本的解决方法不同)
异常信息:(这里的异常信息是我自己搭建的时候的异常信息。原来文章的异常信息删掉了。)
java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/hadoop-2.6.0/data/tmp/dfs/data: namenode clusterID = CID-c602bccc-3af9-431d-8391-f57b9660d078; datanode clusterID = CID-48c46c43-8a44-4096-93bf-61d9942c8e2b
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:646)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:320)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:403)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:422)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1311)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1276)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:314)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:220)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:828)
at java.lang.Thread.run(Thread.java:745)
出错原因:
hadoop的升级功能需要data-node在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。
每次格式化namenode都会生成一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。
参见官方CCR[HDFS-107]
解决之道:
此异常可从官方CCRs里找到:HDFS-107(formerly known as
HADOOP-1212)
solution1 Start from scratch
1. stop the full cluster
2. 删除出现问题的datanode上的{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里定义,下同)(默认在core-site.xml文件中的${hadoop.tmp.dir}/dfs/name/current/VERSION)
2. 在出问题的datanode上, ${dfs.namenode.data.dir}/current/VERSION 里找到clusterID, 用步骤1中得到的clusterID覆盖之。
3. 在问题节点上重启datanode.
评注: 此方法不用格式化dfs, 为首选方法, 这样看来,只有脑残才会用solution1, 而我看了很多大陆人写的博客,偏偏就选择用solution1来解决此问题。
搭建伪分布式hadoop时,format namenode之后,start-dfs.sh启动hdfs,jps发现datanode启动后不久就自动死掉了。在日志文件:/usr/local/hadoop/hadoop-2.6.0/logs/hadoop-liuxianfa-datanode-liuxianfa8.out中看到如下报错信息。上网查了一下,发现了解决办法如下。
(注意:liuxianfa8机器上的hadoop的版本为hadoop2.6.0, 旧的版本和此版本的解决方法不同)
异常信息:(这里的异常信息是我自己搭建的时候的异常信息。原来文章的异常信息删掉了。)
java.io.IOException: Incompatible clusterIDs in /usr/local/hadoop/hadoop-2.6.0/data/tmp/dfs/data: namenode clusterID = CID-c602bccc-3af9-431d-8391-f57b9660d078; datanode clusterID = CID-48c46c43-8a44-4096-93bf-61d9942c8e2b
at org.apache.hadoop.hdfs.server.datanode.DataStorage.doTransition(DataStorage.java:646)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.addStorageLocations(DataStorage.java:320)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:403)
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:422)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1311)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1276)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:314)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:220)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:828)
at java.lang.Thread.run(Thread.java:745)
出错原因:
hadoop的升级功能需要data-node在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。
每次格式化namenode都会生成一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。
参见官方CCR[HDFS-107]
解决之道:
此异常可从官方CCRs里找到:HDFS-107(formerly known as
HADOOP-1212)
solution1 Start from scratch
1. stop the full cluster
2. 删除出现问题的datanode上的{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里定义,下同)(默认在core-site.xml文件中的${hadoop.tmp.dir}/dfs/name/current/VERSION)
2. 在出问题的datanode上, ${dfs.namenode.data.dir}/current/VERSION 里找到clusterID, 用步骤1中得到的clusterID覆盖之。
3. 在问题节点上重启datanode.
评注: 此方法不用格式化dfs, 为首选方法, 这样看来,只有脑残才会用solution1, 而我看了很多大陆人写的博客,偏偏就选择用solution1来解决此问题。
相关文章推荐
- SourceProvider.getJniDirectories
- 详解HDFS Short Circuit Local Reads
- Hadoop_2.1.0 MapReduce序列图
- 使用Hadoop搭建现代电信企业架构
- Trac 中文语言安装
- RedHat 5.8 安装Oracle 11gR2_Grid集群
- 单机版搭建Hadoop环境图文教程详解
- 软件 bug 的生命周期
- mysql集群之MMM简单搭建
- Firefox2中输入框丢失光标bug的解决方法
- for命令的一些bug分析
- 修正IE下使用CSS属性overflow的bug
- 解决IE6 3像素Bug的css写法
- MySQL的集群配置的基本命令使用及一次操作过程实录
- MySQL slave_net_timeout参数解决的一个集群问题案例
- hadoop常见错误以及处理方法详解
- 跟我学习JScript的Bug与内存管理
- JS注释所产生的bug 即使注释也会执行
- IE本地存储userdata的一个bug说明