hadoop no namenode to stop 无法关闭

张映 发表于 2019-10-12

分类目录: hadoop/spark/scala

标签:,

对hadoop做了一些优化配置,重启时提示,no namenode to stop。jps查看,进程都是有的。就是无法关闭。

1,发现问题

  1. [root@bigserver1 sbin]# ./stop-all.sh  
  2. This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh  
  3. Stopping namenodes on [bigserver1 testing]  
  4. testing: no namenode to stop  
  5. bigserver1: no namenode to stop  
  6. bigserver2: no datanode to stop  
  7. bigserver3: no datanode to stop  
  8. 。。。。。。。。。省略。。。。。。。。。  
  9.   
  10. [root@bigserver1 sbin]# jps    //进程都有,无法关闭  
  11. 22820 NameNode  
  12. 6420 QuorumPeerMain  
  13. 9364 HRegionServer  
  14. 6567 ResourceManager  
  15. 3032 RunJar  
  16. 1946 JournalNode  
  17. 23194 DFSZKFailoverController  
  18. 9482 Jps  
  19. 9231 HMaster  

2,分析原因

打开脚本stop-all.sh ,一步步找代码发现,在hadoop-daemon.sh找到原因

  1. # vim hadoop-daemon.sh //以下是片段代码  
  2.   
  3. if [ "$HADOOP_PID_DIR" = "" ]; then  
  4.   HADOOP_PID_DIR=/tmp     //如果没有指定pid目录,默认在tmp下面  
  5. fi  
  6.   
  7. //设置pid变量,指定到了pid文件  
  8. pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid  
  9.   
  10.   (stop)  
  11.   
  12.     if [ -f $pid ]; then  
  13.       TARGET_PID=`cat $pid`  
  14.       if kill -0 $TARGET_PID > /dev/null 2>&1; then  
  15.         echo stopping $command  
  16.         kill $TARGET_PID  
  17.         sleep $HADOOP_STOP_TIMEOUT  
  18.         if kill -0 $TARGET_PID > /dev/null 2>&1; then  
  19.           echo "$command did not stop gracefully after $HADOOP_STOP_TIMEOUT seconds: killing with kill -9"  
  20.           kill -9 $TARGET_PID  
  21.         fi  
  22.       else  
  23.         echo no $command to stop  
  24.       fi  
  25.       rm -f $pid  
  26.     else   //如果PID文件不存在,返回no namenode to stop等  
  27.       echo no $command to stop  
  28.     fi  
  29.     ;;  

检查一下/tmp/目录,pid文件是否存在

  1. [root@bigserver1 sbin]# ll /tmp/  
  2. 总用量 0  
  3. drwxr-xr-x 2 root root 6 10月 12 14:33 16db70ac-f161-4a3f-9e6d-9c6560b31144_resources  
  4. drwxr-xr-x 2 root root 6 10月 12 14:03 4c5d3bf2-3a96-4fd6-b96e-56a1a7f98151_resources  
  5. drwxr-xr-x 4 root root 33 10月 12 14:33 hadoop-unjar8194392439103380982  
  6. drwxr-xr-x 3 root root 19 10月 10 16:08 hbase-root  
  7. drwxr-xr-x 2 root root 80 10月 12 15:02 hsperfdata_root  
  8. drwxr-xr-x 3 root root 249 10月 12 14:33 root  
  9. drwx------ 3 root root 17 7月 6 13:46 systemd-private-ce9b83096d864d9d90ab629a4677e152-nginx.service-EBKkaR  
  10. 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,解决问题

  1. [root@bigserver1 sbin]# jps //查看所有进程,获取进程ID,为KILL做准备  
  2. 22820 NameNode  
  3. 6420 QuorumPeerMain //zookeeper  
  4. 9364 HRegionServer //hbase  
  5. 6567 ResourceManager  
  6. 3032 RunJar  
  7. 1946 JournalNode  
  8. 23194 DFSZKFailoverController  
  9. 9482 Jps  
  10. 9231 HMaster //hbase  
  11.   
  12. [root@bigserver1 sbin]# kill -9 22820 6567 1946 23194 3032  
  13.   
  14. [root@bigserver1 sbin]# ./start-all.sh //启动  
  15.   
  16. [root@bigserver1 tmp]# ls -ltr //查看pid文件  
  17. 总用量 12  
  18. drwx------ 3 root root 17 7月 6 13:46 systemd-private-ce9b83096d864d9d90ab629a4677e152-nginx.service-EBKkaR  
  19. drwx------ 3 root root 17 9月 23 16:04 systemd-private-ce9b83096d864d9d90ab629a4677e152-ntpd.service-L37F8G  
  20. drwxr-xr-x 3 root root 19 10月 10 16:08 hbase-root  
  21. drwxr-xr-x 2 root root 6 10月 12 14:03 4c5d3bf2-3a96-4fd6-b96e-56a1a7f98151_resources  
  22. drwxr-xr-x 4 root root 33 10月 12 14:33 hadoop-unjar8194392439103380982  
  23. drwxr-xr-x 2 root root 6 10月 12 14:33 16db70ac-f161-4a3f-9e6d-9c6560b31144_resources  
  24. drwxr-xr-x 3 root root 249 10月 12 14:33 root  
  25. -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-namenode.pid //多出来一些PID文件  
  26. -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-journalnode.pid  
  27. -rw-r--r-- 1 root root 5 10月 12 15:16 hadoop-root-zkfc.pid  
  28. drwxr-xr-x 2 root root 80 10月 12 15:16 hsperfdata_root  

改变pid路径就能解决这个问题,

在这个文件hadoop-daemon.sh开始加上以下变量,或者,加入环境变量,都可以解决这个问题

  1. HADOOP_PID_DIR=$HADOOP_HOME/  

 



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/hadoop/2191.html