【问题标题】:How can I create a multi stage pipeline using spark streaming similar to storm?如何使用类似于 Storm 的火花流创建多级管道?
【发布时间】:2020-08-09 20:39:06
【问题描述】:

我正在考虑如何使用类似于 Storm 的 Spark Streaming 创建多阶段(基于图形的拓扑)流应用程序。

在 Storm 中,我们有 spouts、bolts 的概念,我们可以将这些概念链接起来形成一个图形,将不同种类的 bolts 链接在一起以执行不同的任务。螺栓/喷口可以独立执行其工作,并将结果传递到下游。

如何使用火花流实现类似的功能?我的意思是在火花中它基本上是 RDD 转换。我怎样才能实现类似的东西,以便我有不同的处理组件独立执行它们的任务(类似于工作流)

在 spark 中,我可以做这样的事情

rdd.map(some map function).map(some other map function) 等等将任务链接在一起。但是这里的驱动程序是阻塞的,直到整个处理完成后才能开始处理第二批数据集。我希望它类似于工作流程。 spark可以吗?

【问题讨论】:

    标签: apache-spark spark-streaming apache-storm


    【解决方案1】:

    Spark 具有 Transformation-Reduction 架构,Storm 具有 DAG 架构。这不是开发由 Storm on Spark 运行的常规程序的好主意。使用 spark 时,您必须思考不同

    默认情况下,Spark 将元组发送到处理器(映射器),例如 fieldsGroupingPartial Key grouping,它们由键展开。

    但是,您可以在 Spark 上模拟一些 Storm 操作。例如Spout -> BoltA -> BoltB all with 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-&gt;BoltA , Spout-&gt;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。

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 1970-01-01
      • 2015-12-08
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2010-11-24
      相关资源
      最近更新 更多