今天遇到了一个问题 就是在自己的服务器上面想要关闭 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的文件
在 /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