【问题标题】:How to Stop running Spark Streaming application Gracefully?如何优雅地停止运行 Spark Streaming 应用程序?
【发布时间】:2023-03-16 17:15:02
【问题描述】:

如何停止火花流? 我的火花流作业正在连续运行。我想优雅地停下来。

我看到了以下关闭流应用程序的选项。

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

Spark configuration: available properties

但是,如何在正在运行的应用程序上更新此参数?

【问题讨论】:

  • sparkContext创建后无法设置sparkContext的sparkConf。
  • 你说的优雅是什么意思?当你的应用停止时有什么问题吗?
  • 我想手动停止应用程序。有两种情况。我很清楚如何在发生错误时停止它,我在代码中有它。但如果我想手动停止,我正在寻找一种机制。
  • 这能回答你的问题吗? How do I stop a spark streaming job?

标签: apache-spark spark-streaming


【解决方案1】:

看看this blogpost。这是我遇到的优雅终止流媒体作业的“最好”方式。

如何传递关机信号:

现在我们知道如何确保 Spark 流中的正常关闭。但是我们如何将关闭信号传递给火花流。一个天真的选择是在我们运行驱动程序的屏幕终端上使用 CTRL+C 命令,但显然这不是一个好的选择。 我正在使用的一种解决方案是,grep 火花流的驱动程序进程并发送 SIGTERM 信号。当驱动程序收到此信号时,它会启动应用程序的正常关闭。 我们可以在一些shell脚本中编写如下命令并运行脚本以传递关闭信号:

ps -ef | grep 火花 | grep | awk '{打印 $2}' | xargs 杀死 -SIGTERM

例如ps -ef | grep 火花 | grep DataPipelineStreamDriver | awk '{打印 $2}' | xargs 杀死 -SIGTERM

【讨论】:

  • 在运行上述命令之前是否需要设置 sparkConf.set("spark.streaming.stopGracefullyOnShutdown","true")?
  • 是的,您也需要设置 :) 但请阅读完整的博文。
  • 知道了。。启用此功能后,如果发生异常,如何在我的代码中正常关闭。
  • 博文说——我们可以只设置这个参数,然后调用方法 ssc.start() 和 ssc.awaitTermination() 。无需调用 ssc.stop 方法。否则应用程序可能会在关机期间挂起。
  • 我试过这样:ps -ef | grep 火花 | grep 驱动程序-20161101205113-0016 | awk '{打印 $2}' | xargs kill -SIGTERM 并且参数为真。当我在 linux 终端上运行这个命令时,我正在接收。用法:kill [ -s 信号 | -p ] [ -a ] pid ... 杀死 -l [ 信号 ]
猜你喜欢
  • 2016-08-23
  • 2020-04-07
  • 1970-01-01
  • 2020-07-28
  • 2017-02-12
  • 2019-11-10
  • 2011-03-12
  • 1970-01-01
相关资源
最近更新 更多