1. 程式人生 > >執行stop-dfs.sh後無法停止hadoop叢集【hadoop】

執行stop-dfs.sh後無法停止hadoop叢集【hadoop】

錯誤情況:

Stopping namenodes on [master]
master: no namenode to stop
slave1: no datanode to stop
slave2: no datanode to stop
slave3: no datanode to stop
Stopping secondary namenodes

3. 原因分析

執行stop-dfs.sh後,會依次執行hadoop-daemons.sh > hadoop-daemon.sh指令碼,然後定位到“no $command to stop”
發現指令碼會在$HADOOP_PID_DIR
目錄裡面查詢hadoop-$HADOOP_IDENT_STRING-$command.pid檔案, $HADOOP_PID_DIR目錄預設是/tmp目錄,$HADOOP_IDENT_STRING預設是啟動Hadoop的使用者名稱$USER,$command是 你要停止的節點型別,例如namenode、datanode或secondarynamenode。所以本例的pid檔名是 :hadoop-hdfs-namenode.pid、hadoop-hdfs-secondarynamenode.pid、hadoop-hdfs-datanode.pid。
因為根據linux的tmpwatch,預設在30
天內檔案不被訪問的情況下就會被清理,所以導致找不到上述的pid檔案, 因此無法停止namenodes、datanodes和secondary namenodes。

解決方法

使用ps命令查詢正在執行的namenodes、datanodes和secondary namenodes的pid,然後在/tmp目錄建立對應的pid檔案,重新執行stop-dfs.sh指令碼,一切正常!或者可以直接執行kill -9命令把對應的pid程序殺掉。下次重新啟動hdfs之前建議修改$HADOOP_PID_DIR目錄,否則的話那些pid檔案還是會被tmpwatch清理。

參考部落格

部落格地址1