一段时间后停止 Spark Streaming 作业

Posted

技术标签:

【中文标题】一段时间后停止 Spark Streaming 作业【英文标题】:Stopping the Spark Streaming job after some time 【发布时间】:2017-07-03 06:51:48 【问题描述】:

是否有某种方法可以在一段时间后终止火花流作业,这样驱动程序就不会丢失,其余 API 显示作业已完成。

【问题讨论】:

如果需要停止,可能不适合 Spark Streaming 我知道这不是一个好习惯,但我需要内存使用指标,而 Dr Elephant 需要一份完整的工作 【参考方案1】:

awaitTerminationOrTimeout(timeout: Long) 中的超时功能以及您选择的timeout 值将在超时到期后恢复您的主程序的执行。

之后我们需要有一些其他的等待函数来保持 spark 上下文处于活动状态以供检查。

类似:

// create streaming context
// do dstream stuff
streamingContext.awaitTerminationOrTimeout(streamingTimeout)
streamingContext.stop(stopSparkContext = false)
Thread.sleep(afterStreamingTimeout) // keep alive for some time.
// the end

作为替代方案,您可以使用笔记本等交互式环境进行此类实验。在那里,您可以通过发出streamingContext.stop(stopSparkContext = false) 手动停止上下文,只要笔记本处于活动状态,spark 上下文将仍然存在。 (这是我用来做原型的)

【讨论】:

@JSR29 PS:交互式探索示例:youtube.com/watch?v=q3TjGjffs3g&t=99s(不是流式传输,但概念类似) @JSR29 这可能是使用 Spark Streaming 进行交互式探索的更好示例:youtu.be/qxsOjJnwcKQ?t=526

以上是关于一段时间后停止 Spark Streaming 作业的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我发送两个输入流时 Spark Streaming 停止工作?

详解Spark Streaming的Graceful Shutdown

详解Spark Streaming的Graceful Shutdown

spark版本定制十八:Spark Streaming中空RDD处理及流处理程序优雅的停止

如何优雅地终止正在运行的Spark Streaming程序

Spark Streaming中空RDD处理及流处理程序优雅的停止