[Hadoop2.x] Hadoop運行一段時間後,stop-dfs等操做失效緣由及解決方法

長時間運行Hadoop以後,若是運行 stop-dfs.sh(或stop-all.sh),會發現有如下相似錯誤:node

Stopping namenodes on [localhost]
localhost: no namenode to stop
localhost: no datanode to stop
Stopping secondary namenodes [localhost]
localhost: no secondarynamenode to stop
oop

這個時候訪問hadoop依然有效,查看文件系統,經過50070端口依然能訪問,start-all後再stop-all也沒有任何效果,等於這個時候徹底沒法控制hadoop了。spa

出現這個問題的最多見緣由是:hadoop在stop的時候依據的是datanode上的mapred和dfs進程號。默認的進程號保存在/tmp下Linux默認會每隔一段時間(通常是一個月或者7天左右)去刪除這個目錄下的文件。所以刪掉 hadoop-root-namenode.pid, hadoop-root-namenode.pid, hadoop-root-secondarynamenode.pid等pid文件後,namenode天然就找不到datanode上的這兩個進程了。進程

另外還有兩個緣由可能引發這個問題:hadoop

  1. 環境變量 $HADOOP_PID_DIR 在你啓動hadoop後改變了
  2. 用另外的用戶身份執行 stop-dfs.sh 等命令

解決方法:變量

永久解決方法:修改 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 文件,將 export HADOOP_PID_DIR=${HADOOP_PID_DIR}  的 ${HADOOP_PID_DIR} 路徑修改成你本身指定目錄,這樣Hadoop會把相關pid進程文件保存在指定目錄,避免被Linux自動刪除。例如:map

export HADOOP_PID_DIR=/usr/local/hadoop/pids/grep

發現問題後的解決方法:方法

這個時候經過腳本已經沒法中止進程了,不過咱們能夠手工中止,經過 ps -ef | grep Java | grep hadoop找到hadoop的全部進程號強制殺掉(kill -9 進程號),而後再執行 start-dfs.sh, start-yarn.sh 等命令啓動hadoop,之後 stop-dfs.sh 等命令就不會生效了。腳本

相關文章
相關標籤/搜索