当所有步骤都完成时,如何从 Lambda 终止 EMR 集群?
How to terminate an EMR Cluster from Lambda when all Steps are COMPLETE?
我想弄清楚一旦提交给它的所有步骤都是 'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED'
,我如何才能成功终止 EMR 集群。共有三个 Lambda 函数。
- Lambda 1:做一些工作并创建 EMR。通过事件传递步骤和集群 ID 来触发 Lambda 2。
- Lambda 2:将从 Lambda 1 收到的步骤提交到从 Lambda 1 收到的集群 ID。
- Lambda 3:提交最后一步,然后应在所有步骤
'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 文档说:
If the KeepJobFlowAliveWhenNoSteps
parameter is set to TRUE
, the cluster transitions to the WAITING
state rather than shutting down after the steps have completed.
因此,Lambda 函数可以检查集群是否处于 WAITING
状态,如果是,则关闭集群。但是,这需要反复检查。
可能 提交调用 EMR API 关闭集群的最后一步。这意味着集群正在有效地调用自己的终止作为最后一步。 (我还没有尝试过这个概念,但这将是一种无需重复检查状态即可执行关机的干净方式。)
在这个问题上也有类似的关于关闭空闲集群的讨论:
我想弄清楚一旦提交给它的所有步骤都是 'COMPLETED'|'CANCELLED'|'FAILED'|'INTERRUPTED'
,我如何才能成功终止 EMR 集群。共有三个 Lambda 函数。
- Lambda 1:做一些工作并创建 EMR。通过事件传递步骤和集群 ID 来触发 Lambda 2。
- Lambda 2:将从 Lambda 1 收到的步骤提交到从 Lambda 1 收到的集群 ID。
- Lambda 3:提交最后一步,然后应在所有步骤
'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 文档说:
If the
KeepJobFlowAliveWhenNoSteps
parameter is set toTRUE
, the cluster transitions to theWAITING
state rather than shutting down after the steps have completed.
因此,Lambda 函数可以检查集群是否处于 WAITING
状态,如果是,则关闭集群。但是,这需要反复检查。
可能 提交调用 EMR API 关闭集群的最后一步。这意味着集群正在有效地调用自己的终止作为最后一步。 (我还没有尝试过这个概念,但这将是一种无需重复检查状态即可执行关机的干净方式。)
在这个问题上也有类似的关于关闭空闲集群的讨论: