Databricks でのキャッシュによるパフォーマンスの最適化
Databricksは、高速な中間データ形式を使用したノードのローカルストレージにディスクキャッシュを通じてリモートParquetデータファイルのコピーを作成することで、データの読み取りを高速化します。ファイルをリモートのロケーションからフェッチする必要がある場合、データは自動的にキャッシュされます。同じデータの連続読み取りがローカルで実行されるため、読み取り速度が大幅に向上します。キャッシュはすべてのParquetデータファイル(Delta Lake テーブルを含む)に対して機能します。
SQLウェアハウスと Databricks Runtime 14.2 以降では、CACHE SELECT
コマンドは無視されます。代わりに、拡張ディスク・キャッシング・アルゴリズムが使用されます。
Delta cache の名前が disk cache に変更されました
Databricksのディスクキャッシュは、以前はDeltaキャッシュおよびDBIO キャッシュと呼ばれていました。ディスクキャッシュ動作はDatabricks独自の機能です。この名前の変更は、ディスクキャッシュがDelta Lakeプロトコルの一部であるという混乱を解決することを目的に成されたものです。
ディスクキャッシュとSparkキャッシュ
Databricks ディスク キャッシュは、Apache Spark キャッシュとは異なります。 Databricks では、自動ディスク キャッシュの使用をお勧めします。
次の表は、ワークフローに最適なツールを選択できるように、ディスクキャッシュとApache Sparkキャッシュの主な違いをまとめたものです。
機能 | ディスクキャッシュ | Apache Sparkキャッシュ |
---|---|---|
保存形式 | ワーカーノード上のローカルファイルとして保存されます。 | メモリ内ブロックですが、ストレージレベルによって異なります。 |
適用対象 | GCS およびその他のファイルシステムに保存されている任意の Parquet テーブル。 | 任意のDataFrameまたはRDD。 |
トリガー | 最初の読み取り時に自動的に実行されます(キャッシュが有効な場合)。 | 手動では、コードの変更が必要です。 |
評価 | 遅延評価 | 遅延評価 |
可用性 | 構成フラグを使用して有効または無効にすることができ、特定のノードタイプではデフォルトで有効になります。 | いつでも利用可能です。 |
排除 | LRU方式またはファイル変更時に自動で、クラスターの再起動時に手動で排除されます。 | LRU方式では自動的に、 |
ディスクキャッシュの一貫性
ディスクキャッシュは、データファイルが作成、削除、変更、または上書きされたことを自動的に検出し、それに応じてコンテンツを更新します。キャッシュされたデータを明示的に無効にすることなく、テーブルデータの書き込み、変更、削除を行うことができます。古いエントリは自動的に無効になり、キャッシュから削除されます。
ディスクキャッシングを使用するインスタンスタイプの選択
ディスクキャッシングは、 デフォルトでローカル 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.get("spark.databricks.io.cache.enabled")
ディスクキャッシュを有効または無効にするには、次のコマンドを実行します。
spark.conf.set("spark.databricks.io.cache.enabled", "[true | false]")
キャッシュを無効にしても、ローカルストレージにすでに存在するデータは削除されません。代わりに、クエリーによるキャッシュへの新しいデータの追加やキャッシュからのデータの読み取りを防止します。