FabricにおけるApache Sparkランタイム

Microsoft Fabric Runtime は、Apache Spark に基づく Azure 統合プラットフォームであり、データ エンジニアリングとデータ サイエンスのエクスペリエンスの実行と管理を可能にします。 内部ソースとオープンソースの両方の主要コンポーネントを組み合わせ、包括的なソリューションを顧客に提供します。 簡単のため、Apache Spark搭載のMicrosoft Fabric RuntimeをFabric Runtimeと呼びます。

Fabric Runtime の主なコンポーネントは以下のとおりです。

  • Apache Spark - 大規模なデータ処理と分析タスクを可能にする強力なオープンソースの分散コンピューティング ライブラリです。 Apache Spark は、データ エンジニアリングとデータ サイエンスのエクスペリエンスに適した、汎用的で高パフォーマンスのプラットフォームを提供します。

  • Delta Lake - ACID トランザクションやその他のデータ信頼性機能を Apache Spark に提供するオープンソースのストレージ レイヤー。 Fabric Runtime 内に統合された Delta Lake は、データ処理機能を強化し、複数の同時実行操作間でデータの一貫性を確保します。

  • Native Execution Engine - Apache Sparkワークロードの変革的な強化であり、レイクハウスインフラ上で直接Sparkクエリを実行することで大幅なパフォーマンス向上を提供します。 シームレスに統合されており、コード変更が不要で、ベンダーによるロックインも回避できます。 Runtime 1.3(Spark 3.5)および Runtime 2.0(Spark 4.1)では、Apache Spark の各 API で Parquet 形式と Delta 形式の両方をサポートしています。

    サポートされる演算子は、JVM ベースの Spark から Apache Gluten と Velox を介してベクター化された C++ 実行パスにオフロードされ、Parquet 形式と Delta 形式をネイティブにサポートする列形式の SIMD 高速処理が提供されます。 オペレーターがサポートされていない場合、実行は JVM ベースの Spark に自動的にフォールバックします。 代表的なベンチマーク (Delta を使用してスケール ファクター 1000 でTPC-DS) では、エンジンはオープンソースの Spark と比較して最大 6 倍のパフォーマンスを実現し、固定サイズの Fabric クラスターで約 83% のコンピューティング コスト削減に変換しました。

    ネイティブ パスでは、アダプティブ クエリの実行、コストベースの書き換え、列の排除、述語のプッシュダウンなど、Fabric Spark クエリの最適化が保持されます。 spark.native.enabled設定を使うことで、アプリケーションごとのネイティブ実行を切り替えることができます。 ノートブック セルの実行中、Fabric Spark Advisor は、実行が JVM ベースの Spark にフォールバックしたときにリアルタイムアラートを表示し、ネイティブ オフロードが適用されていない場合の診断に役立ちます。

  • デフォルトレベルの Java/Scala、Python、R 用のパッケージ - さまざまなプログラミング言語と環境をサポートするパッケージ。 これらのパッケージは自動的にインストールおよび構成されるため、開発者はデータ処理タスクに好みのプログラミング言語を適用できます。

  • Microsoft Fabric Runtime は堅牢なオープンソース オペレーティング システムに基づいて構築されているので、さまざまなハードウェア構成やシステム要件との互換性が確保されます。

以下の表では、Microsoft Fabricプラットフォーム内のApache SparkベースのランタイムにおけるApache Sparkバージョン、サポートされているオペレーティングシステム、Java、Scala、Python、Delta Lake、Rなどの主要コンポーネントの包括的な比較を示しています。

ヒント

運用環境のワークロード (現在は Runtime 1.3) には、最新の一般公開 (GA) ランタイム バージョンを常に使用します。

コンポーネント ランタイム 1.3 ランタイム 2.0
リリース ステージ GA パブリック プレビュー
Apache Spark のバージョン 3.5.5 4.1
オペレーティング システム マリナー 2.0 マリナー 3.0
Java バージョン 11 21 (二十一)
Scala バージョン 2.12.17 2.13.16
Python のバージョン 3.11 3.13
Delta Lake バージョン 3.2 4.2

ランタイム 1.3 またはランタイム 2.0 にアクセスして、特定のランタイム バージョンの詳細、新機能、機能強化、および移行シナリオを確認してください。

Fabric の最適化

Microsoft Fabric では、Spark エンジンと Delta Lake の両方の実装にプラットフォーム固有の最適化と機能が組み込まれています。 これらの機能はプラットフォーム内のネイティブ統合を利用しています。 これらの機能を無効にすれば、標準のSparkやDelta Lakeの機能を実現できます。 Apache Spark 用 Fabric Runtime には、以下が含まれます。

  • Apache Spark の完全なオープンソース バージョン。
  • 約 100 個の組み込みの、異なるクエリ パフォーマンス改善のコレクション。 これらの機能強化には、パーティション キャッシュ (FileSystem パーティション キャッシュを有効にしてメタストアの呼び出しを減らす) や、スカラー サブクエリのプロジェクションへのクロス結合などの機能があります。
  • 組み込みのインテリジェント キャッシュ。

Apache SparkおよびDelta LakeのFabric Runtimeにおいて、ネイティブライター機能は主に2つの目的を果たします。

  • これらは書き込みワークロードに対して差別化されたパフォーマンスを提供し、書き込みプロセスを最適化します。
  • デフォルトでは、Delta Parquet ファイルの V オーダー最適化が行われます。 Delta Lake の V オーダーの最適化は、すべての Fabric エンジンで優れた読み取りパフォーマンスを実現するために不可欠です。 その仕組みや管理方法をより深く理解するには、 デルタレイクのテーブル最適化とV-Orderをご覧ください。

