如何优雅地停止运行Spark Streaming应用程序?

12
如何停止Spark Streaming? 我的Spark Streaming作业一直在运行。我想以优雅的方式停止它。
我看到了以下关闭流应用程序的选项。
sparkConf.set("spark.streaming.stopGracefullyOnShutdown","true") 

Spark配置:可用属性

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


3
创建SparkContext后,无法设置SparkContext的sparkConf。 - Knight71
当你说优雅时,你是什么意思?当你的应用程序停止运行时,是否发生了任何错误? - Amit Kumar
我想手动停止应用程序。有两种情况。当出现错误时,我知道如何在代码中停止它。但是如果我想手动停止,我正在寻找一种机制。 - AKC
这个回答解决了你的问题吗?如何停止Spark Streaming的作业? - Tom Zych
1个回答

18
请查看这篇博客文章。它是我见过的优雅终止流式作业最好的方法。
如何传递关机信号:
现在我们知道如何确保 Spark Streaming 的优雅关闭。但是,如何将关闭信号传递给 Spark Streaming 呢?一个简单的选项是在运行驱动程序的屏幕终端使用 CTRL+C 命令,但显然这不是一个好的选项。 我正在使用的一个解决方案是,grep spark streaming 的 driver 进程并发送 SIGTERM 信号。当 driver 收到此信号时,它启动应用程序的优雅关闭。我们可以编写以下命令,在一些 shell 脚本中运行该脚本以传递关机信号: ps -ef | grep spark | grep | awk '{print $2}' | xargs kill -SIGTERM
例如:ps -ef | grep spark | grep DataPipelineStreamDriver | awk '{print $2}' | xargs kill -SIGTERM

在运行上述命令之前,我需要设置sparkConf.set(“spark.streaming.stopGracefullyOnShutdown","true")吗? - AKC
2
是的,您也需要设置 :) 但请阅读完整的博客文章。 - Glennie Helles Sindholt
明白了。当启用此功能时,如果发生异常,如何在我的代码中优雅地关闭? - AKC
博客文章中提到 - 我们只需要设置这个参数,然后调用 ssc.start() 和 ssc.awaitTermination() 方法即可。不需要调用 ssc.stop 方法。否则在关闭期间应用程序可能会挂起。 - AKC
如果我不能在代码中使用stop方法,那么在异常情况下如何优雅地停止它呢? - AKC
1
我尝试了这种方式:ps -ef | grep spark | grep driver-20161101205113-0016 | awk '{print $2}' | xargs kill -SIGTERM,并且参数是true。当我在Linux终端上运行此命令时,我收到以下信息。usage: kill [ -s signal | -p ] [ -a ] pid ... kill -l [ signal ] - AKC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接