对hadoop做了一些优化配置,重启时提示,no namenode to stop。jps查看,进程都是有的。就是无法关闭。
1,发现问题
[root@bigserver1 sbin]# ./stop-all.sh This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh Stopping namenodes on [bigserver1 testing] testing: no namenode to stop bigserver1: no namenode to stop bigserver2: no datanode to stop bigserver3: no datanode to stop 。。。。。。。。。省略。。。。。。。。。 [root@bigserver1 sbin]# jps //进程都有,无法关闭 22820 NameNode 6420 QuorumPeerMain 9364 HRegionServer 6567 ResourceManager 3032 RunJar 1946 JournalNode 23194 DFSZKFailoverController 9482 Jps 9231 HMaster
2,分析原因
打开脚本stop-all.sh ,一步步找代码发现,在hadoop-daemon.sh找到原因
# vim hadoop-daemon.sh //以下是片段代码 if [ "$HADOOP_PID_DIR" = "" ]; then HADOOP_PID_DIR=/tmp //如果没有指定pid目录,默认在tmp下面 fi //设置pid变量,指定到了pid文件 pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid (stop) if [ -f $pid ]; then TARGET_PID=`cat $pid` if kill -0 $TARGET_PID > /dev/null 2>&1; then echo stopping $command kill $TARGET_PID sleep $HADOOP_STOP_TIMEOUT if kill -0 $TARGET_PID > /dev/null 2>&1; then echo "$command did not stop gracefully after $HADOOP_STOP_TIMEOUT seconds: killing with kill -9" kill -9 $TARGET_PID fi else echo no $command to stop fi rm -f $pid else //如果PID文件不存在,返回no namenode to stop等 echo no $command to stop fi ;;
检查一下/tmp/目录,pid文件是否存在
[root@bigserver1 sbin]# ll /tmp/ 总用量 0 drwxr-xr-x 2 root root 6 10月 12 14:33 16db70ac-f161-4a3f-9e6d-9c6560b31144_resources drwxr-xr-x 2 root root 6 10月 12 14:03 4c5d3bf2-3a96-4fd6-b96e-56a1a7f98151_resources drwxr-xr-x 4 root root 33 10月 12 14:33 hadoop-unjar8194392439103380982 drwxr-xr-x 3 root root 19 10月 10 16:08 hbase-root drwxr-xr-x 2 root root 80 10月 12 15:02 hsperfdata_root drwxr-xr-x 3 root root 249 10月 12 14:33 root drwx------ 3 root root 17 7月 6 13:46 systemd-private-ce9b83096d864d9d90ab629a4677e152-nginx.service-EBKkaR drwx------ 3 root root 17 9月 23 16:04 systemd-private-ce9b83096d864d9d90ab629a4677e152-ntpd.service-L37F8G
果然没有pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid这种格式的PID文件
/tmp/是临时目录,系统会定时清理该目录中的文件。把pid文件放在这里是不合适的,pid文件长时间不被访问,就会被清理掉
3,解决问题
[root@bigserver1 sbin]# jps //查看所有进程,获取进程ID,为KILL做准备 22820 NameNode 6420 QuorumPeerMain //zookeeper 9364 HRegionServer //hbase 6567 ResourceManager 3032 RunJar 1946 JournalNode 23194 DFSZKFailoverController 9482 Jps 9231 HMaster //hbase [root@bigserver1 sbin]# kill -9 22820 6567 1946 23194 3032 [root@bigserver1 sbin]# ./start-all.sh //启动 [root@bigserver1 tmp]# ls -ltr //查看pid文件 总用量 12 drwx------ 3 root root 17 7月 6 13:46 systemd-private-ce9b83096d864d9d90ab629a4677e152-nginx.service-EBKkaR drwx------ 3 root root 17 9月 23 16:04 systemd-private-ce9b83096d864d9d90ab629a4677e152-ntpd.service-L37F8G drwxr-xr-x 3 root root 19 10月 10 16:08 hbase-root drwxr-xr-x 2 root root 6 10月 12 14:03 4c5d3bf2-3a96-4fd6-b96e-56a1a7f98151_resources drwxr-xr-x 4 root root 33 10月 12 14:33 hadoop-unjar8194392439103380982 drwxr-xr-x 2 root root 6 10月 12 14:33 16db70ac-f161-4a3f-9e6d-9c6560b31144_resources drwxr-xr-x 3 root root 249 10月 12 14:33 root -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-namenode.pid //多出来一些PID文件 -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-journalnode.pid -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-zkfc.pid drwxr-xr-x 2 root root 80 10月 12 15:16 hsperfdata_root
改变pid路径就能解决这个问题,
在这个文件hadoop-daemon.sh开始加上以下变量,或者,加入环境变量,都可以解决这个问题
HADOOP_PID_DIR=$HADOOP_HOME/
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/hadoop/2191.html