Microsoft FabricのEfficient Scaledown変更点|Sparkジョブへの影響と確認ポイント

Microsoft FabricでSparkジョブを運用している場合、「More resilient Spark jobs with Efficient Scaledown」は、シャッフルが多いジョブのコスト・失敗率・実行時間のばらつきに関わる重要な更新です。結論から言うと、既存のNotebookやパイプラインを書き換える変更ではありませんが、Native Execution Engineの有効化、Spark Runtime、Autoscale、キャッシュ利用、Private Link環境は早めに確認する必要があります。公式ソース上の分類はNoticeで、破壊的変更というより「プレビュー機能として利用条件と効果を確認すべき更新」と捉えるのが実務的です。

目次

More resilient Spark jobs with Efficient Scaledown は何が変わった?影響範囲と確認ポイント

「More resilient Spark jobs with Efficient Scaledown」は、Microsoft Fabric Sparkで大規模なデータエンジニアリング処理を行う際に、SparkのシャッフルデータをExecutorのローカルディスクに強く依存させないようにする仕組みです。Microsoft Fabric Blogでは、この機能により、クエリ、Notebook、パイプラインを変更せずに、クラスターのスケールダウン、耐障害性、コンピュートコストの改善を狙えると説明されています。([Microsoft Fabric Community][1])

Sparkでは、集計、JOIN、並べ替え、ウィンドウ関数などでデータの再分配が発生します。これがシャッフルです。従来はシャッフルデータがExecutorのローカルディスクに残るため、そのデータを下流処理が読み終えるまでExecutorを解放しづらく、Autoscaleが効きにくい原因になります。Executorが失われるとFetchFailedExceptionやステージ再実行につながることもあります。([Microsoft Fabric Community][1])

Efficient Scaledownは、この問題に対して、シャッフルデータをAzure Blob Storageへ書き出したり、Executor終了前に移行したりすることで、Executorの寿命とシャッフルデータの寿命を切り離します。これにより、アイドル状態のExecutorをより早く解放し、ジョブの再実行や無駄なコンピュート消費を減らす狙いがあります。(Microsoft Learn)

変更点の要点

確認項目内容実務上の意味
対象機能Efficient Scaledown Preview本番適用前に検証環境で確認する
主な対象Microsoft Fabric Sparkのデータエンジニアリング、データサイエンス workloadsLakehouse、Notebook、Spark Job Definition利用者は確認対象
変更の中心シャッフルデータをExecutorローカルから切り離すAutoscale時の無駄なExecutor保持を減らせる可能性
コード変更クエリ、Notebook、パイプラインの変更は不要とされる設定確認が主作業になる
前提条件Native Execution Engine、Apache Spark 3.5相当以降などRuntimeや環境設定の確認が必要
注意点Private Link非対応、HNS有効ストレージ非対応などの制限ありネットワーク・ストレージ構成によって使えない場合がある

Efficient Scaledownは、単一の設定だけで成立する機能ではありません。Remote Shuffle Manager、Shuffle Migration、Decision Layer、AQE Shuffle Writeといった複数の仕組みを組み合わせて、シャッフルデータの配置とスケールダウンを制御します。Microsoft Learnでは、Remote Shuffle ManagerがAzure Blob Storageへシャッフルデータを読み書きし、Decision Layerが小さなシャッフルはローカル、大きなシャッフルはリモートへ振り分けると説明されています。(Microsoft Learn)

影響を受けやすい利用者

特に確認すべきなのは、Fabric Sparkで次のような処理を運用しているチームです。

  • 大量データのJOIN、GROUP BY、ORDER BYを含むETLジョブがある
  • Sparkジョブの実行時間が日によって大きくぶれる
  • FetchFailedExceptionやステージ再実行が発生することがある
  • Autoscaleを有効にしているのに、期待ほどコストが下がらない
  • NotebookやSpark Job Definitionを定期実行している
  • Executorのアイドル時間やVM分の消費が気になっている

一方で、小規模なNotebook実行、短時間の検証、シャッフルがほとんど発生しない単純な読み書き処理では、効果が見えにくい可能性があります。特に、コスト削減だけを期待して全ジョブに一律適用するのではなく、シャッフル量が多いジョブから検証するのが現実的です。

すぐ確認したい設定

Efficient Scaledownを使うには、Native Execution Engineが必要です。Microsoft Learnでは、Native Execution EngineはFabric Data Engineering向けの実行エンジンで、Runtime 1.3、つまりApache Spark 3.5相当、およびRuntime 2.0に対応すると説明されています。(Microsoft Learn)

Notebookで試す場合は、次のようなSpark設定を確認します。すでに環境、ワークスペース、Spark Job Definition側で設定している場合は、Notebook内で重複設定しないようにしてください。

# Remote Shuffle Manager
spark.conf.set("spark.remote.shuffle.enabled", "true")

# Decision Layer:ステージ単位でローカル/リモートのシャッフルを判断
spark.conf.set("spark.sql.rsm.decisionlayer.enabled.level", "stage")

