display() の使用時にチェックポイント ファイルが削除されないCheckpoint files not being deleted when using display()

問題Problem

を使用して display() DataFrames 表示するストリーミングジョブがあります。You have a streaming job using display() to display DataFrames.

val streamingDF = spark.readStream.schema(schema).parquet(<input_path>)
display(streamingDF)

チェックポイントファイルは作成されていますが、削除されていません。Checkpoint files are being created, but are not being deleted.

この問題を確認するには、ルートディレクトリに移動し、フォルダーを検索し /local_disk0/tmp/ ます。You can verify the problem by navigating to the root directory and looking in the /local_disk0/tmp/ folder. チェックポイントファイルは、フォルダーに残ります。Checkpoint files remain in the folder.

原因Cause

コマンド display(streamingDF) は、すべてのマイクロバッチのストリーミングデータフレームからのデータを表示できるメモリシンクの実装です。The command display(streamingDF) is a memory sink implementation that can display the data from the streaming DataFrame for every micro-batch. ストリーミング更新を追跡するには、チェックポイントディレクトリが必要です。A checkpoint directory is required to track the streaming updates.

カスタムチェックポイントの場所を指定しなかった場合は、既定のチェックポイントディレクトリがに作成され /local_disk0/tmp/ ます。If you have not specified a custom checkpoint location, a default checkpoint directory is created at /local_disk0/tmp/.

Azure Databricks は、チェックポイントディレクトリを使用して、正確で一貫性のある進行状況情報を確認します。Azure Databricks uses the checkpoint directory to ensure correct and consistent progress information. ストリームが意図的に、または誤ってシャットダウンされた場合、チェックポイントディレクトリによって Azure Databricks が再開され、中断した箇所を正確に取得できます。When a stream is shut down, either purposely or accidentally, the checkpoint directory allows Azure Databricks to restart and pick up exactly where it left off.

Notebook からストリームを取り消すことによってストリームがシャットダウンされた場合、Azure Databricks ジョブは、ベストエフォートでチェックポイントディレクトリのクリーンアップを試行します。If a stream is shut down by cancelling the stream from the notebook, the Azure Databricks job attempts to clean up the checkpoint directory on a best-effort basis. ストリームが他の方法で終了した場合、またはジョブが終了した場合、チェックポイントディレクトリはクリーンアップされません。If the stream is terminated in any other way, or if the job is terminated, the checkpoint directory is not cleaned up.

これは設計されたとおりです。This is as designed.

解決策Solution

不要なチェックポイントファイルを防止するには、次のガイドラインに従ってください。You can prevent unwanted checkpoint files with the following guidelines.

  • display(streamingDF)運用環境のジョブでは、を使用しないでください。You should not use display(streamingDF) in production jobs.
  • display(streamingDF)ユースケースにが必須の場合は、Apache Spark config オプションを使用してチェックポイントディレクトリを手動で指定する必要があり spark.sql.streaming.checkpointLocation ます。If display(streamingDF) is mandatory for your use case, you should manually specify the checkpoint directory by using the Apache Spark config option spark.sql.streaming.checkpointLocation.
  • チェックポイントディレクトリを手動で指定する場合は、このディレクトリ内の残りのファイルを定期的に削除する必要があります。If you manually specify the checkpoint directory, you should periodically delete any remaining files in this directory. これは週単位で行うことができます。This can be done on a weekly basis.