对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