複数のランタイムのサポート

Fabricは複数のランタイムをサポートしているため、それらを切り替えて互換性の問題や障害のリスクを減らすことができます。

Note

Sparkランタイムには、コンポーネントセットの一部として特定のPythonバージョンが含まれています。 例えば、Runtime 1.3にはPython 3.11が含まれています。 このPythonバージョンは、純粋なPythonノートブック用に選択するPythonノートブックのカーネルとは別です。 Pythonノートブックのカーネルライフサイクルについては、PythonノートブックのランタイムおよびFabricのカーネルライフサイクルを参照してください。

既定では、すべての新しいワークスペースで最新の GA ランタイム バージョン (現在は Runtime 1.3) が使用されます。

ワークスペース レベルでランタイム バージョンを変更するには、Data Engineering/ScienceSpark の設定ワークスペースの設定 に移動します。 [環境] タブで、使用可能なオプションから目的のランタイム バージョンを選択します。 [保存] を選択して、選択内容を確認します。

ワークスペース設定のランタイム バージョンを選択する場所を示すスクリーンショット。

この変更を行うと、Lakehouse、SJD、Notebookを含むワークスペース内のシステム作成のすべてのアイテムは、次のSparkセッションから新たに選択したワークスペースレベルのランタイムバージョンを使用します。 もし現在、仕事や湖畔の活動のために既存のセッションをノートで使っているなら、そのSparkセッションはそのまま継続されます。 しかし、次のセッションやジョブからは選択したランタイムバージョンが適用されます。

Environmentアイテムレベルでランタイムを変更するには、新しい環境アイテムを作成するか、既存のものを開いてください。 Runtimeドロップダウンから、利用可能なオプションから希望するランタイムバージョンを選択し、Saveを選択し、変更をPublishします。 次に、EnvironmentまたはNotebookでこのSpark Job Definition項目を使用できます。

[環境] 項目のランタイム バージョンを選択する場所を示すスクリーンショット。

Spark 設定でのランタイム変更の結果

システムはすべてのSpark設定を移行します。 しかし、システムがSparkの設定がRuntime Bと互換性がないと認識すると警告メッセージが表示され、設定は実装されません。

Spark 設定ランタイムの変更。

ランタイムの変更がライブラリ管理に及ぼす影響

ライブラリ管理システムは、公開ランタイムとカスタムランタイムの両方を含むすべてのライブラリをランタイムAからランタイムBへ移行します。 PythonとRのバージョンが同じままであれば、ライブラリは正常に動作します。 しかしJARの場合、依存関係の変更やScala、Java、Spark、OSの変更など他の要因により動作しない可能性が高いです。

Runtime Bに対応しないライブラリの更新や置き換えはあなたが担当します。もし競合が発生し、ランタイムBに元々Runtime Aで定義されたライブラリが含まれている場合、ライブラリ管理システムは設定に基づいて必要な依存関係をRuntime Bに作成しようとします。 ただし、競合が発生した場合、ビルド プロセスは失敗します。 エラーログでは、どのライブラリが競合を引き起こしているか、バージョンや仕様の調整ができます。

ライブラリ管理ランタイムの変更。

Delta Lake プロトコルをアップグレードする

デルタレイクの機能は常に後方互換性があり、低位のデルタレイクで作成されたテーブルが上位のバージョンとシームレスに連携できるようにします。 しかし、特定の機能を有効にすると(例えば delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) メソッドを使うなど)、低位のデルタレイク版との前向き互換性が損なわれる可能性があります。 そのような場合、アップグレードされたテーブルを参照するワークロードを、互換性を維持するDelta Lakeバージョンに合わせて調整する必要があります。

各デルタテーブルはプロトコル仕様に対応しており、サポートする機能を定義しています。 読み取りまたは書き込みのためにテーブルと対話するアプリケーションは、このプロトコル仕様に依存して、テーブルの機能セットと互換性があるかどうかを判断します。 もしアプリケーションがテーブルのプロトコルでサポートされている機能を処理する能力を欠いている場合、そのテーブルから読み書きすることができません。

プロトコル仕様は、"読み取り" プロトコルと "書き込み" プロトコルの 2 つの異なるコンポーネントに分かれています。 詳細については、「 デルタレイクがどのように機能互換性を管理するか?」をご覧ください。

upgradeTableProtocol メソッドが使用されたときに即時に警告を示す GIF。

コマンドはPySpark環境やSpark SQLやScalaで実行 delta.upgradeTableProtocol(minReaderVersion, minWriterVersion) できます。 このコマンドはDeltaテーブルの更新を開始します。

このアップグレードを行うと、デルタプロトコルのバージョンのアップグレードは不可逆的なプロセスであるという警告が表示されます。 このプロセスにより、一度アップデートを実行すると元に戻せなくなります。

プロトコル バージョンのアップグレードは、既存の Delta Lake テーブル リーダー、ライター、またはその両方の互換性に影響する可能性があります。 したがって、慎重に進め、Delta Lakeの新機能を導入する際など必要な場合にのみプロトコルバージョンをアップグレードしてください。

Important

すべてのMicrosoft Fabric体験で互換性のあるプロトコルバージョンや機能については、Delta Lakeのテーブル形式相互運用性をご覧ください。

デルタ レイク プロトコルをアップグレードするときの警告を示すスクリーンショット。

さらに、現在および将来のすべての本番ワークロードやプロセスが新しいプロトコルバージョンを用いるDelta Lakeテーブルと互換性があるかを確認し、スムーズな移行を確保し、潜在的な中断を防ぎましょう。