很久沒管hadoop集群,用stop-all.sh想關掉報錯:
[root@master bin]# ./stop-all.sh
no jobtracker to stop
slave2: no tasktracker to stop
slave1: no tasktracker to stop
no namenode to stop
slave1: no datanode to stop
slave2: no datanode to stop
master: no secondarynamenode to stop
問題原因在於hadoop啟動停止都是通過hadoop-deamon.sh文件,腳本是通過pid文件來停止hadoop服務的。而集群默認配置的pid文件位於/tmp目錄下,linux系統默認每30天清理一次/tmp目錄下的文件,pid文件丟失將導致無法正確關閉相應進程。
由於pid文件已經無法找回,所以只能先用jps獲取進程號,然后用kill -9殺掉對應進程,停止集群。
要徹底解決這個問題得在集群關閉之前修改conf/hadoop-env.sh文件,增加export HADOOP_PID_DIR=/usr/local/src/hadoop-1.2.1指定pid文件存放路徑。