SPARK 2.1.1:使用滑动窗口

时间:2017-06-30 10:44:18

标签: apache-spark cluster-computing spark-streaming

我正在使用持续时间为X秒的滑动窗口在Apache Spark 2.1.1中开发流应用程序。然后滑动Y秒(我已尝试过X和Y的不同值)。我正在使用.createDirectStream阅读来自kafka(27个分区)的消息。我的群集配置是,

  • 总执行人核心= 135

  • 节点= 3

  • 核心每执行者= 5

  • 执行者记忆= 10G

当我尝试以窗口持续时间X = 5秒执行作业时。并滑动Y = 1秒。没有排队的活动批次。根据我的逻辑,这是因为(总核心数= 135)和(创建任务的数量= #kafka partitions * windowed batch = 27 * 5 = 135)。

现在在窗口持续时间X = 120秒的其他情况下。并且滑动y = 1秒,(创建的任务的数量= 27 * 120 = 3240),这远远超过可用核心(135)。因此 观察到巨大的队列,并且在调度中需要大量的时间。

我的解释是否正确?如果是,那么它的补救措施是什么呢?

1 个答案:

答案 0 :(得分:1)

虽然很难在没有查看群集的情况下100%确定,但您的解释似乎是正确的。任务调度开销可能会在低延迟应用程序中造成损失。

解决此问题的一种可能方法是使用基于窗口的缩减,例如reduceByKeyAndWindow,特别是,如果您的用例允许,则使用可逆函数的重载:reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks])

另请注意,可以使用此调用强制减少分区数量:https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/dstream/PairDStreamFunctions.scala#L303