如何使用类似于storm的spark streaming创建多级管道?

mdfafbf1  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(484)

我正在考虑如何使用类似于storm的spark流创建一个多阶段(基于图形的拓扑)流应用程序。
在Storm中,我们有喷口,螺栓的概念,我们可以把这些概念链起来形成一个图表,不同种类的螺栓链在一起执行不同的任务。螺栓/喷口可以独立执行其工作,并将结果传递到下游。
如何使用spark streaming实现类似的功能?我是说在spark里基本上是rdd转化。如何实现类似的功能,使不同的处理组件独立地执行它们的任务(类似于工作流)
在spark,我可以这样做
map(一些map函数)、map(一些其他的map函数)等将任务链接在一起。但在这里,驱动程序被阻塞,直到整个处理完成,然后才能开始处理第二批数据集。我希望它像一个工作流。有可能在Spark里吗?

juud5qan

juud5qan1#

spark具有变换缩减架构,storm具有dag架构。这不是一个好主意,以开发传统的程序运行风暴的Spark。当你和spark一起工作的时候,你一定会有不同的想法。
默认情况下,spark将元组发送到处理器(Map器),比如fieldsgrouping或由键展开的部分键分组。
不过,您可以在spark上模拟一些风暴操作。例如 Spout -> BoltA -> BoltB 全部 fieldsGrouping 你可以做:

//streamEvents  is equal to Spout
JavaPairInputDStream<String, String> streamEvents = KafkaUtils.createDirectStream(...);

JavaPairDStream<String, Object> newKeys1 = streamEvents.flatMapToPair(x->BoltA);
JavaPairDStream<String, Object> newKeys2 = newKeys1.flatMapToPair(x->BOltB);

如果你愿意的话 Spout->BoltA , Spout->BoltB 你可以做:

//streamEvents  is equal to Spout
JavaPairInputDStream<String, String> streamEvents = KafkaUtils.createDirectStream(...);

JavaPairDStream<String, Object> newKeys1 = streamEvents.flatMapToPair(x->BoltA);
JavaPairDStream<String, Object> newKeys2 = streamEvents.flatMapToPair(x->BOltB);

对于全局分组,必须设置键值对,并且该键在所有输入中必须相等。
我不建议使用spark而不是storm。在某些特殊情况下,尝试使用spark或storm。

相关问题