真空三角洲湖上的最佳实践

学习使用的最佳实践,和故障排除,真空三角洲湖上。

写的mathan.pillai

去年发表在:2023年2月3日

为什么要使用真空在三角洲湖吗?

真空是用来清理闲置和陈旧的数据文件占用不必要的存储空间。删除这些文件可以帮助降低存储成本。

当您运行真空在三角洲表删除以下文件从底层文件系统:

  • 任何数据文件不是由三角洲湖
  • 删除过期数据文件(文件不再引用的三角洲表),超过7天
删除

信息

真空不首先下划线删除目录,如_delta_log

当你应该运行真空吗?

当您运行真空它消除了陈旧的数据文件。这并不影响正常工作,但它可以限制你的能力时间旅行(AWS|Azure|GCP)。

默认配置为δ表允许您30天时间旅行到过去。然而,要做到这一点,底层数据文件必须存在。

的默认配置真空删除过期数据文件超过七天。因此,如果你跑了真空使用默认设置,你将只能7天时间旅行到过去,从运行的时间真空

如果你不需要时间旅行超过七天过去,你可以真空在日常生活中。

运行真空每天帮助控制存储成本,尤其是对大表。您还可以运行真空随需应变的如果你注意到一个特定的存储成本激增δ表。

你可能面临的问题真空

  • 任何进展更新:你可能不知道多远真空已完成,特别是当吗真空已经运行了很长一段时间。你可能不知道有多少文件被成功删除和多少文件依然存在。
  • 可怜的运行性能:真空跑了很长一段时间,特别是当表是巨大的和/或表时高频输入流的来源。

缓解问题真空

任何进展更新

如果真空一两个小时内完成,不需要进行故障排除。然而,如果真空运行时间超过两个小时(这可能发生在大型表真空最近还没有运行),您可能希望检查的进展。在这种情况下,您可以运行真空排练选择之前和之后的实际真空运行监控特定的性能真空运行和识别的文件删除。

  1. 运行真空干燥的运行确定要删除文件的数量。取代< table-path >与实际表路径位置。
    % python火花。sql(“真空三角洲。< table-path >排练”)
    排练选项告诉真空它不应该删除任何文件。相反,排练打印的文件和目录的数量是安全的要删除。这一步的目的是不删除文件,但知道要删除文件的数量。

    这个例子排练命令返回一个告诉我们,有输出x安全删除文件和目录。
    发现x y的总目录的文件和目录,是安全的删除。
    你应该记录文件的数量确定为安全的删除。

  2. 运行真空

  3. 取消真空一个小时之后。

  4. 运行真空排练一次。

  5. 第二个排练命令识别优秀的文件的数量,可以安全地删除。

  6. 减去优秀(第二数量的文件排练)从原始文件数量的文件删除。
删除

信息

你也可以评论你的云存储桶信息门户来识别剩余数量的桶中存在的文件,或者删除请求的数量,确定删除多少进展。

可怜的运行性能

这可以减轻遵循真空最佳实践。

避免行为妨碍性能

避免分区数据文件夹

  • 分区数据会导致很多小文件。你应该避免分区在高基数列。跨越式数据时,即使是运行优化可以压缩小文件有问题,为压实不会发生跨分区目录。
  • 文件删除速度是直接依赖文件的数量。跨越式数据可以阻碍的性能真空
删除

信息

你应该分区低基数列和z值在高基数列。

避免并发运行

  • 运行时真空一张大桌子上,避免并发运行(包括干运行)。
  • 避免在同一位置上运行其他操作,以避免文件系统级节流。其他操作可以争夺相同的带宽。

避免云版本控制

  • 从三角洲湖维护版本历史,您应该避免使用云版本控制机制,如在AWS S3版本控制
  • 使用云版本控制除了三角洲湖会导致额外的存储成本和性能下降。

行动来提高性能

启用autoOptimize/autoCompaction

  • 运行优化消除小文件。当你把优化与普通真空你确保运行失效数据文件的数量(和相关的存储成本)最小。
  • 审查文档autoOptimizeautoCompaction(AWS|Azure|GCP更多信息)。
  • 审查文档优化(AWS|Azure|GCP更多信息)。
删除

信息

修改表属性之前,您必须确保没有主动写发生在桌子上。

