Apache spark Spark streaming-等待窗口聚合的数据?

Apache spark Spark streaming-等待窗口聚合的数据?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我有格式为{host | metric | value | time stamp}的数据。我们在世界各地都有主机报告指标 我对使用窗口操作(比如1小时)来处理这样的数据有点困惑 我可以告诉我的窗口何时启动,还是在应用程序启动时才启动?例如,我想确保我正在汇总每天11小时的所有数据。如果我的窗口在10:50开始,我只会得到10:50-11:50和错过10分钟 即使窗口是完美的,数据也可能迟到 人们如何处理这类问题?他们是否使窗口比需要的大得多,并且只在每个批处理周期中获取他们关心的数据(有点滑

我有格式为{host | metric | value | time stamp}的数据。我们在世界各地都有主机报告指标

我对使用窗口操作(比如1小时)来处理这样的数据有点困惑

  • 我可以告诉我的窗口何时启动,还是在应用程序启动时才启动?例如,我想确保我正在汇总每天11小时的所有数据。如果我的窗口在10:50开始,我只会得到10:50-11:50和错过10分钟

  • 即使窗口是完美的,数据也可能迟到


人们如何处理这类问题?他们是否使窗口比需要的大得多,并且只在每个批处理周期中获取他们关心的数据(有点滑动)?

过去,我在一个大型物联网平台上工作,考虑到窗口只是部分计算,解决了这个问题。我对后端(Cassandra)进行了建模,以便为每个窗口接收多条记录。任何给定窗口的实际值都是为该窗口找到的所有(可能是部分)记录的相加


因此,一个完美的窗口将是1条记录,一个分割窗口将是2条记录,自然支持迟到,但只接受某个“年龄”阈值。对账在读取时完成。由于这个平台在写操作和读操作方面要重几个数量级,所以它是一个很好的折衷方案

在MapR论坛上与人们深入交谈后,大家的共识似乎是,每小时和每天的聚合不应该在一个流中完成,而是在数据准备好后在一个单独的批处理工作中完成

在进行流式处理时,您应该坚持使用窗口相对较小的流式处理间隔倍数的小批量处理。滑动窗口可以用于(比如)过去50批的趋势。不过,将它们用于一小时或一天的任务似乎并不明智


此外,我不相信您可以告诉批次何时开始/停止等。

这是一个有趣的选择;谢谢分享:)。这听起来有点像OpenTSDB是如何解决这个问题的。我会考虑如何在我的情况下工作。我会接受这一个可行的答案,并添加我自己从其他一些形式。非常感谢。