问题解释
出现这个问题的最常见原因是hadoop
在stop
的时候依据的是datanode
上的mapred
和dfs
进程号。
而默认的进程号保存在/tmp
下,linux
默认会每隔一段时间(一般是一个月或者7天左右)去删除这个目录下的文件。
因此删掉hadoop-hadoop-jobtracker.pid
和hadoop-hadoop-namenode.pid
两个文件后,namenode
自然就找不到datanode
上的这两个进程了。
另外还有两个原因可能引起这个问题:
1:环境变量 $HADOOP_PID_DIR
在你启动hadoop
后改变了
2:用另外的用户身份执行stop-all
解决方法
永久解决方法,修改
$HADOOP_HOME/conf/hadoop-env.sh
里边,去掉export HADOOP_PID_DIR=/var/hadoop/pids
的#号,创建/var/hadoop/pids
或者你自己指定目录这个时候通过脚本已经无法停止进程了,不过我们可以手工停止,方法是到
master
和各datanode
执行ps -ef | grep java | grep hadoop
找到进程号强制杀掉,然后在master
执行start-all
脚本重新启动,就能正常启动和关闭了。