我试图弄清楚提交给它的所有步骤都为'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED'
后如何成功终止EMR群集。有三个Lambda函数。
'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED'
时应发送终止请求。我已经完成Lambda 3的步骤提交,但无法完成其余的操作。
我已经通过以下方式成功创建了EMR:
conn = boto3.client("emr")
cluster_id = conn.run_job_flow()
提交的步骤:
conn = boto3.client("emr")
action = conn.add_job_flow_steps(JobFlowId=cluster_id, Steps=event["steps"])
现在如何仅在给定条件下触发此终止?我看到了具有boto3 API doc的client.terminate_job_flows()
,但是此功能不会等待步骤完成或失败,而是直接触发终止过程。
当我完成所有步骤后,是否可以将KeepJobFlowAliveWhenNoSteps
从TRUE
更改为FALSE
?然后,我认为它应该自动关闭群集。但是通过API文档,一旦调用run_job_flow()
,就找不到任何更改此参数的选项。
希望我能够传达我正确面对的问题。有帮助吗?
注意:在AWS Lambda中使用Python 3.8。每个步骤都是Spark作业。
我同意你的研究。最佳情况是将KeepJobFlowAliveWhenNoSteps
设置为FALSE
,以使群集自行终止。
我确实注意到RunJobFlow文档说:
如果
KeepJobFlowAliveWhenNoSteps
参数设置为TRUE
,则集群将转换为WAITING
状态,而不是在完成步骤后关闭。
因此,Lambda函数可以检查群集是否处于WAITING
状态,如果是,则关闭群集。但是,这将需要反复检查。
可能可能提交最后的步骤,该步骤调用EMR API以关闭群集。这意味着集群有效地要求其终止,这是最后一步。 (我没有尝试过这个概念,但是这是执行关机的一种干净方法,而不必反复检查状态。)
关于此问题[How to terminate AWS EMR Cluster automatically after some time,也有关于关闭空闲集群的类似讨论