Fabric Runtime 1.2 (GA)
Microsoft Fabric ランタイムは、Apache Spark に基づく Azure 統合プラットフォームであり、データ エンジニアリングとデータ サイエンスのエクスペリエンスの実行と管理を可能にします。 このドキュメントでは、Runtime 1.2 のコンポーネントとバージョンについて説明します。
Runtime 1.2 の主なコンポーネントは次のとおりです。
- Apache Spark 3.4.1
- オペレーティング システム: Mariner 2.0
- Java: 11
- Scala: 2.12.17
- Python: 3.10
- Delta Lake: 2.4.0
- R: 4.2.2
ヒント
運用環境のワークロードには常に最新の GA ランタイム バージョンを使用します。現在は Runtime 1.3 です。
Microsoft Fabric Runtime 1.2 には、完全な Anaconda インストールや Java/Scala、Python、R でよく使用されるライブラリなど、デフォルトレベル パッケージのコレクションが付属しています。これらのライブラリは、Microsoft Fabric プラットフォームでノートブックまたはジョブを使用する場合に自動的に含まれます。 ライブラリの完全な一覧については、ドキュメントを参照してください。 Microsoft Fabric は、Runtime 1.2 のメンテナンス更新プログラムを定期的にロールアウトし、バグ修正、パフォーマンスの強化、セキュリティ パッチを提供します。 最新の状態を維持することで、データ処理タスクに対する最適なパフォーマンスと信頼性が確保されます。
Spark リリース 3.4.1 の新機能と機能強化
Apache Spark 3.4.0 は、3.x 系列での 5 回目のリリースになります。 オープンソース コミュニティによって推進されるこのリリースでは、2,600 以上の Jira チケットが解決されました。 Spark Connect 用の Python クライアントが導入され、非同期の進行状況追跡と Python のステートフル処理によって構造化ストリーミングが強化されています。 NumPy 入力のサポートによって Pandas API の対象範囲が広がり、ANSI コンプライアンスと新規組み込み関数によって従来のデータ ウェアハウスからの移行が簡単になっています。 また、メモリ プロファイリングにより、開発の生産性とデバッグ性が向上しています。 さらに、Runtime 1.2 は、安定性の修正に重点を置いたメンテナンス リリースである Apache Spark 3.4.1 に基づいています。
主な注目点
Apache Spark の特定のバージョンに関するリリース ノートの完全なバージョンについては、Spark 3.4.0 と Spark 3.4.1 をご覧ください。
新規カスタム クエリ最適化
Spark での同時書き込みのサポート
SQL INSERT INTO クエリを使って同じテーブルへの並列データ挿入を実行したときに、404 エラーと"Operation failed: The specified path doesn't exist" (操作失敗: 指定したパスは存在しません) というメッセージが発生するのは、よくある問題です。 このエラーにより、データが失われる可能性があります。 ファイル出力コミッター アルゴリズムという新機能により、この問題は解決し、お客様は並列データ挿入をシームレスに実行できます。
この機能にアクセスするには、spark.sql.enable.concurrentWrites
機能フラグを有効にします。Runtime 1.2 (Spark 3.4) 以降では、このフラグはデフォルトで有効になります。 この機能は他の Spark 3 バージョンでも使用できますが、デフォルトで有効にはなりません。 この機能では、各同時実行ジョブが同じテーブルの異なるパーティションのデータを動的に上書きする INSERT OVERWRITE クエリの並列実行はサポートされません。 このために Spark で用意されている代替機能は、spark.sql.sources.partitionOverwriteMode
の設定を dynamic に構成することでアクティブにできます。
失敗したジョブからのファイルをスキップするスマート読み取り
現在の Spark コミッター システムでは、テーブルへの挿入ジョブが失敗しても、一部のタスクが成功すると、成功したタスクによって生成されたファイルが、失敗したジョブのファイルと共存します。 この共存により、成功したジョブと失敗したジョブに属するファイルを区別することが困難になるため、ユーザーが混乱する可能性があります。 さらに、あるジョブがテーブルからの読み取りを行っている間に、別のジョブが同じテーブルに同時にデータを挿入すると、読み取りジョブがコミットされていないデータにアクセスする可能性があります。 書き込みジョブが失敗した場合、読み取りジョブが正しくないデータを処理する可能性があります。
この問題に対処する新機能は、spark.sql.auto.cleanup.enabled
フラグによって制御されます。 有効にすると、Spark は、spark.read
を実行するとき、またはテーブルからクエリを選択するときに、コミットされていないファイルの読み取りを自動的にスキップします。 この機能を有効にする前に書き込まれたファイルは、引き続き通常どおり読み取られます。
見た目には次のような点が変わります。
- すべてのファイルのファイル名に、
tid-{jobID}
識別子が含まれるようになります。 - ジョブの正常完了時に出力場所に通常作成される
_success
マーカーの代わりに、新規_committed_{jobID}
マーカーが生成されます。 このマーカーは、成功したジョブの ID と特定のファイル名を関連付けます。 - ストレージを管理し、コミットされていないファイルをクリーンアップするためにユーザーが定期的に実行できる、新規 SQL コマンドが導入されました。 このコマンドの構文は次のとおりです。
- 特定のディレクトリをクリーンアップする:
CLEANUP ('/path/to/dir') [RETAIN number HOURS];
- 特定のテーブルをクリーンアップする:
CLEANUP [db_name.]table_name [RETAIN number HOURS];
この構文で、path/to/dir
はクリーンアップが必要な場所の URI を表し、number
は保持期間を表す double 型の値です。 デフォルトの保持期間は 7 日間に設定されます。
- 特定のディレクトリをクリーンアップする:
spark.sql.deleteUncommittedFilesWhileListing
という新規構成オプションが導入されました。このオプションはデフォルトでfalse
に設定されます。 このオプションを有効にすると、コミットされていないファイルは読み取りの間に自動的に削除されますが、このシナリオでは読み取り操作が遅くなる可能性があります。 このフラグを有効にするのではなく、クラスターがアイドル状態のときにクリーンアップ コマンドを手動で実行することをお勧めします。
Runtime 1.1 から Runtime 1.2 への移行ガイド
Apache Spark 3.3 搭載の Runtime 1.1 を Apache Spark 3.4 搭載の Runtime 1.2 に移行するときは、公式の移行ガイドを確認してください。
Delta Lake 2.4 の新機能と機能強化
Delta Lake は、データ レイクの上にLakehouse アーキテクチャを構築できるようにするオープンソース プロジェクトです。 Delta Lake は、ACID トランザクションとスケーラブルなメタデータ処理を提供し、既存のデータ レイク上のストリーミングとバッチ データ処理を統合します。
具体的には、Delta Lake は次の機能を提供します。
- Spark での ACID トランザクション: Serializable 分離レベルでは、リーダーが不整合なデータを表示しないようにします。
- スケーラブルなメタデータ処理: Spark の分散処理能力を使って、ペタバイト規模のテーブルと数十億のファイルのすべてのメタデータを簡単に処理します。
- ストリーミングとバッチの統合: Delta Lake 内のテーブルは、バッチ テーブルであり、ストリーミングのソースとシンクです。 ストリーミング データの取り込み、バッチ履歴バックフィル、対話型クエリは、すべてすぐに機能します。
- スキーマの適用: 取り込み中に無効なレコードが挿入されないように、スキーマのバリエーションを自動的に処理します。
- タイム トラベル: データのバージョン管理により、ロールバック、完全な履歴監査証跡、および再現可能な機械学習の実験が可能になります。
- アップサートと削除: マージ、更新、削除操作をサポートし、変更データ キャプチャ、ゆっくり変化するディメンション (SCD) の操作、ストリーミング アップサートなどの複雑なユース ケースを可能にします。
Delta Lake 2.4 のリリース ノートの完全なバージョンをご覧ください。
Java、Scala、Python ライブラリのデフォルトレベル パッケージ
Java、Scala、Python、およびそれぞれのバージョンのすべてのデフォルトのレベル パッケージの一覧については、「リリース ノート」を参照してください。