如何创建重生的 Hadoop Upstart 作业?

如何创建重生的 Hadoop Upstart 作业?

你可以通过运行来启动一个节点管理器实例yarn-daemon.sh start nodemanager。如果你按照这个方法创建一个 upstart 任务,那么会遇到两个问题:

  1. yarn-daemon.sh脚本将不断执行,因为 respawn 会检查进程是否死亡,并且 yarn-daemon.sh 脚本在启动 yarn 后就会死亡。
  2. 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

相关内容