运行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命令始终有效?
由于
答案 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的文件夹。