Comprehensive Guide to Optimize Data Workloads | DatabricksのセクションData Caching — Leverage Caching to Speed Up the Workloadsの翻訳です。
- 本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
- 2023年時点の内容です。一部情報が古いものがあります。
DeltaキャッシュとSparkキャッシュは、ワークロードを高速にするために活用できる2つの異なるキャッシュのタイプがあります。
1. Deltaキャッシュ
Deltaキャッシュは、現在ではディスクキャッシュに名称変更されています。
Deltaキャッシュ(ディスクキャッシュ)は、高速な中間データフォーマットを用いて、ノードのローカルストレージ(SSDドライブ)にリモートファイルのコピーを作成することで、データの読み込みを加速します。
-
デフォルトでDeltaキャッシュが有効化されている高速化インスタンス(Azureクラウドであればメモリー最適化カテゴリのStandard_E16ds_v4やストレージ最適化カテゴリーのStandard_L4sなど)を使いましょう。
-
SSDドライブを持つそのほかのインスタンスファミリー(Azureクラウドにおけるコンピュート最適化カテゴリーのFsv2-seriesなど)のワーカーでもDeltaキャッシュを有効化することができます。明示的にDeltaキャッシュを有効にするには、以下の設定を行います:
set spark.databricks.io.cache.enabled = true
2. Sparkキャッシュ
cache()
やpersist()
メソッドを用いることで、SparkはSparkデータフレームの中間計算結果をキャッシュする最適化メカニズムを提供し、以降のアクションで再利用することができます。同様に、CACHE TABLEコマンドを用いてテーブルをキャッシュすることもできます。キャッシュされるデータをどこに格納するのか(メモリー、ディスク、メモリーとディスク、シリアライズ有無など)を選択できるキャッシュモードが存在します。
- Sparkキャッシュは、同じデータフレームに対して1つ以上のSparkアクション(count、saveAsTable、writeなど)が実行される際にのみ有用です。
- Databricksでは、Deltaキャッシュが優れた性能改善をもたらすので、SparkキャッシュではなくDeltaキャッシュを使うことをお勧めします。ディスクキャッシュに格納されているデータは、Sparkキャッシュに格納されているデータよりも高速に読み込み、操作することができます。これは、ディスクキャッシュでは、効率的な解凍アルゴリズムを用いており、whole-stage code generationを用いた更なる処理に最適なフォーマットでデータを出力するためです。
- 計算資源を多く必要とするワークロード(joinや集計処理のような多数のワイドな変換処理)では、特に繰り返し同じテーブルからデータを読み込む際にはDeltaキャッシュによるメリットを享受することになります。これらのワークロードでは、常にDeltaキャッシュが有効化されたインスタンスを使いましょう。