hadoop 关闭时报 no namenode/nodemanager/XXXX to stop

今天遇到了一个问题 就是在自己的服务器上面想要关闭 hadoop,结果出现 no namenode to stop 找不到什么原因,然后在网上找到了答案

首先说明一下,我这个hadoop 运行了快一个多月了,没有在中间停止过.

然后我们以yarn 为例,我们查找一下yarn-daemon.sh 如果没有做任何改动的话,翻到最后你就可以看到

  (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 $YARN_STOP_TIMEOUT
        if kill -0 $TARGET_PID > /dev/null 2>&1; then
          echo "$command did not stop gracefully after $YARN_STOP_TIMEOUT seconds: killing with kill -9"
          kill -9 $TARGET_PID
        fi
      else
        echo no $command to stop
      fi
    else
      echo no $command to stop
    fi
    ;;

  (*)
    echo $usage
    exit 1
    ;;

esac

根据上面代码。在关闭hadoop的进程的时候,会首先TARGET_PID=`cat $pid`,后面的操作都 
针对这个TARGET_PID。 
首先发送kill -0 TARGET_PID来检测这个pid存在不存在,若存在那么就使用kill  TARGET_PID 来关闭进程。 
第二个 kill -0 $TARGET_PID,意思是第一次删除失败的时候,则执行kill -9 $TARGET_PID。 
在默认情况下,hadoop会使用/tmp目录作为临时文件存放地点,包括pid的文件


我们在这里可以看到 $pid  这个东西,他是默认存在我们linux  /tmp 这个目录中

hadoop 关闭时报 no namenode/nodemanager/XXXX to stop_第1张图片

在 /tmp 目录下我们可以看到很多的pid 文件 

由于 /tmp 文件夹 有一个机制,就是为了保证tmp目录不爆满,系统默认情况下每日会处理一次tmp目录文件,原理就是使用了tmpwatch。在系统最小安装情况下,这个功能是没有安装的。

tmpwatch工具从指定的目录中递归地搜索并删除指定的目录中一段时间未访问的文件,tmp目录会删除240小时未访问过的文件。会将pid清除,pid不存在的时候,就会报no *** to stop 



我手动删除了 datanode的在/tmp 文件夹下面的pit  然后在结束他的时候就会报这种错误 


如果想要删除程序的时候请 使用kill  而不是 kill -9 

 借鉴 http://yangyoupeng-cn-fujitsu-com.iteye.com/blog/1976816



你可能感兴趣的:(Hadoop)