我有一个定期挂起的 Spark 作业,使我的 AWS EMR 集群处于应用程序正在运行但集群实际上卡住的状态。 我知道,如果我的工作没有卡住,它将在 5 小时或更短的时间内完成。 如果之后它仍在运行,则表明作业已卡住。 Yarn 和 Spark UI 仍然是响应式的,只是执行器卡在任务上。
背景:我正在使用一个临时的 EMR 集群,它在终止前只执行一个步骤,所以如果我注意到此作业挂起,将其终止不是问题。
在这种情况下,终止任务、作业或群集的最简单方法是什么? 理想情况下,这不涉及设置一些额外的服务来监控作业——理想情况下,我会使用某种火花/纱线/emr 设置。
注意:我尝试使用火花推测来解锁卡住的火花作业,但这无济于事。
EMR 具有引导操作功能,您可以在其中运行在初始化集群时启动的脚本。我将此功能与启动脚本一起使用,该脚本监视群集联机的时间并在一定时间后自行终止。
我使用基于此脚本的脚本进行引导操作。 https://github.com/thomhopmans/themarketingtechnologist/blob/master/6_deploy_spark_cluster_on_aws/files/terminate_idle_cluster.sh
基本上,制作一个脚本来检查/proc/uptime 以查看 EC2 机器已联机多长时间,并且在正常运行时间超过您的时间限制后,您可以向集群发送关闭命令。