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キャッシュ |
---|---|---|
保存形式 |
ワーカーノード上のローカルファイルとして保存されます。 |
メモリ内ブロックですが、ストレージレベルによって異なります。 |
適用対象 |
S3、ABFS、およびその他のファイルシステムに保存されているすべての Parquetテーブル。 |
任意のDataFrameまたはRDD。 |
トリガー |
最初の読み取り時に自動的に実行されます(キャッシュが有効な場合)。 |
手動では、コードの変更が必要です。 |
評価 |
遅延評価 |
遅延評価 |
可用性 |
構成フラグを使用して有効または無効にすることができ、特定のノードタイプではデフォルトで有効になります。 |
いつでも利用可能です。 |
排除 |
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