我正在构建一个lambda体系结构,需要Spark作为它的批处理部分,要么定期重新启动,要么在完成后立即重新启动,或者让Spark Streaming作业调用重启。我看过事情,我可能不理解Spark上下文,但我不确定是否可以将Spark上下文放在循环中。有人可以提供任何快速指导吗?另一个快速问题是,考虑到数据将不断添加到HBase中,Spark将从中读取数据,是否有任何缓存用途?在此先感谢您的帮助。
编辑:如果我实现SparkListener并且在作业结束调用收集时,是否会重做所有计算?
答案 0 :(得分:0)
当你致电awaitTermination()
时,StreamingContext将不会退出并继续运行。您需要从另一个线程调用stop()
来停止流式传输。
JavaDStream<T> jsonStrem = streamingContext.receiverStream(receiver);
streamingContext.start();
streamingContext.awaitTermination();
receiver
将按批次间隔调用
答案 1 :(得分:0)
似乎比我想象的要容易。我怀疑while循环在RDD函数之外不起作用,因为Spark的延迟执行。我错了。此示例在此暗示可能:https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/JavaPageRank.java