Spark 具有 Transformation-Reduction 架构,Storm 具有 DAG 架构。这不是开发由 Storm on Spark 运行的常规程序的好主意。使用 spark 时,您必须思考不同。
默认情况下,Spark 将元组发送到处理器(映射器),例如 fieldsGrouping 或 Partial 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->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。