hadoop no namenode to stop 无法关闭

张映 发表于 2019-10-12

分类目录: hadoop/spark/scala

标签:,

对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