# AQE Shuffle Write
spark.conf.set("spark.sql.adaptive.shuffleWrite.enabled", "true")

# Executor終了時のシャッフルブロック移行
spark.conf.set("spark.storage.decommission.shuffleBlocks.enabled", "true")
spark.conf.set("spark.storage.decommission.shuffleBlocks.migrateToFallbackStorage", "true")

# Delta snapshot cacheがスケールダウンを妨げないようにする
spark.conf.set("spark.dynamicAllocation.excludeDeltaSnapshotCache", "true")

Microsoft Learnの推奨構成では、シャッフルブロックやFallback Storageのクリーンアップに関する設定も示されています。ストレージコストを抑える観点では、移行だけでなく削除・クリーンアップの設定も合わせて確認した方が安全です。(Microsoft Learn)

管理者が確認すべきチェックリスト

確認ポイント見るべき場所判断の目安
Native Execution Engineが有効かFabric環境のAcceleration設定、またはSpark設定無効ならEfficient Scaledownの前提を満たさない
Runtimeが対応しているかEnvironment、Notebook、Spark Job DefinitionApache Spark 3.5相当以降か確認
Autoscaleを使っているかSpark compute設定有効ならスケールダウン効果を確認しやすい
Private Link環境かネットワーク構成現時点の制限に該当する可能性がある
シャッフルが多いジョブかSpark UI、実行履歴、失敗ログJOIN、集計、ソートが多いジョブを優先検証
cache()やpersist()を多用しているかNotebook、ジョブコードExecutor解放でキャッシュ前提の性能が変わる可能性
コスト評価の基準があるかCapacity Metrics、ジョブ履歴適用前後でVM分、実行時間、失敗回数を比較する

特に注意したいのはキャッシュです。Microsoft Learnでは、Efficient Scaledownの制限として、preventShutdownExecutorWithCache=falseにより、キャッシュを保持しているExecutorがスケールダウンされる可能性があると説明されています。cache()やpersist()を性能改善の前提にしているNotebookでは、ジョブが失敗しなくても実行時間の傾向が変わる可能性があります。(Microsoft Learn)

運用で失敗しやすいポイント

コスト削減率をそのまま自社環境に当てはめない

Microsoft Fabric Blogでは、TPC-DSベンチマークでコンピュート削減が示されていますが、実際の効果はデータ量、シャッフル量、Autoscale設定、ジョブ間隔、Runtime、キャッシュ利用によって変わります。ベンチマーク値をそのまま社内説明に使うのではなく、自社の代表的なSparkジョブで適用前後を比較することが重要です。([Microsoft Fabric Community][1])

Preview機能を本番に一気に広げない

今回の更新はPreviewです。すぐに全ワークスペースへ展開するより、失敗時の影響が限定できるジョブから試すべきです。まずは、日次バッチや再実行可能なETLなど、検証しやすい処理を選びます。比較する指標は、実行時間だけでなく、リトライ回数、FetchFailedExceptionの発生状況、VM分、ストレージI/O、ジョブ成功率まで含めると判断しやすくなります。

Private Linkやストレージ制限を見落とさない

Microsoft Learnでは、Efficient Scaledownの制限として、Native Execution Engineが必要であること、Remote Shuffle StoreとしてAzure Blob Storageを使うこと、HNS有効のAzure Data Lake Gen2やAzure Private Link環境は現在サポート対象外であることが示されています。ネットワーク分離を強めている環境ほど、先に制限事項を確認してください。(Microsoft Learn)

まず行うべき実務対応

Microsoft Fabric利用者は、次の順で確認すると無駄がありません。

優先度対応目的
高シャッフルが多く失敗しやすいSparkジョブを洗い出す効果が出やすい対象を選ぶ
高Native Execution EngineとRuntimeを確認する前提条件を満たすか判断する
高Private Link、HNS有効ストレージ、キャッシュ利用を確認する制限や副作用を避ける
中検証用NotebookまたはSpark Job Definitionで設定を試す本番前に動作と性能を確認する
中適用前後のVM分、実行時間、失敗回数を比較するコスト削減と安定性を数値で判断する
低効果が確認できたジョブから標準設定化するチーム内の運用ルールに落とし込む

今回の「More resilient Spark jobs with Efficient Scaledown」は、Sparkコードの書き換えよりも、Fabric Spark環境の運用設計に関わる更新です。特に、シャッフルの多い大規模ETLや定期バッチでは、Autoscaleの効き方、ジョブ失敗時の再実行、コンピュートコストに影響する可能性があります。まずは対象ジョブを絞り、Native Execution Engine、Runtime、ネットワーク制限、キャッシュ利用を確認したうえで、検証環境で適用前後の差を測定してください。
[1]: https://community.fabric.microsoft.com/t5/Fabric-Updates-Blog/More-resilient-Spark-jobs-with-Efficient-Scaledown-Preview/ba-p/5212071 “
More resilient Spark jobs with Efficient Scaledown… – Microsoft Fabric Community
“

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次