結構化流工作減緩每十日批

自動壓縮文件夾可以減緩結構化的元數據流的工作。

寫的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如果您確信您的應用程序不需要隻有一次語義。

可以無視這個警告如果您正在編寫一個三角洲表。

這篇文章有用嗎?