遇到问题---Hadoop---java.io.IOException: Incompatible namespaceIDs
2016-09-06 19:31
417 查看
现象
我们前面做完了namenode format之后,用./start-all.sh 重启之后jps检查发现slave机子的datanode没有启动起来。如图:少了datanode。
进入日志路径查看日志
cd /home/joe/hadoop/hadoop-1.2.1/libexec/../logs ls tail -f -n 800 hadoop-joe-datanode-hadoop1.log
发现出现了java.io.IOException: Incompatible namespaceIDs。
详细报错信息如下:
STARTUP_MSG: Starting DataNode
STARTUP_MSG: host = hadoop1/192.168.30.25
STARTUP_MSG: args = []
STARTUP_MSG: version = 1.2.1
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1503152; compiled by 'mattf' on Mon Jul 22 15:23:09 PDT 2013
STARTUP_MSG: java = 1.8.0_91
************************************************************/
2016-09-05 21:09:57,024 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
2016-09-05 21:09:57,058 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source MetricsSystem,sub=Stats registered.
2016-09-05 21:09:57,060 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
2016-09-05 21:09:57,060 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: DataNode metrics system started
2016-09-05 21:09:57,279 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source ugi registered.
2016-09-05 21:09:58,113 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /home/joe/hadoop/hadooptmpdir/dfs/data: namenode namespaceID = 883720225; datanode namespaceID = 1713418829
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:414)
at org.apache.hadoop.hdfs.server.datanode.DataNode.<init>(DataNode.java:321)
at org.apache.hadoop.hdfs.server.datanode.DataNode.makeInstance(DataNode.java:1712)
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1651)
at org.apache.hadoop.hdfs.server.datanode.DataNode.createDataNode(DataNode.java:1669)
at org.apache.hadoop.hdfs.server.datanode.DataNode.secureMain(DataNode.java:1795)
at org.apache.hadoop.hdfs.server.datanode.DataNode.main(DataNode.java:1812)
2016-09-05 21:09:58,114 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down DataNode at hadoop1/192.168.30.25
************************************************************/
原因
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,所以id会对应不起,导致启动时失败。解决方法
现在已知的3种解决方法,一种是删除datanode下的数据,但这种方法会造成数据丢失。方法2是重新配置一个新的空目录给datanode保存数据。这种数据没丢失,但是启动后datanode是找不到之前的文件的。(也相当于数据丢失了)。
方法3是修改namenodeId,使namenodeId一致。再重新启动即可。(推荐)
除了测试环境或者全部格式化,否则不建议使用前2种方法。
方法一
清空namenode的数据存放目录数据存放目录我们之前在conf/hdfs-site.xml中有设置dfs.data.dir,可以找到自己对应的目录。
如果没有设置,默认是目录:hadooptmpdir/dfs/data。(不同版本可能有差异)具体可以在安装目录的上层去找找。我的目录如图:
执行命令
rm -r /home/joe/hadoop/hadooptmpdir/dfs/data
再启动hadoop即可:
cd /home/joe/hadoop/hadoop-1.2.1/bin ./start-all.sh
方法二
重新配置一个数据保存的路径。也就是conf/hdfs-site.xml中的设置dfs.data.dir。
vim /home/joe/hadoop/hadoop-1.2.1/conf/hdfs-site.xml
比如修改(新增)如下:
<property> <name>hadoop.tmp.dir</name> <value> /home/joe/hadoop/hadoop-${user.name} </value> </property>
再启动hadoop即可:
cd /home/joe/hadoop/hadoop-1.2.1/bin ./start-all.sh
方法三
将旧datanode上的namespaceID修改成和namenode上的namespaceID一样,namenode上的namespaceID的位置为:namenode数据存数目录下的current/VERSION文件里。dfs/name/current/VERSION里。
datanode上存储namespaceID的位置为:datanode数据存数目录下的current/VERSION文件里。dfs/data/current/VERSION,将其中的namespaceID修改为namenode上的namespaceID,重新启动即可。
或者根据报错信息我们也可以知道
namenode namespaceID = 883720225; datanode namespaceID = 1713418829。
也就是需要将dfs/data/current/VERSION文件中的namespaceID修改为883720225。
vim /home/joe/hadoop/hadooptmpdir/dfs/data/current/VERSION
把1713418829修改成883720225即可。
重启Hadoop
cd /home/joe/hadoop/hadoop-1.2.1/bin ./start-all.sh
jps查看datanode是否启动起来:
cd /home/joe/hadoop/hadoop-1.2.1/bin./start-all.sh
相关文章推荐
- 遇到问题---Hadoop---java.io.IOException: Incompatible namespaceIDs
- org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /
- hadoop启动jobtracker时错误java.io.IOException: Incompatible namespaceIDs的解决方法
- org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in
- java.io.IOException: Incompatible namespaceIDs in /usr/hadoop/tmp/dfs/data: namenode namespaceID = 6
- org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs
- 遇到问题---Hadoop---java.io.IOException: NameNode is not formatted
- Hadoop与HBase中遇到的问题(续)java.io.IOException: Non-increasing Bloom keys异常
- Hadoop与HBase中遇到的问题(续)java.io.IOException: Non-increasing Bloom keys异常
- ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceID
- ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceID
- DataNode: java.io.IOException: Incompatible namespaceIDs in /dfs/dfs/data: namenode namespaceID = 69
- 遇到问题---Hadoop---java.io.IOException: NameNode is not formatted
- java.io.IOException: Incompatible namespaceIDs
- Hadoop问题:启动hadoop时报namenode未初始化:java.io.IOException: NameNode is not formatted.
- 安装Pig遇到的问题:Exception in thread "main" java.io.IOException: 权限不够
- Hadoop Problem : org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible
- 5、Hadoop datanode无法启动,报错: java.io.IOException: Incompatible clusterIDs
- 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_
- 问题记录:hadoop集群提交job时出现Exception in thread "main" java.io.IOException: Error opening job jar: