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 で [新しい設定を強制] が有効になっている場合、または PowerShell で ForceApplySetting
が有効になっている場合、すべての既存の Spark セッションは終了し、構成の変更が直ちに適用されます。 このオプションが選択されていない場合、構成は新しい Spark セッションに適用され、既存のセッションは終了しません。
はじめに
自動スケーリングでサーバーレス Apache Spark プールを作成する
自動スケーリング機能を有効にするには、通常のプールの作成プロセスの一部として、次の手順を行います。
[基本] タブで、 [自動スケーリングの有効化] チェック ボックスをオンにします。
次のプロパティに希望する値を入力します。
- ノードの最小数。
- ノードの最大数。
ノードの初期数は最小値になります。 この値によって、インスタンスが作成されるときのその初期サイズが定義されます。 ノードの最小数を 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 プールの作成に関するクイック スタート)