如何让Spark完成后自动重启作业?

How to make Spark restart the job automatically after finishing?

我正在构建一个 lambda 架构并且需要 Spark 作为它的批处理部分以定期或在完成后立即重新启动,或者让 Spark Streaming 作业调用重新启动。我看过一些东西,但我可能不了解 Spark 上下文,但我不确定是否可以将 Spark 上下文放在一个循环中。谁能提供任何快速指导?另一个快速的问题是,考虑到将有数据不断添加到 HBase 中,Spark 将从中读取数据,缓存是否有任何用处?在此先感谢您的帮助。

编辑:如果我实现一个 SparkListener 并在作业结束时调用 collect,是否会重做所有计算?

当您调用 awaitTermination() 时,StreamingContext 不会退出并继续 运行。您需要从另一个线程调用 stop() 来停止流上下文。

 JavaDStream<T> jsonStrem = streamingContext.receiverStream(receiver);              
 streamingContext.start();
 streamingContext.awaitTermination();

receiver 将按批次间隔调用

似乎比我想象的要容易。我怀疑 while 循环不会在 RDD 函数之外工作,因为 Spark 会进行延迟执行。我错了。这个例子暗示这是可能的:https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/JavaPageRank.java