结构化流工作减缓每十日批

自动压缩文件夹可以减缓结构化的元数据流的工作。

写的gopinath.chandrasekaran

去年发表在:2022年10月28日

问题

您正在运行的一系列结构化流工作和写入文件。每10日似乎跑慢于前面的工作。

导致

文件创建一个_spark_metadata目标路径的文件夹。这个元数据文件夹存储每一批信息,包括哪些文件批处理的一部分。这是需要提供一个仅一次保证文件流。默认情况下,在每一个10批,前面九批数据文件压缩成一个文件/ <目标文件夹> /数据/ _spark_metadata / 9.紧凑

解决方案

有三个可能的解决方案。选择一个最适合您的情况。

  • 选项1:减轻了问题在生产环境中,用最少的代码更改,但保留较少的元数据。
  • 选项2:推荐如果你可以切换到使用增量表。这是一个很好的长期的解决方案。
  • 选项3:建议如果管道不需要只有一次语义或下游可以处理重复。

选项1:元数据保留时间缩短

默认文件夹的元数据随时间增大。为了减轻这个,你可以设置一个最大限度的保留时间为输出文件。文件超过保存期自动排除在外,这限制了在元数据文件夹中文件的数量。更少的元数据文件夹中的文件意味着压缩花费更少的时间。

设置停留时间当你写流DataFrame文件沉:

% python check_point = ' < checkpoint-folder-path > ' target_path = <目标路径>的保留= <保留时间> #你可以提供的值作为字符串格式在几小时或几天的时间。例如,“12小时”,“7 d”等等。这个值默认为禁用df.writeStream.format (json) .mode(“追加”)。选项(“checkPointLocation”, check_point)。选项(“路径”,目标路径)。选项(“保留”,保留).start ()
删除

信息

保留定义了生存时间(TTL)输出文件。输出文件之前提交TTL范围被排除在元数据日志。试图读取水槽的输出目录不会处理任何文件比TTL范围。

选项2:使用一个增量表水槽

δ表不使用spark_metadata文件夹,它们提供了仅一次语义。

有关更多信息,请查看文档使用增量表作为接收器(AWS|Azure|GCP)。

选项3:使用foreachBatch

foreachBatch不创建一个spark_metadata文件夹写作时的下沉。

删除

警告

仅一次语义类型不支持foreachBatch。只使用foreachBatch如果您确信您的应用程序不需要只有一次语义。

可以无视这个警告如果您正在编写一个三角洲表。

这篇文章有用吗?