【问题标题】:Does Watermark in Update output mode clean the stored state in Spark Structured Streaming?更新输出模式下的 Watermark 是否会清除 Spark Structured Streaming 中的存储状态?
【发布时间】:2019-09-12 12:59:46
【问题描述】:

我正在开发一个火花流应用程序,在了解接收器和水印逻辑的同时,我无法找到一个明确的答案,即我是否在输出具有更新输出模式的聚合时使用具有 10 分钟阈值的水印,超过10分钟阈值后spark保持的间歇状态会被清除吗?

【问题讨论】:

  • 更新了答案。事后看来确实有一个方面不清楚。

标签: apache-spark spark-streaming spark-structured-streaming


【解决方案1】:

Watermark 允许考虑将迟到的数据包含在一段时间内使用窗口的已计算结果中。它的前提是它追溯到一个时间点(阈值),在该时间点之前假定不再有迟到的事件应该到达,但如果它们到达了,它们就会被丢弃。

因此,需要维护已计算的窗口/聚合的状态,以根据事件时间处理这些潜在的延迟更新。但是,这会耗费资源,如果无限执行,则会炸毁结构化流媒体应用程序。

超过10分钟阈值后spark保持的间歇状态是否会被清除?会。这是设计使然,因为没有必要再保持由于阈值已过期而无法再更新的状态。

您需要运行一些简单的示例,因为我注意到很容易忘记输出的微妙之处。

Why does streaming query with update output mode print out all rows? 这也给出了更新模式输出的一个很好的例子。这也提供了一个更好的更新示例:https://databricks.com/blog/2016/07/28/structured-streaming-in-apache-spark.html

更好 - 这个博客有一些很好的图形:https://towardsdatascience.com/watermarking-in-spark-structured-streaming-9e164f373e9

【讨论】:

  • 官方文档:link 说在更新模式下水印将用于丢弃旧的聚合状态。我的疑问是,即使我不使用窗口进行聚合,StateStoreSaveExec 中的旧状态是否会被删除?目的是不收集太多导致OOM的间歇性聚合状态数据。
  • 没有得到响应,在保证聚合中除了当前微批处理之外不会再有更新的情况下,如何不浪费太多磁盘来存储间歇聚合状态。我的另一个问题可能会给您更多背景信息:stackoverflow.com/questions/57705311/…
猜你喜欢
  • 2020-03-19
  • 2023-01-20
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 2021-12-07
  • 2018-01-31
相关资源
最近更新 更多