今天迁移机器的时候,需要手动关闭所有的机器。那么关机之前当然是要先安全的关闭hadoop的相关服务,但是由于这个集群不是我搭建的,发现有些机器在关闭集群的时候出现no xxx to stop,就我发现的来说有namenode,journalnode,jobtracker这三个。

问题的原因

Hadoop在stop的时候依据的是启动是保存到pid文件的pid.而默认的进程号保存在/tmp下,Linux 默认会每隔一段时间(一般是一个月或者7天左右)去删除这个目录下的文件。因此删掉pid文件后,namenode自然就找不到datanode上的这个进程了。(不同的进程的进程id文件名会有变化)

解决办法

临时解决

针对这次集群关闭,我们需要做的是:首先保证集群没有负载,然后去手动杀死datanode/journalnode/zkfc最后去杀死namenode(注意顺序)

永久解决

在配置文件hadoop_env.sh中配置export HADOOP_PID_DIR可以解决这个问题。