bin/stop-all.sh无法停止服务

来源:互联网 发布:程序员自学入门书籍 编辑:程序博客网 时间:2024/06/06 01:28

       今天在Cygwin上运行hadoop的时候发现一个问题,当hadoop集群运行一段时间以后,输入bin/stop-all.sh无法停止服务,在windows的任务管理器中还是能够看到那几个java进程。有时候会提示找不到进程ID,但大多时候不会提示。如下图:

 

出现错误

 

      在网上搜索了一圈,得知了问题所在:stop-all.sh会调用stop-mapred.sh和 stop-dfs.sh去停止jobtracker, tasktrackers; namenode, datanodes。Jobtracker和namenode的停止是在本地通过调用hadoop-daemon完成的,而tasktracker,和datanode 的停止是通过调用hadoop-daemons来完成的。Hadoop-daemon实质上是ssh到每一个slave去执行一个当地的hadoop- daemon命令,比如:hadoop-daemon stop datanoade。Hadoop-daemon stop command会通过kill -0 `cat command.pid` 来测试进程是否存在,如果这个测试中有错误产生,就会报”no command to stop ”。

     可能原因: pid 文件丢了,导致 hadoop-daemon.sh stop XXX 时找不到进程号。 
     解决办法:默认 pid 文件放在 /tmp 目录下,不太安全。可以在 conf/hadoop-env.sh 里设置 HADOOP_PID_DIR 环境变量改变 pid 文件的存放目录。 
     所以配置的时候最好添加一个固定的目录存储hadoop的PID。

原创粉丝点击