Databricksでのキャッシュによるパフォーマンスの最適化

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

注:

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

Deltaキャッシュのディスクキャッシュへの名前の変更

Databricksのディスクキャッシュは、以前はDeltaキャッシュおよびDBIO キャッシュと呼ばれていました。ディスクキャッシュ動作はDatabricks独自の機能です。この名前の変更は、ディスクキャッシュがDelta Lakeプロトコルの一部であるという混乱を解決することを目的に成されたものです。

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

Databricks ディスク キャッシュは、Apache Spark キャッシュとは異なります。 Databricks では自動ディスク キャッシュの使用を推奨しています。

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

特徴量

ディスクキャッシュ

Apache Sparkキャッシュ

保存形式

ワーカーノード上のローカルファイルとして保存されます。

メモリ内ブロックですが、ストレージレベルによって異なります。

適用対象

GCS およびその他のファイル システムに格納されているすべての Parquet テーブル。

任意のDataFrameまたはRDD。

トリガー

最初の読み取り時に自動的に実行されます(キャッシュが有効な場合)。

手動では、コードの変更が必要です。

評価

遅延評価

遅延評価

可用性

構成フラグを使用して有効または無効にすることができ、特定のノードタイプではデフォルトで有効になります。

いつでも利用可能です。

排除

LRU方式またはファイル変更時に自動で、クラスターの再起動時に手動で排除されます。

LRU方式では自動的に、unpersist では手動で排除されます。

ディスクキャッシュの一貫性

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

ディスクキャッシュを使用するインスタンスタイプの選択

ディスクキャッシュは、 ローカル SSD を持つすべてのインスタンスタイプでデフォルトで機能します。

ディスク キャッシュをサポートするインスタンス タイプでは、Databricks によってそのクラスターでディスク キャッシュが自動的に有効になり、そのインスタンス タイプに適切なキャッシュ サイズが構成されます。

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

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

キャッシュディスク使用量は、ローカル SSD を使用するインスタンスタイプで自動的に設定されます。 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

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

ディスクキャッシュは、 ローカル SSD を持つすべてのインスタンスタイプでデフォルトで機能します。

ディスクキャッシュを有効または無効にするには、次のコマンドを実行します。

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

キャッシュを無効にしても、ローカルストレージにすでに存在するデータは削除されません。代わりに、クエリーによるキャッシュへの新しいデータの追加やキャッシュからのデータの読み取りを防止します。