Spark流 - 等待窗口聚合的数据?

时间:2017-06-27 14:55:33

标签: apache-spark spark-streaming

我的数据格式为{host |公制|价值|时间戳}。我们在世界各地都有报告指标的主机。

我对使用窗口操作(比方说,1小时)来处理这样的数据感到有些困惑。

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

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

人们如何处理这类问题?他们是否将窗户设置得比需要的大得多,只需抓住他们在每个批次周期中关注的数据(滑动类型)?

2 个答案:

答案 0 :(得分:1)

过去,我在一个大型物联网平台上工作,并通过考虑窗口只是部分计算来解决这个问题。我建模后端(Cassandra)为每个窗口接收超过1条记录。任何给定窗口的实际值将是为该窗口找到的所有潜在部分记录的添加。

因此,一个完美的窗口将是1个记录,一个分割窗口将是2个记录,迟到的自然得到支持但只能接受达到某个“年龄”阈值。和解是在阅读时完成的。由于这个平台在写入与读取方面的重量级都是数量级,因此它做出了很好的折衷。

答案 1 :(得分:1)

在与MapR论坛上的人们进行深入交谈之后,我们的共识似乎是每小时和每日聚合不应该在流中完成,而是在数据准备就绪后在单独的批处理作业中完成。

在进行流式传输时,您应该坚持使用窗口相对较小的流间隔倍数的小批量。滑动窗口对于最近50批次的趋势可能是有用的。将它们用于一小时或一天的任务似乎并不合理。

另外,我不相信你可以告诉你的批次什么时候开始/停止等等。