Azure Databricks でキャッシュを使用してパフォーマンスを最適化する

Azure Databricks は、高速な中間データ形式を使用してノードのローカル ストレージにリモート Parquet データ ファイルのコピーを作成することで、ディスク キャッシュを使用してデータ読み取りを高速化します。 リモートの場所からファイルをフェッチする必要がある場合は常に、データが自動的にキャッシュされます。 その後、同じデータの読み取りはローカルで実行され、読み取り速度が大幅に向上します。 キャッシュは、すべての Parquet データ ファイル (Delta Lake テーブルを含む) に対して機能します。

Note

SQL ウェアハウスおよび Databricks Runtime 14.2 以降では、CACHE SELECT コマンドは無視されます。 代わりに拡張ディスク キャッシュ アルゴリズムが使用されます。

Delta キャッシュからディスク キャッシュへの名称変更

Azure Databricks のディスク キャッシュは、以前は Delta キャッシュおよび DBIO キャッシュと呼ばれていました。 ディスク キャッシュの動作は、独自の Azure Databricks 機能です。 この名称変更は、それが Delta Lake プロトコルの一部であるかのような混同を避けるためのものです。

ディスク キャッシュSpark キャッシュ

Azure Databricks ディスク キャッシュは、Apache Spark キャッシュとは異なります。 Azure Databricks では、自動ディスク キャッシュを使用することをお勧めしています。

ワークフローに最適なツールを選択できるように、ディスク キャッシュと Apache Spark キャッシュの主な違いを次の表にまとめています。

機能 ディスク キャッシュ Apache Spark キャッシュ
格納形式 ワーカー ノード上のローカル ファイル。 インメモリ ブロック。ただし、ストレージ レベルによって異なります。
適用先 ABFS および他のファイル システムに保存されている任意の Parquet テーブル。 任意の DataFrame または RDD。
トリガー 最初の読み取り時に自動的に実行 (キャッシュが有効な場合)。 手動。コードの変更が必要。
評価 遅延。 遅延。
可用性 構成フラグを使用して有効または無効にできます。特定のノードの種類では既定で有効になります。 常に使用可能です。
削除された LRU 方式の使用時またはファイルの変更時に自動的に実行。クラスターの再起動時に手動。 LRU 方式の使用時に自動的に実行。unpersist の指定時に手動。

ディスク キャッシュの整合性

ディスク キャッシュは、データ ファイルの作成、削除、修正、上書きを自動的に検出し、それに応じて内容を更新します。 キャッシュ データを明示的に無効にする必要なしに、テーブル データの書き込み、変更、および削除を行うことができます。 古いエントリは、自動的に無効になり、キャッシュから削除されます。

ディスク キャッシュを使うインスタンスの種類の選択

ディスク キャッシュを使用するための推奨される (そして最も簡単な) 方法は、クラスターを構成するときに SSD ボリュームを使用するワーカーの種類を選択することです。 このようなワーカーは、ディスク キャッシュ用に有効にされ、構成されます。

ディスク キャッシュは、ワーカー ノードで提供されるローカル SSD 上で使用可能なスペースの最大で半分を使用するように構成されます。 構成オプションについては、「ディスク キャッシュを構成する」を参照してください。

ディスク キャッシュを構成する

Azure Databricks では、クラスターにキャッシュ高速化ワーカー インスタンス型を選択することをお勧めします。 このようなインスタンスは、ディスク キャッシュ用に自動的に最適に構成されます。

注意

ワーカーが使用停止されると、そのワーカーに格納されている Spark キャッシュが失われます。 したがって、自動スケールが有効になっている場合は、キャッシュに不安定性があります。 その後、Spark では、不足しているパーティションを必要に応じてソースから再読み取りする必要があります。

ディスク使用量を構成する

ディスク キャッシュでワーカー ノードのローカル ストレージを使用する方法を構成するには、クラスターの作成時に次の Spark 構成設定を指定します。

  • spark.databricks.io.cache.maxDiskUsage: キャッシュ データ用に予約されたノードあたりのディスク領域 (バイト単位)
  • spark.databricks.io.cache.maxMetaDataCache: キャッシュ メタデータ用に予約されたノードあたりのディスク領域 (バイト単位)
  • spark.databricks.io.cache.compression.enabled: キャッシュ データを圧縮形式で保存する必要があるかどうか

構成の例

spark.databricks.io.cache.maxDiskUsage 50g
spark.databricks.io.cache.maxMetaDataCache 1g
spark.databricks.io.cache.compression.enabled false

ディスク キャッシュを有効または無効にする

ディスク キャッシュを有効または無効にするには、以下を実行します。

spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")

キャッシュを無効にしても、既にローカル ストレージに格納されているデータは削除されません。 代わりに、クエリの実行時にキャッシュへの新しいデータの追加とキャッシュからのデータの読み取りが行われなくなります。