メインコンテンツまでスキップ

既存の Apache Spark コードを Databricks に適応させる

この記事では、既存の Apache Spark ワークロードを Databricks で実行するように調整するために必要な変更について説明します。オンプレミス クラスター、カスタム クラウドベースのインフラストラクチャ、または別のエンタープライズ Apache Spark オファリングから Databricks に移行する場合でも、ほとんどのワークロードは、運用環境に移行するためにわずかな変更のみを必要とします。Databricks は、カスタム最適化の導入、インフラストラクチャの構成とデプロイ、および Databricks Runtime での依存関係の維持により、Apache Spark のパフォーマンスを拡張、簡素化、および向上します。

important

Apache Spark のバージョンをアップグレードすると、構文に重大な変更が加えられる場合があります。 リリースノートのバージョンと互換性Databricks RuntimeおよびSpark移行ガイドを参照してください。

parquetを次のように変更します。 delta

Databricks では、データを書き込むときに Parquet や ORC の代わりに Delta Lake を使用することをお勧めします。 Databricks は、Delta Lake によってサポートされるテーブルと対話する際の効率を高めるために多くの機能を最適化しており、Parquet から Delta Lake へのデータとコード フォームのアップグレードは、いくつかの手順を実行するだけです。 ParquetデータレイクのDelta Lakeへの移行を参照してください。

Delta Lake はACIDトランザクション保証を提供するため、ワークロードを簡略化して、Apache Spark操作で疑似トランザクションを作成する方法に適した回避策を削除できる場合があります。たとえば、次のようなものがあります。

  • ディレクトリ構造またはパーティション分割戦略を構築して、特定の操作のすべてのファイルをパーティションの一部として同時に検出できるようにします。
  • メタストアを構成して、新しいデータの検出方法に関するトランザクション性を追加する。
  • MSCK repair を使用して、テーブルに書き込まれたファイルをメタストアに登録する。
  • alter table add partition を使用して、パーティションをテーブルに手動で追加します。

「Databricks でテーブルをパーティション分割するタイミング」を参照してください

注記

使用するデータ形式をアップグレードしなくてもワークロードを実行できますが、Databricks で最大のパフォーマンス向上の多くは Delta Lake に直接結びついています。

Databricks Runtime 互換ライブラリを使用して Apache Spark コードを再コンパイルする

Databricks Runtimeの各バージョンには、Apache Sparkアプリケーションに必要な多くのライブラリが事前に設定されています。必要に応じてコンピュートに追加のライブラリをインストールすることもできますが、それが不可能な場合は Databricks 、互換性がテストされた Databricks Runtime にパッケージ化されたライブラリバージョンを使用することをお勧めします。 各 Databricks Runtime リリースには、インストールされているすべてのライブラリの一覧が含まれています。 Databricks Runtimeリリースノートのバージョンと互換性を参照してください。

SparkSession 作成コマンドを削除する

多くの従来の Apache Spark ワークロードでは、ジョブごとに新しい SparkSession が明示的に宣言されています。Databricks は、コンピュート クラスターごとに SparkContext を自動的に作成し、クラスターに対して実行されるノートブックまたはジョブごとに分離された SparkSession を作成します。コードをローカルでコンパイルしてテストし、 SparkSession.builder().getOrCreate() を使用するようにこれらのコマンドをアップグレードすることで、Databricks にデプロイする機能を維持できます。

ターミナルスクリプトコマンドの削除

Apache Spark では、 sys.exit()sc.stop() などのコマンドを使用して、完了したことをプログラムで明示的に宣言する必要があります。Databricks は、完了に達するとジョブを自動的に終了してクリーンアップするため、これらのコマンドは不要であり、削除する必要があります。

また、Databricks は、実行の終了時に構造化ストリーミングワークロードを自動的に終了およびクリーンアップするため、構造化ストリーミングアプリケーションから awaitTermination() コマンドや同様のコマンドを削除できます。

クラスターを構成するための信頼Databricks

Databricks は、回復性とリソース使用量を最大化するために、コンピュート クラスター内のドライバーとエグゼキューターのすべての設定を自動的に構成します。エグゼキューターまたは JVM にカスタム構成を提供すると、パフォーマンスが低下する可能性があります。Databricks では、ロジックの一貫性を維持するために、型の処理または関数を制御するために必要な Spark 構成のみを設定することをお勧めします。

ワークロードを実行する

上記変更で Databricks の実行を妨げる可能性のあるパターン、コマンド、設定を削除したので、テスト環境でワークロードを実行し、パフォーマンスと結果をレガシ インフラストラクチャと比較できます。Apache Spark ワークロードのトラブルシューティングとパフォーマンスの向上のためにチームが開発したスキルの多くは、Databricks でも活用できますが、多くの場合、Apache Spark、Delta Lake、またはカスタム Databricks 製品の新機能を使用するようにステップをアップグレードすることで、より大きなメリットが得られます。