Hadoop集羣啓動,指令start-all.sh 但slave節點沒有datanode

場景

在對集羣進行啓動時,使用指令start-all 但是slave節點上的datanode沒有啓動。
Expect Result:
在HadoopMaster終端上執行JPS指令,顯示四個進程:
在HadoopMaster終端上
在HadoopSlave終端上執行JPS指令,顯示三個進程:
在HadoopSlave終端
而現在啓動後,發現在HadoopSlave終端上只有2個進程:

原因

原因如網上所說,是因爲進行了多次格式化指令:
hdfs namenode -format
每次格式化都會重新你創建一個namenodeId,而在默認情況下tmp/dfs/data下包含了上次format下的id,格式化不會清空datanode下的數據,導致啓動失敗。這裏我覺得有時候我們做stop-all.sh 對節點失效可能也是這個原因,因爲tmp路徑下的文件默認會有一段時間自動刪除,這將導致id失效,所以在長久不做stop操作時,可能會導致。此時有部分人會在core-site.xml對tmp.dir進行指向,但是同樣的指向路徑的數據也不會因爲格式化而被刪除,這將導致路徑中的VERSION文件中的namespaceId和ClusterID不一致,從而也可能造成的。

解決方案

1.停止集羣: stop-all.sh
2.到文件 /etc/hadoop/core-site.xml,找到hadoop.tmp.dir,查看其所設值對應路徑,如我的路徑就是software/hadoop/hadoopdata
3. 軟性操作:將路徑上~/dfs/data/current對應的version文件上ClusterID和namespaceId值由Master複製給其它node節點(網上很多都是這麼說的,我試了沒啥用,可能是我操作問題)
4. 硬剛版操作:直接將路徑這個hadoopdata文件刪了,既然是已經做了格式化,那就將這個刪了,直接在各個節點新建:[vp@slave01 ~]$ mkdir /software/hadoop/hadoopdata 然後在Master上做格式化,然後再執行start-all.sh (我是這麼幹的,有效)
5. 當然,也有說將temp路徑下文件全部刪除,試試的,這個可能是對hadoop.tmp.dir默認沒有改動的考慮操作的,因爲我已經對core-site.xml改動,因此失效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章