使用砖运行时的10.4 LTS以上和额外的驱动核心(Azure和GCP)

  • 在Azure和GCP真空并行执行删除驱动,当使用砖运行时10.4 LTS或以上。司机的内核数越高,越可以并行操作。
删除

信息

在AWS批量删除发生过程是单线程的。AWS API使用批量删除,删除1000年批次,但它不使用并行线程。因此,使用多核司机不得帮助在AWS上。

在AWS上使用砖运行时的11.1或以上

  • 砖11.1运行时,将创建检查点间隔设置为100以上,而不是10个。因此,创建检查点文件少了。用更少的检查点文件索引,在事务日志目录中更快的上市时间。这减少了三角洲日志大小和改善真空上市时间。它还降低了检查点存储大小。
  • 如果您使用的是砖运行时10.4 LTS AWS和不能更新一个新的运行时,您可以手动设置表属性delta.checkpointInterval = 100。这对每100提交创建检查点文件,而不是每10提交。
    % sql alter table < delta-table-name >设置tblproperties(δ。checkpointInterval ' = 100)
删除

信息

减少检查点砖运行时10.4 LTS可能降低表查询/读取性能,尽管在大多数情况下应该是可以忽略不计的区别。修改表属性之前,您必须确保没有主动写发生在桌子上。

使用优化计算实例

  • 真空是计算密集型的,您应该使用计算优化的实例。
    • 在AWS上使用C5系列工作类型。
    • Azure使用F系列工作类型。
    • 丰富使用C2系列工作类型。

使用伸缩集群

  • 在执行文件删除之前,真空命令列出了文件。文件清单发生在平行利用集群中的工人。让更多的工人在集群中可以帮助初始清单文件。工人数量越高,越快的文件清单的过程。
  • 新员工不需要文件删除。这就是为什么你应该使用一个伸缩集群与多个工人。文件清单完成后,集群规模,可以使用驱动的文件删除。这节省了集群成本。

如何审查文档启用和配置自动定量(AWS|Azure|GCP更多信息)。

设定一个更高的触发频率流工作

  • 用120秒或更多的触发频率流写入三角洲表的工作。你可以根据你的需求调整。
    / / ProcessingTime触发df micro-batch间隔120秒。writeStream .format(“控制台”).trigger(触发器。ProcessingTime .start(120秒))()
  • 触发频率越高,更大的数据文件。更大的数据文件,较小的总文件的数量。较小的总数量的文件,删除文件的时间越少。因此,未来真空尝试运行得更快。

减少日志保留

  • 如果你不需要时间旅行到过去,可以减少日志保留七天。这减少了JSON文件的数量,从而减少了清单。这也降低了三角洲日志大小。
  • delta.logRetentionDuration属性配置多长时间可以回到过去。默认值为30天。您需要使用ALTER TABLE修改现有的属性值。
    % sql ALTER TABLE <表名称>设置TBLPROPERTIES(δ。logRetentionDuration”=“7天”)
删除

信息

修改表属性之前,您必须确保没有主动写发生在桌子上。

运行真空每天

  • 如果你减少日志保留七天(从而限制时间旅行七天),您可以运行真空在日常生活中。
  • 这个删除过期数据文件比切断的日子,每一天。这是一个好方法避免陈旧的数据文件,降低存储成本。
删除

警告

如果δ表的来源是流媒体查询,如果查询流落后超过七天,然后流查询将无法正确读取表,因为它将寻找数据已经被删除了。你应该每天只运行真空如果你知道所有查询不会要求超过7天的数据。

  • 测试和验证后在一个小桌子,你可以安排真空日常运行通过一份工作。
  • 时间表真空使用集群工作运行,而不是在通用集群上运行手动,这可能会花费更多。
  • 时使用伸缩集群配置工作,节约成本。

总结

改善真空性能:

  • 避免分区目录
  • 避免并发(在运行真空)
  • 避免使云存储文件版本控制
  • 如果你运行一个周期优化命令,使autoCompaction/autoOptimize三角洲的桌子上
  • 使用砖运行时的电流
  • 使用伸缩集群计算优化的工作类型

此外,如果您的应用程序允许:

  • 增加任何的触发频率流写入增量表的工作
  • 减少日志保留三角洲表的时间
  • 完成一个周期真空

这些额外步骤进一步增加真空性能和还可以帮助降低存储成本。

这篇文章有用吗?