使用 Step Functions 自动终止 EMR 集群

Auto Terminate EMR Cluster using Step Functions

我有一个用例,我会向集群提交动态数量的作业,因此选择通过 SDK 从 lambda 提交作业,而不是将提交作业添加为步骤函数中的任务。 EMR 集群将每周使用一次,因此希望选择 onDemand 变体。

从 Step Functions 创建集群时,似乎不支持“auto-terminate”参数。根据文档,The field Instances.KeepJobFlowAliveWhenNoSteps is mandatory, and must have the Boolean value TRUE.

是否有其他方法可以在所有作业完成后终止集群?

您有几个选项可以终止集群,但这取决于您的场景。

  1. 由于您使用的是Lambda,您可以定期检查集群的状态,如果是WAITING,您可以使用ID终止集群。您还可以使用 AWS Lambda 函数创建一个 CloudWatch 事件来检查 EMR 集群是否空闲。你可以找到 here and the code implementation by the same user here

  2. 一个非常幼稚和愚蠢但可以工作的事情是故意提交失败的步骤作为最后一步并在选项键 ActionOnFailure 上使用 'TERMINATE_CLUSTER' 提交时使用 add_job_flow_steps()

更新您的问题:

would there be potential race condition where in EMR cluster could terminate after its started and before jobs got submitted?

集群启动和作业 submission/first 作业 运行 之间的等待时间不一样,您可以有一个逻辑来决定 maximum idle time threshold 用于 cloudwatch