剛配置的Hadoop + Zookeeper的雙NameNode的HA。Active、standby都正常,journalnodes、datanodes這些都正常。
一時手癢,非要重新來一次。好了,按照原來步驟操作,zkfc沒事,namenode沒事,journalnodes沒事,但是datanode死活就是出不來了。頁面裡顯示“live no1de”和“dead node”都是 0 。
進datanode執行 sbin/hadoop-daemon.sh start datanode也不報錯,說是寫到某個out3檔案,檢視也沒發現錯誤。
繼續查日志,找到datanode-log,發現如下錯誤資訊:
org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to test-datanode-1/10.11.22.33:9000. Exiting
在往上一點點,發現另一條線索:
Incompatible clusterIDs in /data/hadoop-2.7.2/hdfs/data: namenode clusterID = CID-db8e18c0-800f-4f1d-8573-0358a72b0484; datanode clusterID = CID-2cd17333-42ea-4354-a788-8765a154803b
clusterID不比對造成的。
原因:
當時“再來一次”,又重新執行了格式化指令(hdfs namenode -format),這時namenode的clusterID會重新生成,而datanode的clusterID 保持不變。
是以,解決辦法也很簡單了,把name/current/VERSION裡面的clusterID複制下來,依次替換data/current/VERSION裡的clusterID,再執行:
sbin/hadoop-daemon.sh start datanode
就可以了。