執行stop-dfs.sh後無法停止hadoop叢集【hadoop】
阿新 • • 發佈:2018-11-30
錯誤情況:
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清理。