在Spark中的多个流中同步(等待/通知)模式

时间:2018-01-11 18:08:57

标签: multithreading spark-streaming

我的应用程序中运行了两个Spark流。在某些时候,我需要看看第一个流是否已经创建了一个表,以便我可以在第二个流中使用该表。 我使用累加器作为指标。因此,第一个流在完成其作业后更新此累加器的值,然后如果累加器值已更改,则第二个流将执行其逻辑

dStream1.foreachRdd(rdd -> {
--creates ABC Sql table --
accumulator1.setValue(1);
});


dStream2.foreachRdd(rdd -> {
if(accumulator.value == 1){
--uses ABC Sql table--
}
});

到目前为止它工作正常,因为dStream2继续运行foreachRdd循环,当它发现累加器值为1时,它执行逻辑。

但我想找出更有效的方法,dStream2会等到累加器的值发生变化。 是否可以在Spark中执行wait-notify模式?

1 个答案:

答案 0 :(得分:0)

如果我们正在运行多个流,那么" foreachRDD"一次执行一个。因此,如果他们共享任何资源或处理共同对象,他们就不会相互冲突。

即使您想使用" spark.streaming.concurrentJobs"要并行运行流或作业,您可以使用" java.util.concurrent.locks"来管理并发性。封装