自己的集羣啓動挺長時間,有天改了文件,需要重啓,在主目錄下停止hdfs發現報錯,no namenode to stop.再jps一下,果然沒停掉.
網上查找原因,發現是hadoop啓動時會生成namenode/datanode/zkfc/journalnode等的pid文件,而hadoop的pid文件是默認保存在/tmp目錄下的,Linux系統默認會定時去清理這個目錄下的文件.所以是沒有pid文件而導致進程無法結束.
解決辦法.一個是直接手動kill掉hadoop的進程.
第二個,永久解決,修改hadoop的hadoop-env.sh配置文件,修改HADOOP_PID_DIR的路徑.
export HADOOP_PID_DIR=/home/office/hadoop-2.6.0-cdh5.14.0/pids
修改之後就可以了.
在停止yarn的時候也發生了同樣的問題. no resourcemanager tostop/no nodemanager to stop.查看yarn-daemon.sh腳本,在腳本註釋部分發現很關鍵的一句話
YARN_PID_DIR The pid files are stored. /tmp by default.
繼續往下看,看到這段代碼
if [ "$YARN_PID_DIR" = "" ]; then
YARN_PID_DIR=/tmp
fi
瞬間頓悟了,跟hdfs一樣,yarn也有pid文件,而且pid文件默認是在/tmp文件夾下面.
解決辦法還是和hdfs一樣.先kill掉yarn的進程.再修改YARN_PID_DIR的路徑.YARN_PID_DIR=/home/office/hadoop-2.6.0-cdh5.14.0/pids
再來,停止jobhistoryserver.停止的時候果然報錯了no historyserver to stop.
此時我的內心波瀾不驚,甚至隱隱還有點期待,查看mr-jobhistory-daemon.sh腳本.果然,相同的配方,相同的味道.註釋腳本里面有一段代碼
# HADOOP_MAPRED_PID_DIR The pid files are stored. /tmp by default.
再往下走,相同的味道
if [ "$HADOOP_MAPRED_PID_DIR" = "" ]; then
HADOOP_MAPRED_PID_DIR=/tmp
fi
解決辦法還是一樣,先kill掉jobhistoryserver進程,再修改mr-jobhistory-daemon.sh腳本的HADOOP_MAPRED_PID_DIR目錄.HADOOP_MAPRED_PID_DIR=/home/office/hadoop-2.6.0-cdh5.14.0/pids
完活.