自己的集群启动挺长时间,有天改了文件,需要重启,在主目录下停止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
完活.