问题背景,在node113上搭建的伪分布式集群,已经测试运行通过,后来又与另外两台虚拟机搭建完全分布式集群,node113上的datanode无法启动,查看日志有如下错误信息:
2018-01-19 00:19:46,818 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to node112/192.168.28.112:8020. Exiting.
java.io.IOException: All specified directories are failed to load.
at org.apache.hadoop.hdfs.server.datanode.DataStorage.recoverTransitionRead(DataStorage.java:478)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initStorage(DataNode.java:1342)
at org.apache.hadoop.hdfs.server.datanode.DataNode.initBlockPool(DataNode.java:1308)
at org.apache.hadoop.hdfs.server.datanode.BPOfferService.verifyAndSetNamespaceInfo(BPOfferService.java:314)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.connectToNNAndHandshake(BPServiceActor.java:226)
at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:867)
at java.lang.Thread.run(Thread.java:745)
解决方法,因为node113上的hadoop.tmp.dir属性指定的hadoop工作目录在搭建伪分布式的时候已经通过"hdfs namenode -format"格式化过了,可能存在一些问题吧,现在只需要把hadoop.tmp.dir指定的值/usr/local/hadoop/data目录清空,然后重新格式化即可。