具有大窗口大小的火花结构化流:内存消耗

Posted

技术标签:

【中文标题】具有大窗口大小的火花结构化流:内存消耗【英文标题】:spark structured streaming with large window size: memory consumption 【发布时间】:2020-10-05 07:51:14 【问题描述】:

我们计划实施一个 Spark Structured Streaming 应用程序,该应用程序将使用连续的数据流:度量值随时间的演变。 此流式应用程序将使用 7 天的窗口大小(和一个滑动窗口),以便频繁计算过去 7 天的指标值的平均值。

1- Spark 会保留所有这 7 天的数据(对消耗的内存有很大影响),或者 Spark 会不断计算和更新请求的平均值(然后删除处理过的数据),因此不会影响消耗的内存(不保留 7 天的数据)?

2- 如果第一个问题的答案是保留这 7 天的数据,水印的使用会阻止这种保留吗? 假设我们有一个 1 小时的水印; Spark 中只会保留 1 小时的数据,还是会在 Spark 内存中保留 7 天,并且此处的水印只是为了忽略数据时间戳超过 1 小时的新数据?

【问题讨论】:

【参考方案1】:

Window Size 7 绝对是一个重要的参数,但它也取决于传入的流数据量/记录。诀窍在于如何使用 Window 持续时间、更新间隔、输出模式以及必要时的水印(如果业务规则不受影响)

1- 如果流配置为滚动窗口大小(即窗口持续时间与更新持续时间相同),在完整模式下,您最终可能会将完整数据保留在内存中 7 天。但是,如果您将窗口持续时间配置为 7 天,每 x 分钟更新一次,则将每 x 分钟计算一次聚合,并且仅将结果数据保存在内存中。因此查看窗口 API 参数并配置获取结果的方式。

2- Watermark 带来了不同的行为,它会忽略 watermark 持续时间之前的记录,并在每个微批次超过 watermark 时间后更新结果表。如果您的业务规则可以包含水印计算,也可以使用它。

在enter link description here详细了解API,输出模式和水印使用方法很好 这将有助于选择正确的组合。

【讨论】:

以上是关于具有大窗口大小的火花结构化流:内存消耗的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有火花数据流结构的非基于时间的窗口?

Android模拟器AVD窗口大小[重复]

调整包含具有更改窗口大小的图像的多个标签的大小

如果它比 WPF XAML 中的窗口大,如何缩放字体大小以适应窗口?

Windows 10 创建具有初始大小的新窗口

如何创建具有多个显示三角形的调整大小窗口?