在spark streaming中,我们接收的DStreams是一批RDDs。那么窗口如何进一步提供帮助呢?
据我所知,它还批处理RDDs。
如果我错了,请纠正我( Spark Streaming的新手)。
发布于 2015-10-08 16:14:26
一个批次中的记录数量由批次间隔决定。窗口将使批次的数量保持在窗口的大小之内,这就是为什么窗口大小必须是批处理间隔的倍数。然后,您的操作将在多个批次上运行,并且对于每个新批次,窗口将向前移动,丢弃较旧的批次。
重点是,在流中,属于一起的数据不一定同时到达,特别是在较低的批处理间隔。使用windows,你本质上是在回顾过去。
但请注意,您的作业仍然以指定的批处理间隔运行,因此它将以与以前相同的速度生成输出,但同时查看更多数据。您还将多次查看相同的数据!
Michael Noll的一篇很好的博客文章更详细地解释了这一点:http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/。
更新:
您可以增加批处理间隔,但作业的处理速度也会变慢,即每10秒创建一次输出,而不是每2秒创建一次输出。您还可以在计算的某一部分设置一个窗口,而批处理间隔会影响所有内容。例如,请查看reduceByKeyAndWindow。
发布于 2016-03-01 12:08:37
批处理间隔:
·流式计算->连续系列批处理计算->作用于小批量数据
·Spark Steaming ->从多个来源接收数据->将其分组为小批次->定期创建新批次
·每个时间间隔的开始,创建->新批次,并将在该时间间隔内到达的任何数据添加到该批次中。
·每个输入批次形成一个RDD
窗口持续时间:合并来自多个批次的结果
滑动持续时间:控制新DStream计算结果的频率
示例1:批处理间隔= 10秒的源DStream希望创建最后30秒(或最后3批)的滑动窗口->窗口持续时间为30秒
滑动持续时间(默认为批处理间隔)控制新DStream计算结果的频率。
示例2:如果我们有一个批处理间隔为10秒的源DStream,并且希望每隔一次批处理才计算一次窗口,我们将把滑动间隔设置为20秒
发布于 2015-12-11 05:31:24
因此,该窗口允许您根据(在我的经验中)为窗口指定的毫秒数和增量从流中采样数据。
到目前为止,我的工作一直在消耗Kafka主题,所以我设置了如下窗口:
LOG.info(metricTagType+"::Grouping by Key & Window:["+windowDuration+"] Increment:["+windowIncrement+"]...defn.");
Duration winDuration = new Duration(windowDuration);
Duration incrementDuration = new Duration(windowIncrement);
JavaPairDStream<String, Iterable<String>> grpedJpd = jpd.groupByKeyAndWindow(winDuration, incrementDuration);我通过反复试验发现,如果不使用上面的方法,窗口将无法正常工作;如果执行单独的groupBy,则窗口不会给出预期的结果。
最后一件事,在获取上下文时,窗口增量必须是以下内容中持续时间的倍数,否则spark会抛出异常:
JavaStreamingContext ssc = new JavaStreamingContext(sparkConf,
Durations.seconds(duration));https://stackoverflow.com/questions/33009935
复制相似问题