為什麼要使用真空在三角洲湖嗎?
真空是用來清理閑置和陳舊的數據文件占用不必要的存儲空間。刪除這些文件可以幫助降低存儲成本。
當您運行真空在三角洲表刪除以下文件從底層文件係統:
- 任何數據文件不是由三角洲湖
- 刪除過期數據文件(文件不再引用的三角洲表),超過7天
當你應該運行真空嗎?
當您運行真空它消除了陳舊的數據文件。這並不影響正常工作,但它可以限製你的能力時間旅行(AWS|Azure|GCP)。
默認配置為δ表允許您30天時間旅行到過去。然而,要做到這一點,底層數據文件必須存在。
的默認配置真空刪除過期數據文件超過七天。因此,如果你跑了真空使用默認設置,你將隻能7天時間旅行到過去,從運行的時間真空。
如果你不需要時間旅行超過七天過去,你可以真空在日常生活中。
運行真空每天幫助控製存儲成本,尤其是對大表。您還可以運行真空隨需應變的如果你注意到一個特定的存儲成本激增δ表。
你可能麵臨的問題真空
- 任何進展更新:你可能不知道多遠真空已完成,特別是當嗎真空已經運行了很長一段時間。你可能不知道有多少文件被成功刪除和多少文件依然存在。
- 可憐的運行性能:真空跑了很長一段時間,特別是當表是巨大的和/或表時高頻輸入流的來源。
緩解問題真空
任何進展更新
如果真空一兩個小時內完成,不需要進行故障排除。然而,如果真空運行時間超過兩個小時(這可能發生在大型表真空最近還沒有運行),您可能希望檢查的進展。在這種情況下,您可以運行真空與排練選擇之前和之後的實際真空運行監控特定的性能真空運行和識別的文件刪除。
- 運行真空幹燥的運行確定要刪除文件的數量。取代< table-path >與實際表路徑位置。
% python火花。sql(“真空三角洲。< table-path >排練”)
的排練選項告訴真空它不應該刪除任何文件。相反,排練打印的文件和目錄的數量是安全的要刪除。這一步的目的是不刪除文件,但知道要刪除文件的數量。
這個例子排練命令返回一個告訴我們,有輸出x安全刪除文件和目錄。發現x y的總目錄的文件和目錄,是安全的刪除。
你應該記錄文件的數量確定為安全的刪除。 - 運行真空。
- 取消真空一個小時之後。
- 運行真空與排練一次。
- 第二個排練命令識別優秀的文件的數量,可以安全地刪除。
- 減去優秀(第二數量的文件排練)從原始文件數量的文件刪除。
可憐的運行性能
這可以減輕遵循真空最佳實踐。
避免行為妨礙性能
避免分區數據文件夾
- 分區數據會導致很多小文件。你應該避免分區在高基數列。跨越式數據時,即使是運行優化可以壓縮小文件有問題,為壓實不會發生跨分區目錄。
- 文件刪除速度是直接依賴文件的數量。跨越式數據可以阻礙的性能真空。
避免並發運行
- 運行時真空一張大桌子上,避免並發運行(包括幹運行)。
- 避免在同一位置上運行其他操作,以避免文件係統級節流。其他操作可以爭奪相同的帶寬。
避免雲版本控製
- 從三角洲湖維護版本曆史,您應該避免使用雲版本控製機製,如在AWS S3版本控製。
- 使用雲版本控製除了三角洲湖會導致額外的存儲成本和性能下降。
行動來提高性能
啟用autoOptimize/autoCompaction
- 運行優化消除小文件。當你把優化與普通真空你確保運行失效數據文件的數量(和相關的存儲成本)最小。
- 審查文檔autoOptimize和autoCompaction(AWS|Azure|GCP更多信息)。
- 審查文檔優化(AWS|Azure|GCP更多信息)。
使用磚運行時的10.4 LTS以上和額外的驅動核心(Azure和GCP)
- 在Azure和GCP真空並行執行刪除驅動,當使用磚運行時10.4 LTS或以上。司機的內核數越高,越可以並行操作。
在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)
使用優化計算實例
- 自真空是計算密集型的,您應該使用計算優化的實例。
- 在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天”)
運行真空每天
- 如果你減少日誌保留七天(從而限製時間旅行七天),您可以運行真空在日常生活中。
- 這個刪除過期數據文件比切斷的日子,每一天。這是一個好方法避免陳舊的數據文件,降低存儲成本。
- 測試和驗證後在一個小桌子,你可以安排真空日常運行通過一份工作。
- 時間表真空使用集群工作運行,而不是在通用集群上運行手動,這可能會花費更多。
- 時使用伸縮集群配置工作,節約成本。
總結
改善真空性能:
- 避免分區目錄
- 避免並發(在運行真空)
- 避免使雲存儲文件版本控製
- 如果你運行一個周期優化命令,使autoCompaction/autoOptimize三角洲的桌子上
- 使用磚運行時的電流
- 使用伸縮集群計算優化的工作類型
此外,如果您的應用程序允許:
- 增加任何的觸發頻率流寫入增量表的工作
- 減少日誌保留三角洲表的時間
- 完成一個周期真空
這些額外步驟進一步增加真空性能和還可以幫助降低存儲成本。