2016-01-07 116 views
1

运行Hadoop系统将运行一些守护进程作业,如namenode,journalnode等。我将使用namenode作为示例。Hadoop守护进程无法停止使用正确的命令

当我们开始的NameNode我们可以使用命令:hadoop-daemon.sh车站名称节点:当我们停止的NameNode我们可以使用命令hadoop-daemon.sh启动NameNode的

但是问题在于,如果我昨天或几个小时前刚刚启动了namenode,stop命令将正常工作。但是如果namenode一直工作了一个月。当我使用停止命令时,它将显示:

no namenode stop。

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

为什么会发生这种情况?任何方式来确保停止命令可以始终工作?

感谢

回答

1

之所以hadoop-daemon.sh一段时间后不能正常工作是因为在hadoop-env.sh有参数叫做: 出口HADOOP_PID_DIR那些守护进程的 出口HADOOP_SECURE_DN_PID_DIR 其存储PID号。该目录的默认位置是/ tmp。问题是/ tmp文件夹会在某个时候自动清理(Red Hat Linux)。在这种情况下,pid文件被删除,所以当我们运行daemon命令时,该命令无法找到存储在该文件中的进程标识 。 与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的文件夹不能被其他非管理员用户访问。