Apache Spark for Azure Synapse Analytics プールの自動スケール機能により、クラスター インスタンス内のノードの数が自動的にスケールアップおよびスケールダウンされます。 新しい Apache Spark for Azure Synapse Analytics プールの作成時に、自動スケールを選択すると、ノードの最小数と最大数 (最大 200 ノード) を設定できます。 その後、自動スケーリングによって負荷のリソース要件が監視され、ノードの数がスケールアップまたはスケールダウンされます。 この機能に追加料金はかかりません。
メトリックの監視
自動スケーリングは Spark インスタンスを継続的に監視し、次のメトリックを収集します。
| メトリック | Description |
|---|---|
| 保留中の CPU の合計 | 保留中のすべてのジョブの実行を開始するために必要なコアの合計数。 |
| 保留中のメモリの合計 | 保留中のすべてのジョブの実行を開始するために必要なメモリの合計 (MB 単位)。 |
| 空き CPU の合計 | アクティブなノード上のすべての未使用のコアの合計。 |
| 空きメモリの合計 | アクティブなノード上の未使用のメモリの合計 (MB 単位)。 |
| ノードごとの使用済みメモリ | ノードに対する負荷。 10 GB のメモリが使用されているノードは、使用済みメモリが 2 GB のワーカーより多くの負荷がかかっていると見なされます。 |
上記のメトリックは、30 秒ごとにチェックされます。 自動スケールでは、これらのメトリックに基づいてスケールアップとスケールダウンの決定が行われます。
負荷ベースのスケール条件
次の条件が検出されると、Autoscaleがスケールリクエストを発行します。
| スケールアップ | スケールダウン |
|---|---|
| 保留中の 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"
}
}
コードによって指定された既定値は、ユーザー インターフェイスによって設定された値をオーバーライドします。
この例では、ジョブで 2 つの Executor のみが必要な場合、2 つの Executor のみを使用します。 ジョブにさらに多くが必要な場合は、最大 6 つの Executor (1 つのドライバー、6 つの Executor) にスケールアップされます。 ジョブが Executor を必要としなくなった場合、ジョブはその Executor を使用停止にします。 ノードが不要な場合は、ノードが解放されます。
注
maxExecutors は、構成された Executor の数を予約します。 この例を考えると、2 つだけを使用する場合でも、6 を確保します。
そのため、動的割り当てを有効にすると、Executor は Executor の使用率に基づいてスケールアップまたはスケールダウンされます。 これにより、実行するジョブのニーズに従って Executor がプロビジョニングされます。
ベスト プラクティス
スケールアップまたはスケールダウン操作の待機時間を検討する
スケーリング操作が完了するまでに 1 ~ 5 分かかる場合があります。
スケールダウンの準備
インスタンスのスケールダウン プロセス中、自動スケールでは、新しい Executor がそのノードで起動できないように、ノードが使用停止状態になります。
実行中のジョブは引き続き実行されて終了します。 保留中のジョブは、少ない数の使用可能ノードで通常どおりにスケジュールされるのを待ちます。
注
既定では、spark.yarn.executor.decommission.enabled は true に設定され、使用率の低いノードの自動シャットダウンを有効にしてコンピューティング効率を最適化します。 あまり積極的なスケールダウンが推奨されていない場合は、この構成を false に設定できます。
次のステップ
新しい Spark プールを設定するクイック スタート Spark プールを作成する