gpt4 book ai didi

scala - 如何优雅地终止 Spark 应用程序

转载 作者:行者123 更新时间:2023-12-02 02:55:24 25 4
gpt4 key购买 nike

我有一个进程(在scala中)在spark集群中运行,它处理一些数据,上传结果并更新处理状态。我希望上传和处理状态更新是原子操作,因为状态对于恢复作业并避免重复处理至关重要。每当我们想要更新 jar 时,就需要定期终止正在运行的作业并启动一个新作业。在终止作业时,我想处理原子操作并在上传之前优雅退出或等到上传和处理状态更新完成。如何才能达到同样的效果呢?如果我们使用 yarn API 来终止应用程序,它可能会突然从不一致的状态退出。解决这个问题的最佳方法是什么?

最佳答案

您可以在 Spark 配置中启用正常关闭

sparkConf.set(“spark.streaming.stopGracefullyOnShutdown","true") 

当您的作业在 YARN 上运行时,您现在需要向应用程序发送 SIGTERM。这通常通过 yarn application -kill <appID> 完成。此命令确实会向您的驱动程序发送一个 SIGTERM,但它也几乎立即 - “yarn.nodemanager.sleep-delay-before-sigkill.ms”(默认 250) - 之后发送一个 SIGKILL。

因此,您宁愿确保只发送 SIGTERM,例如通过调用:

ps -ef | grep spark | grep <DriverProgramName> | awk '{print $2}' | xargs kill -SIGTERM

此答案基于博客 12这将为您提供更多详细信息。

在其中一篇文章中,还描述了如何通过标记文件正常关闭应用程序。

关于scala - 如何优雅地终止 Spark 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com