クラウドオブジェクトストレージからデータを読み取るのはローカルディスクから読むよりも遅いです。 キャッシュがなければ、同じParquetデータファイルを読み取るクエリやノートブックは、毎回クラウドオブジェクトストレージからそれらを取得します。
Azure Databricksはディスクキャッシュを使ってデータの読み込みを高速化します。 ノードがリモートストレージからParquetデータファイルを取得すると、自動的にローカルストレージに高速な中間形式でコピーを保存します。 同じデータの以降の読み取りはローカルで実行され、はるかに高速です。 キャッシュはDelta Lakeテーブルを含むすべてのParquetデータファイルに対応します。
注
SQL ウェアハウスおよび Databricks Runtime 14.2 以降では、CACHE SELECT コマンドは無視されます。 代わりに拡張ディスク キャッシュ アルゴリズムが使用されます。
ベスト プラクティス
ディスクキャッシュは、同じテーブルに対する繰り返しまたは反復的なクエリなど、同じデータを何度も読み取るワークロードに最も役立ちます。 Azure Databricks は、それをサポートするワーカー インスタンスの種類では自動的に有効になります。 ディスクキャッシュの読み取り速度を上げるために、以下の推奨事項に従ってください:
- ディスクキャッシュをサポートするワーカーインスタンスタイプを選択してください。 「ディスク キャッシュを使うインスタンスの種類の選択」を参照してください。
- ParquetおよびDelta Lakeデータの繰り返し読み込みには、Apache Sparkキャッシュの代わりにディスクキャッシュを使用してください。 詳細は「 ディスクキャッシュとSparkキャッシュの比較」を参照してください。
Delta キャッシュからディスク キャッシュへの名称変更
Azure Databricks のディスク キャッシュは、以前は Delta キャッシュおよび DBIO キャッシュと呼ばれていました。 ディスク キャッシュの動作は、独自の Azure Databricks 機能です。 この名称変更は、それが Delta Lake プロトコルの一部であるかのような混同を避けるためのものです。
ディスクキャッシュとSparkキャッシュを比較してください
Azure Databricks ディスク キャッシュは、Apache Spark キャッシュとは異なります。 Databricksは自動ディスクキャッシュの使用を推奨しています。
ワークフローに最適なツールを選択できるように、ディスク キャッシュと Apache Spark キャッシュの主な違いを次の表にまとめています。
| 機能 | ディスク キャッシュ | Apache Spark キャッシュ |
|---|---|---|
| 格納形式 | ワーカー ノード上のローカル ファイル。 | インメモリ ブロック。ただし、ストレージ レベルによって異なります。 |
| 適用先 | ABFS および他のファイル システムに保存されている任意の Parquet テーブル。 | 任意の DataFrame または RDD。 |
| トリガー済み | 最初の読み取り時に自動的に(キャッシュが有効な場合)。 | 手動。コードの変更が必要。 |
| 評価済み | 遅延。 | 遅延。 |
| 可用性 | 特定のノードタイプではデフォルトで有効化されています。 設定フラグで有効化または無効化します。 | 常に使用可能です。 |
| 追い出された | LRU 方式の使用時またはファイルの変更時に自動的に実行。クラスターの再起動時に手動。 | LRU 方式では自動、unpersist では手動。 |
ディスク キャッシュの整合性
ディスク キャッシュは、データ ファイルの作成、削除、修正、上書きを自動的に検出し、それに応じて内容を更新します。 キャッシュ データを明示的に無効にする必要なしに、テーブル データの書き込み、変更、削除を行うことができます。 古いエントリは、自動的に無効になり、キャッシュから削除されます。
ディスク キャッシュを使用するインスタンスの種類の選択
ディスク キャッシュを使用するための推奨される (そして最も簡単な) 方法は、クラスターを構成するときに 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]")
キャッシュを無効にしても、既にローカル ストレージに格納されているデータは削除されません。 代わりに、クエリの実行時にキャッシュへの新しいデータの追加とキャッシュからのデータの読み取りが行われなくなります。