次の方法で共有


Fabric 向けの Apache Spark における高コンカレンシーモード

コンカレンシー モードが高い場合、互換性のある Spark ワークロードは、ワークロードごとに個別のセッションを開始するのではなく、実行中の 1 つの Spark セッションを共有できます。 このモードは、Fabric のノートブックとパイプラインのシナリオでよく使用されます。

この記事は、次の内容を理解するのに役立ちます。

  • 高コンカレンシー モードとは何か、どのような場合に使用するか。
  • セッション共有の要件。
  • 共有セッションの課金のしくみ。

標準モードでは、各ノートブックまたはパイプライン アクティビティが独自の Spark セッションを開始します。 高コンカレンシー モードでは、1 つの Spark アプリケーションが、各ワークロードに独自の読み取り/eval-print ループ (REPL) コアを割り当てることで、複数のワークロードをホストします。 各 REPL コアは実行状態を分離するため、あるワークロードのローカル変数は別のワークロードの変数を上書きしません。

共有セッションは既に実行されているため、後続のワークロードははるかに高速に開始できます。

注記

コンカレンシー モードが高いカスタム プールの場合、セッションの開始は標準の Spark セッションよりも最大 36 倍速くなる可能性があります。

主な機能

この図では、高コンカレンシー モードの 3 つの主要な特性を示します。

  • セキュリティ: セッション共有は、シングル ユーザーの境界内に留まります。
  • マルチタスク: ノートブックを切り替えて、新しい Spark セッションが作成または初期化されるのを待たずに作業を続行できます。
  • コスト効率: 共有セッションにより、リソース使用率が向上し、データ エンジニアリングおよびデータ サイエンス ワークロードのコンピューティング コストが削減されます。

Fabric での高コンカレンシー モードの動作を示す図。

セッション共有の要件

セッション共有は、次の条件が満たされたときに適用されます。

  • セッションは、シングル ユーザーの境界内にあります。
  • セッションでは、同じ既定の Lakehouse 構成が使用されます。
  • セッションでは、同じ Spark コンピューティング設定が使用されます。

要件が異なる場合、Fabric は別の Spark セッションを開始します。

セッションの初期化中に、ファブリックによって REPL コアが作成されます。 新しいワークロードが共有セッションに参加すると、これらの REPL コア間で FAIR スケジューリングを使用して Executor が割り当てられ、不足リスクが軽減されます。

課金の動作

高コンカレンシー モードを使用する場合、共有 Spark アプリケーションを開始する開始ノートブックまたはパイプライン アクティビティのみが課金されます。 同じ Spark セッションを共有する後続のセッションでは、個別の課金は発生しません。

  • ユーザーが Notebook 1 を起動すると、高コンカレンシー モードで Spark セッションが開始されます。
  • その後、 ノートブック 2、ノートブック3、ノートブック4、ノートブック 5 で同じセッションが共有されます。
  • この場合、Spark コンピューティングには Notebook 1 のみが課金されます。
  • 共有ノートブック (2 から 5) は個別に課金されません。

この動作は、開始ノートブックに対して使用状況が報告される 容量メトリックにも反映されます。

注記

パイプライン アクティビティにも同じ課金動作が適用されます。 Spark セッションを開始するノートブックまたはアクティビティのみが課金されます。

動的セッション共有の制限

既定では、コンカレンシーの高いセッションでは、同じ Spark セッションを共有する最大 5 つのノートブックがサポートされます。 大規模な並列パイプラインやピーク時のエンタープライズ分析など、より高いノートブック密度を必要とするワークロードの場合、この制限をセッションあたり最大 50 個まで増やすことができます。

注記

この更新プログラムでは、既定の制限である 5 つは変更されません。 spark.highConcurrency.maxを明示的に設定して増やす必要があります。

セッション共有の制限を構成する

ノートブックまたはパイプラインによってトリガーされるノートブックが使用する [環境 ] 項目でセッション共有の制限を設定します。

  1. ワークスペースに移動し、[ 環境] を開きます。

  2. ノートブックまたはパイプラインにアタッチされている環境を選択します。

  3. Spark プロパティを開きます。

  4. 次のプロパティを追加し、 2 ~ 50 の値を設定します。

    spark.highConcurrency.max = <value>
    

    たとえば、セッションあたり最大 20 個のノートブックを許可するには、次のようにします。

    spark.highConcurrency.max = 20
    
  5. 環境を保存して公開します。

この環境を使用するすべてのノートブックとパイプライン アクティビティは、更新された制限を自動的に継承します。

セッション共有の制限を増やすタイミング

シナリオ 推奨されるアクション
多くのノートブック アクティビティを含む大規模な並列パイプライン セッションの断片化を減らすために spark.highConcurrency.max を増やす
多数の同時実行ユーザーが含まれるインタラクティブなワークロードのピーク負荷 セッションの取得時間を短縮するために制限を増やす
コスト重視のワークロードで、高密度パッキングによってコンピューティングの支出が削減される コンカレンシーの要件に合わせて制限を調整する
厳密な分離要件を持つワークロード 既定の制限である 5 以下のままにします

セッション共有の制限を増やすと、次のことが可能になります。

  • 新しいセッションの待機時間を短縮することで、ピーク時のセッション取得を高速化します。
  • 多数の個別のセッションに断片化することなく、ノートブックの密度を高めます
  • ワークロードの強度、コスト、および価格パフォーマンスの目標に合わせた動的チューニング
  • ジョブ間の分離と公平性を維持しながら、価格パフォーマンスの効率を向上させます。