【问题标题】:How to terminate an EMR Cluster from Lambda when all Steps are COMPLETE?当所有步骤都完成时,如何从 Lambda 终止 EMR 集群?
【发布时间】:2020-09-16 05:16:38
【问题描述】:

我试图弄清楚如何在提交给它的所有步骤都是'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 docclient.terminate_job_flows(),但是这个函数不等待步骤完成或失败,直接命中终止进程。

完成所有步骤后,有没有办法将 KeepJobFlowAliveWhenNoStepsTRUE 更改为 FALSE?然后我认为它应该自动关闭集群。但是通过 API 文档,一旦调用 run_job_flow(),就没有找到任何更改此参数的选项。

希望我能够正确传达我面临的问题。有什么帮助吗?

注意:在 AWS Lambda 中使用 Python 3.8。每个步骤都是 Spark 作业。

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda amazon-emr aws-step-functions


    【解决方案1】:

    我同意你的研究。最佳情况是将KeepJobFlowAliveWhenNoSteps 设置为FALSE 以使集群自行终止。

    我确实注意到RunJobFlow 文档说:

    如果KeepJobFlowAliveWhenNoSteps 参数设置为TRUE,集群将转换为WAITING 状态,而不是在步骤完成后关闭。

    因此,Lambda 函数可以检查集群是否处于WAITING 状态,如果是,则关闭集群。但是,这需要反复检查。

    可能可以提交调用 EMR API 以关闭集群的最后一步。这意味着集群实际上正在调用自己的终止作为最后一步。 (我没有尝试过这个概念,但它会是一种干净的方式来执行关机,而无需反复检查状态。)

    在这个问题上也有类似的关于关闭空闲集群的讨论:How to terminate AWS EMR Cluster automatically after some time

    【讨论】:

    • 嗨 @John,一年多来,您一直是我的 AWS 救星,谢谢。我正在考虑您最后第二段的类似行,这将提交最后一步以自行终止 EMR,但没有运气找到一组相同的步骤参数/参数。还检查了您的其他答案,但 isIdle Boolean 似乎已被弃用。请让我知道是否有办法解决这个问题。
    • Monitor Metrics with CloudWatch - Amazon EMR 多次引用isIdle 指标。我看不到任何迹象表明它已被弃用。
    • 这是另一个偷偷摸摸的想法...我注意到在调用add_job_flow_steps() 时,有一个参数'ActionOnFailure': 'TERMINATE_JOB_FLOW'|'TERMINATE_CLUSTER'。我想知道您是否可以添加一个故意错误的步骤,然后在失败时告诉TERMINATE_CLUSTER
    • 哇,这主意真棒。无论如何,我已经构建了一个按预期运行的解决方案。应在此处发布带有代码的答案。
    猜你喜欢
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多