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