Spark结构化流式检查点清理

时间:2018-01-13 00:55:19

标签: apache-spark spark-structured-streaming

我正在使用结构化流媒体从文件源中提取数据。我有一个检查点设置,它可以正常工作,除非我不明白在几种情况下会发生什么。如果我的流媒体应用程序运行了很长时间,检查点文件将继续变得更大或最终被清理。如果永远不清理它是否重要?似乎最终它会变得足够大,以至于程序需要很长时间才能解析。

我的另一个问题是,当我手动删除或更改检查点文件夹,或更改为其他检查点文件夹时,不会提取新文件。文件被识别并添加到检查点,但文件实际上没有被摄取。这让我担心,如果检查点文件夹被改变,我的摄取会搞砸。在这些情况下,我还没有找到关于正确程序的大量信息。

2 个答案:

答案 0 :(得分:5)

  

如果我的流式应用程序运行了很长时间,那么检查点文件就会出现   只是继续变得更大或永远被清理

结构化流式传输保留了一个后台线程,负责删除状态的快照和增量,所以你不应该关心它,除非你的状态非常大并且你拥有的空间很小,在这种情况下你可以配置重新训练的增量/快照Spark商店。

  

当我手动删除或更改检查点文件夹时,或更改为a   不同的检查点文件夹没有新的文件被摄取。

我不确定你的意思,但你应该只删除特殊情况下的检查点数据。结构化流式传输允许您在版本升级之间保持状态,只要存储的数据类型向后兼容即可。我没有真正看到改变检查点位置或手动删除文件的充分理由,除非发生了不好的事情。

答案 1 :(得分:3)

运行我的结构化流应用程序6个月后,我发现了一些答案。检查点文件每执行10次便会压缩在一起,并且会继续增长。一旦这些压缩文件增大到大约2gb,处理时间就会明显减少。因此,每10次执行大约有3-5分钟的延迟。我清理了检查点文件,因此从头开始,执行时间立即恢复正常。

对于第二个问题,我发现实际上有两个检查点位置。指定的检查点文件夹和表目录中的另一个_spark_metadata。都需要删除两者,以从检查点重新开始。