使用display()時未刪除檢查點文件

了解如何防止顯示(streamingDF)檢查點文件使用大量存儲空間。

寫的亞當Pavlacka

最後發布日期:2022年5月19日

問題

你有一個流作業使用顯示()來顯示數據幀。

%scala val streamingDF = spark.readStream.schema(schema).parquet() display(streamingDF)

檢查點文件正在創建,但沒有被刪除。

方法導航到根目錄並查看/ local_disk0 / tmp /文件夾中。檢查點文件保留在文件夾中。

導致

命令顯示器(streamingDF)是一個內存接收器實現,可以顯示每個微批的流DataFrame中的數據。需要一個檢查點目錄來跟蹤流更新。

如果未指定自定義檢查點位置,則在此處創建默認檢查點目錄/ local_disk0 / tmp /

Databricks使用檢查點目錄來確保正確和一致的進度信息。當一個流被有意或無意地關閉時,檢查點目錄允許Databricks重新啟動並從它停止的地方重新開始。

如果通過從筆記本中取消流而關閉流,Databricks作業將嚐試盡最大努力清理檢查點目錄。如果流以任何其他方式終止,或者作業終止,則檢查點目錄不會被清理。

這是設計好的。

解決方案

您可以使用以下指導原則來防止不需要的檢查點文件。

  • 你不應該使用顯示器(streamingDF)在生產工作中。
  • 如果顯示器(streamingDF)對於您的用例是強製的,您應該使用Apache Spark配置選項手動指定檢查點目錄spark.sql.streaming.checkpointLocation
  • 如果手動指定檢查點目錄,則應定期刪除此目錄中的所有剩餘文件。這可以每周做一次。
這篇文章有用嗎?