摘要:该文档解决了多次格式化文件系统后,datanode无法启动的问题
一、问题描述
当我多次格式化文件系统时,如
grid@masternode:~/hadoop$ bin/hadoop namenode -format
会出现datanode无法启动,查看slave节点的日志,发现包含如下信息:
2012-09-07 05:53:27,245 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException:Incompatible namespaceIDs in /home/grid/hadoop/data: namenode namespaceID = 1155419402; datanode namespaceID = 696660979
二、问题产生原因
当我们在master节点执行文件系统格式化命令时,会在master节点的namenode数据文件夹(即配置文件hdfs-site.xml中dfs.name.dir指明的路径)中保存一个current/VERSION文件,记录namespaceID,标识了所格式化的最新namenode的版本。master节点的namespaceID每次格式化都刷新。
但是,slave节点的datanode数据文件夹(即配置文件hdfs-site.xml中dfs.data.dir指明的路径)中保存的current/VERSION文件不会随着每次格式化都刷新,只保留了第一次格式化时master节点保存的namespaceID。
如果我们频繁的格式化namenode,那么slave节点的namespaceID就会与master节点的namespaceID不一致,因此就会造成上述错误。
三、解决办法
修改各slave节点的namespaceID与master节点保持一致。
附录:
hdfs-site.xml文件内容:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/home/grid/hadoop/namedata</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/grid/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>