你可以通过运行来启动一个节点管理器实例yarn-daemon.sh start nodemanager
。如果你按照这个方法创建一个 upstart 任务,那么会遇到两个问题:
- 该
yarn-daemon.sh
脚本将不断执行,因为 respawn 会检查进程是否死亡,并且 yarn-daemon.sh 脚本在启动 yarn 后就会死亡。 service nodemanager stop
命令不执行任何操作,因为 upstart 认为该进程已经停止。
如何创建在崩溃后重新启动 yarn(或另一个 Hadoop 守护进程)的 upstart 服务?
答案1
以下代码显示了 upstart 服务配置文件/etc/init/nodemanager.conf
。您将yarn-daemon.sh start nodemanager
脚本作为启动前钩子和yarn-daemon.sh stop nodemanager
停止后钩子执行。这将启动实际的节点管理器实例。
脚本检查 nodemanager 是否已启动。如果 nodemanager 已关闭,则脚本退出。这向 upstart 发出信号,表示服务已关闭,必须重新启动。
description "nodemanager"
start on startup
stop on shutdown
setuid hduser
respawn
# actually start nodemanager
pre-start exec opt/hadoop/current/sbin/yarn-daemon.sh start nodemanager
#
# upstart executes this script. If this script exits, upstart respawns the service
# cannot just excecute *-daemon.sh here, because the actual daemon script excecutes after start
# and upstart thinks service is stopped so respawns *-daemon.sh constantly.
#
script
while jps | grep -q NodeManager; do
sleep 5
done
end script
post-stop exec /opt/hadoop/current/sbin/yarn-daemon.sh stop nodemanager