Optimizations and performance recommendations on Databricks | Databricks on AWS [2022/9/8時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
Databricksにおいては、レイクハウスにおける大規模ETL処理からアドホックなインタラクティブクエリーに至るさまざまなワークロードをサポートする数多くの最適化技術を提供しています。これらの最適化の大部分は自動で適用されます。Databricksを使うだけでシンプルにメリットを享受することができます。さらに、ほとんどのDatabricksランタイムの機能は、Databricksにおけるテーブルの作成で使用されるデフォルトのストレージレイヤーであるDelta Lakeを必要とします。
Databricksは、ワークロードの大部分を最適化するデフォルト値を設定します。しかし、特定のケースにおいては設定を変更することでパフォーマンスが改善します。
Databricksランタイムのパフォーマンス
注意
最新のパフォーマンス強化機能を活用するためには、最新のDatabricksランタイムを使用してください。ここで説明されるすべての挙動は、Databricksランタイム10.4 LTS以降ではデフォルトで有効化されています。
- ディスクキャッシングを用いて、データを計算クラスターにアタッチされているディスクボリュームにロードすることで、Parquetデータに対する読み取りの繰り返しを高速化します。
- 動的ファイルプルーニングは、クエリーの述語にマッチするデータを含まないディレクトリをスキップすることで、クエリーの性能を改善します。
-
ローシャッフルマージは、
MERGE
オペレーションによって再書き込みされ、ZORDER
クラスタリングによって再計算されるデータファイルの数を削減します。 - Apache Spark 3.0では、数多くのオペレーションのパフォーマンスを強化するadaptive query executionが導入されました。
パフォーマンス強化のためのDatabricksの推奨事項
- ソースデータセットのディープコピー、シャローコピーを作成するために、Databricksでテーブルをクローンすることができます。
- コストベースのオプティマイザは、テーブルの統計情報を活用することで、クエリーパフォーマンスを高速にします。
- 最適化書き込みと自動ファイルコンパクションを用いることでDeltaテーブルを自動で最適化することができます。これは特に長時間処理を行う構造化ストリーミングジョブでは有用です。
- 高階関数は、一般的なSparkオペレーターを持たない多くのオペレーションに対して、ビルトインかつ最適化されたパフォーマンスを提供します。高階関数はユーザー定義関数よりも高いパフォーマンスのメリットを提供します。
- Databricksでは、配列、struct、JSON文字列を含む複雑なデータ型を操作するためのビルトインのオペレーターと特殊な構文を数多く提供しています。
- レンジを含む、あるいは、大きな偏りを持つjoinの設定を手動でチューニングすることができます。
オプトインの挙動
- Databricksではデフォルトでシリアライズ可能な書き込みアイソレーションを保証します。シリアライズ可能性に対するアイソレーションレベルを変更することで、同時オペレーションのスループットを削減することができますが、読み取りのシリアライズ可能性が求められる場合には必要になるかもしれません。
- 特定の条件にマッチするレコードを含まないデータファイルをスキャンする確率を削減するために、ブルームフィルターインデックスを使うことができます。