【问题标题】:How to stop an AWS Glue job gracefully?如何优雅地停止 AWS Glue 作业?
【发布时间】:2023-03-08 13:00:01
【问题描述】:

我正在使用 Glue v3.0 (Python 3.7)。

目标是优雅地停止 Glue PySpark 作业,以便它可以正确终止并在结束前清理其自定义资源。

我尝试使用经典的 signal.signal() 方法及其处理程序来捕获停止/中止/终止信号。

但是,它似乎不适用于python signal's documentation 中指定的信号(处理程序永远不会被调用)。

知道如何优雅地停止工作,使用或不使用信号方法吗?

【问题讨论】:

    标签: python amazon-web-services signals aws-glue graceful-shutdown


    【解决方案1】:

    您可以拨打sys.exit(any_status_code)。 只需确保在 job.commit() 之前调用了 sys.exit,否则作业将失败。

    只是出于好奇,您为什么要自己终止工作? 在您致电job.commit() 之后,无论如何工作都应该结束。


    编辑:

    调用它应该可以工作:

    job.commit()
    os._exit()
    

    【讨论】:

    • 您好,请您详细说明一下,因为我不明白为什么要使用 sys.exit 和 job.commit(我现在没有)。为了回答你的问题,我需要这样的场景:当我点击“停止”胶水作业时,我不希望它在它仍在处理时立即退出。相反,我希望这项工作完成它正在做的事情并留下一个干净的环境(没有 tmp 文件等......)。更广泛地说,这个粘合作业将在 AWS Step 函数中用于并行运行它的多个实例,因此当运行出错时可以从 step-functions 停止作业。
    • 好吧,这不是 Glue 的工作原理。如果你停止一项工作,它就会停止。 Glue 也是完全无服务器的。没有 tmp 文件等。该作业在容器内运行。如果你想使用 Glue 的书签功能,你需要 Job.commit。
    • 感谢您的回答罗伯特,我知道没有 tmp 文件,但我正在做的是(我的胶水工作是处理文件并创建一些 tmp 文件)我认为我不需要Glue 的书签功能,因为我只想让工作正确结束(在我完成我想做的事情之后)。
    • 好的,那么你需要有一些东西来监听 Glue Job 的事件并删除失败状态下的文件。 Glue Job 无法自行删除它们
    • 我明白了...所以我的理解是:没有办法优雅地结束胶水作业(单独运行时,而不是通过步进功能):(
    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2021-06-04
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多