解決"no datanode to stop"問題
當我停止Hadoop時發現如下信息:
no datanode to stop
原因:每次namenode format會重新創建一個namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的數據,但是沒有清空datanode下的數據,導致啟動時失敗,有兩種解決方案:
第一種解決方案如下:
1)先刪除"/usr/hadoop/tmp"
rm -rf /usr/hadoop/tmp
2)創建"/usr/hadoop/tmp"文件夾
mkdir /usr/hadoop/tmp
3)刪除"/tmp"下以"hadoop"開頭文件
rm -rf /tmp/hadoop*
4)重新格式化hadoop
hadoop namenode -format
5)啟動hadoop
start-all.sh
使用第一種方案,有種不好處就是原來集群上的重要數據全沒有了。假如說Hadoop集群已經運行了一段時間。
建議采用第二種。
第二種方案如下:
1)修改每個Slave的clusterID使其與Master的clusterID一致。
或者
2)修改Master的clusterID使其與Slave的clusterID一致。
該"namespaceID"位於"/home/zkpk/hadoopdata/dfs/name/current/VERSION"文件中,前面藍色的可能根據實際情況變化,但后面紅色一般是不變的。
例如:查看"Master"下的"VERSION"文件
本人建議采用第二種,這樣方便快捷,而且還能防止誤刪。
總結一下,其實找不到datanode的原因可能往往是因為自己搭建集群的時候格式化多次了,當然不排除機子突然抽風了,本來集群搭建第一次格式化時namenode生成一個clusterID,並且復制給子節點了,當再次不小心格式化的時候導致namenode和datanode的clusterID不一樣了,所以才會出現start-all.sh的時候找不到datanode了。