Hadoop守护进程无法使用正确的命令

时间:2016-01-07 18:14:16

标签: linux hadoop

运行Hadoop系统会运行一些守护程序作业,如namenode,journalnode等。我将使用namenode作为示例。

当我们启动namenode时,我们可以使用命令:hadoop-daemon.sh start namenode

当我们停止namenode时,我们可以使用命令:hadoop-daemon.sh stop namenode。

但问题是,如果我昨天或几个小时前刚启动namenode,stop命令就可以了。但如果namenode已经工作了1个月。当我使用stop命令时,它将显示:

没有要停止的名字节点。

但是我可以看到使用命令JPS运行守护进程NameNode。然后我必须使用kill命令来终止进程。

为什么会这样?有什么方法可以确保stop命令始终有效?

由于

1 个答案:

答案 0 :(得分:1)

hadoop-daemon.sh在一段时间后无效的原因是因为在hadoop-env.sh中有一些参数叫做: 导出HADOOP_PID_DIR 导出HADOOP_SECURE_DN_PID_DIR 其中存储了那些守护进程的pid号。该目录的默认位置是/ tmp。问题是/ tmp文件夹会在一段时间后自动清理(Red Hat Linux)。在这种情况下,pid文件被删除,所以 当我们运行守护进程命令时,该命令无法找到存储在该文件中的进程ID。 与yarn-daemon.sh命令相同。

修改hadoop-env.sh: HADOOP_PID_DIR HADOOP_SECURE_DN_PID_DIR yarn-env.sh: YARN_PID_DIR mapred-env.sh: HADOOP_MAPRED_PID_DIR 到其他目录而不是使用默认的/ tmp文件夹应该可以解决问题。 修改后,重新启动与之相关的所有进程。 另外,出于安全考虑,其他非管理员用户不应该访问包含pid的文件夹。