解決Hadoop集群hdfs無法啟動DataNode的問題
問題描述:
在hadoop啟動hdfs的之後,使用jps
命令查看運行情況時發現hdfs的DataNode並沒有打開。
筆者出現此情況前曾使用hdfs namenode -format
格式化了hdfs
如有三個hadoop集群,分別為hadoop102,hadoop103,hadoop104 其問題情況如下
可見三個機器均沒有將DataNode啟動。
問題分析:
進入hadoop根目錄的logs中查看DataNode的日誌文件
可以看見報錯信息
java.io.IOException: Incompatible clusterIDs in /opt/module/hadoop-3.1.3/tmp/dfs/data: namenode clusterID = CID-726c3bd8-d0cd-4d36-a62f-c1ee3723935e; datanode clusterID = CID-0a991ac2-ed1e-4b2c-b179-c7d943eeae1f
這裡顯示NameNode的clusterID和DataNode的clusterID不一致,所以無法啟動DataNode
這種情況可能時因為我們使用hdfs namenode -format
的時候僅僅格式化了namenode的clusterID,沒有同步格式化DataNode的clusterID。這就導致了二者的clusterID不一致從而無法啟動DataNode。
解決方案:
方案一(簡單):
刪除NameNode所在機器的hadioop根目錄etc/hadoop/core-site.xml文件中定義的hadoop.tmp.dir 文件夾。筆者這裡設置的時hadoop根目錄中的data目錄。(有些人設置的時tmp目錄,根據自己的配core-site.xml中配置的信息來)
刪除NameNode之外的hadoop根目錄的data文件夾。
重新格式化hdfs hdfs namenode -format
問題解決!
方案二:
觀察剛剛的日誌文件,可以知道NameNode的ClusterID為CID-726c3bd8-d0cd-4d36-a62f-c1ee3723935e
我們只需要用這個clusterID去替換DataNode文件中的clusterID即可
在NameNode所在機器的hadioop根目錄etc/hadoop/core-site.xml文件中定義的hadoop.tmp.dir 文件夾中一直進入到datanode文件中/opt/module/hadoop-3.1.3/tmp/dfs/data/current/VERSION 修改VERSION中的clusterID為剛剛NameNode的clusterID。
在其他機器中,修改data文件夾中的設置/opt/module/hadoop-3.1.3/data/dfs/data/current/VERSION
修改VERSION中的clusterID為剛剛NameNode的clusterID。
問題解決!