kafka-spark流联合流并行化

xt0899hw  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(294)

这可能是一个基本的问题,但我有一些困难理解这一点。
我目前正在spark/scala应用程序中使用类似于kafka的microsoft azure事件中心流。
如果我创建了一个unionized流,我相信这将合并多个dstream对象,这些对象被抽象为一个dstream,流中的多个rdd将被并行处理,还是每个rdd将被单独处理?
为了进一步解释这一点,这里有一个简单的例子:

sparkConf.set(SparkArgumentKeys.MaxCores, (partitionCount * 2).toString)

val ssc = new StreamingContext(sparkConf, streamDuration)

val stream = EventHubsUtils.createUnionStream(ssc, hubParams, storageLevel)
stream.checkpoint(streamDuration)

val strings = stream.map(f => new String(f))
strings.foreachRDD(rdd => {
  rdd.map(f => f.split(' '))
})

partitioncount是azure事件中心中的分区数。
初始的“stream.map”是否在每个rdd上并行执行?
“string.foreachrdd”是一次处理一个rdd,还是以某种并行方式处理所有rdd?

twh00eeo

twh00eeo1#

每批之后 streamDuration ,spark将收集这个时间窗口中接收到的所有数据到一个rdd,然后Map这个rdd(同样:它是一个rdd,但是Map是并行完成的,就像批处理作业中的Map一样)。
最后一步,对于每个rdd,从 foreachRDD 将被执行。对于每个rdd,意味着它将在每个微批(时间窗口)的rdd上执行。
当然在下一次之后 streamDuration 时间,数据将被再次收集,rdd将被创建(数据仅来自上一次收集和当前收集之间的时间),Map,功能将被赋予foreachrdd
总结:foreachrdd并不意味着一次执行多个rdd,而是意味着每个微批处理中的函数都将应用于这个微批处理

相关问题