Azure Synapse Analytics Apache Spark プールの自動スケーリング

Apache Spark for Azure Synapse Analytics プールの自動スケーリング機能は、クラスター インスタンス内のノード数を自動的に増減する機能です。 新しい Apache Spark for Azure Synapse Analytics プールを作成する際には、自動スケーリングが選択されている場合の、ノードの最小数と最大数 (最大 200 ノード) を設定できます。 その後、自動スケーリングによって負荷のリソース要件が監視され、ノードの数がスケールアップまたはスケールダウンされます。 この機能に対して追加料金は発生しません。

メトリックの監視

自動スケーリングは Spark インスタンスを継続的に監視し、次のメトリックを収集します。

メトリック 説明
保留中の CPU の合計 保留中の全ジョブを実行するために必要なコアの総数。
保留中のメモリの合計 保留中の全ジョブを実行するために必要なメモリの合計 (MB 単位)。
空き CPU の合計 アクティブなノード上のすべての未使用のコアの合計。
空きメモリの合計 アクティブなノード上の未使用のメモリの合計 (MB 単位)。
ノードごとの使用済みメモリ ノードに対する負荷。 10 GB のメモリが使用されているノードは、使用済みメモリが 2 GB のワーカーより多くの負荷がかかっていると見なされます。

上のメトリックは 30 秒ごとにチェックされます。 自動スケーリングでは、これらのメトリックに基づいてスケールアップおよびスケールダウンの決定が行われます。

負荷ベースのスケール条件

次の条件が検出されると、自動スケーリングによりスケーリング要求が発行されます。

スケールアップ スケールダウン
保留中の CPU の合計が空き CPU の合計を超えて 1 分以上が経過した。 保留中の CPU の合計が空き CPU の合計を下回って 2 分以上が経過した。
保留中のメモリの合計が空きメモリの合計を超えて 1 分以上が経過した。 保留中のメモリの合計が空きメモリの合計を下回って 2 分以上が経過した。

スケールアップの場合、Azure Synapse Autoscale サービスによって、現在の CPU とメモリの要件を満たすために必要な新しいノードの数が計算された後、必要な数のノードを追加するスケールアップ要求が発行されます。

スケールダウンの場合、Executor の数、ノードごとのアプリケーション マスター数、現在の CPU とメモリの要件に基づき、自動スケーリングにより、特定の数のノードを削除する要求が発行されます。 また、サービスでは、現在のジョブの実行に基づいて、削除候補のノードも検出されます。 スケールダウン操作では、最初にノードの使用が停止された後、クラスターから削除されます。

注意

既存の Spark プールへの自動スケーリング構成の更新と強制適用に関するメモ。 Azure portal で [新しい設定を強制] が有効になっている場合、または PowerShellForceApplySetting が有効になっている場合、すべての既存の Spark セッションは終了し、構成の変更が直ちに適用されます。 このオプションが選択されていない場合、構成は新しい Spark セッションに適用され、既存のセッションは終了しません。

はじめに

自動スケーリングでサーバーレス Apache Spark プールを作成する

自動スケーリング機能を有効にするには、通常のプールの作成プロセスの一部として、次の手順を行います。

  1. [基本] タブで、 [自動スケーリングの有効化] チェック ボックスをオンにします。

  2. 次のプロパティに希望する値を入力します。

    • ノードの最小数。
    • ノードの最大数。

ノードの初期数は最小値になります。 この値によって、インスタンスが作成されるときのその初期サイズが定義されます。 ノードの最小数を 3 より小さくすることはできません。

Spark ジョブのステージ間で Executor の要件が大きく異なるシナリオや、処理されるデータ量が時間と共に変動するシナリオでは、必要に応じて、Executor の動的割り当てを有効にできます。 Executor の動的割り当てを有効にすることで、必要に応じてキャパシティを活用することができます。

動的割り当てを有効にすると、ジョブで、指定した Executor の最小および最大数の範囲内で Executor の数をスケールできるようになります。

Apache Spark では、次のコードを使用して、Executor の動的割り当てを構成できます。

    %%configure -f
    {
        "conf" : {
            "spark.dynamicAllocation.maxExecutors" : "6",
            "spark.dynamicAllocation.enabled": "true",
            "spark.dynamicAllocation.minExecutors": "2"
     }
    }

コードで指定した既定値の方が、ユーザー インターフェイスで設定した値よりも優先されます。

この例では、ジョブに必要な Executor が 2 つのみの場合は、2 つの Executor のみを使用します。 ジョブにさらに必要な場合は、6 つの Executor (1 つドライバー、6 つの Executor) にスケールアップされます。 ジョブに Executor が必要ない場合は、Executor の使用を停止します。 ノードが必要ない場合は、ノードが解放されます。

注意

maxExecutors は、構成された Executor の数を予約します。 この例について考えた場合、2 しか使用しない場合でも 6 を予約します。

したがって、動的割り当てを有効にすると、Executor が、その使用率に応じてスケールアップまたはスケールダウンされます。 これにより、実行中のジョブのニーズに従って Executor を確実にプロビジョニングできるようになります。

ベスト プラクティス

スケールアップ操作またはスケールダウン操作の待ち時間について検討する

スケーリング操作が完了するまでに、1 分から 5 分かかる場合があります。

スケール ダウンを準備する

インスタンスのスケール ダウン処理中には、自動スケーリングによってノードが使用停止状態にされるため、そのノードでは新しい Executor を起動できなくなります。

実行中のジョブは引き続き実行されて終了します。 保留中のジョブは、少ない数の使用可能ノードで通常どおりにスケジュールされるのを待ちます。

Note

既定では、spark.yarn.executor.decommission.enabled は true に設定され、使用率の低いノードの自動シャットダウンを有効にしてコンピューティング効率を最適化します。 あまり積極的なスケールダウンが推奨されていない場合は、この構成を false に設定できます。

次のステップ

新しい Spark プールを設定する (Spark プールの作成に関するクイック スタート)