ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: 
Initialization failed for Block pool <registering> 
(Datanode Uuid 1098277a-8189-4b88-9a9b-31dbb7cdd27f) service to hadoop162/192.168.1.162:8020. Exiting. 
java.io.IOException: All specified directories have failed to load.


问题描述
开机启动集群时,发现有节点的DataNode没有启动。

确认配置信息没问题后,观察节点的中的datanode日志(配置文件中指定)发现:Initialization failed for Block pool

问题分析

在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时NameNode的clusterID会重新生成,而DataNode的clusterID 保持不变。

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



解决方法:
方法一

        停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.data.dir目录(我的目录:/opt/hadoopdata)。重新格式化NameNode。

方法二

        停掉集群,然后将出现问题的DataNode节点目录/opt/hadoopdata/dfs/data/current/下的VERSION中clusterID的修改为与NameNode中/opt/hadoopdata/dfs/name/current/下的VERSION中clusterID一致即可。

其实只需要把 data/current/VERSION中的clusterID改为和 name/current/VERSION中的clusterID一致。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