ノード割り当て戦略とシナリオを把握する - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ノード割り当て戦略とシナリオを把握する

このセクションでは、Amazon EMRマネージドスケーリングで使用できるノード割り当て戦略と一般的なスケーリングシナリオの概要を説明します。

ノード割り当て戦略

Amazon EMR マネージドスケーリングは、次のスケールアップおよびスケールダウン戦略に基づいてコアノードとタスクノードを割り当てます。

スケールアップ戦略

  • Amazon EMRリリース 7.2 以降では、マネージドスケーリングはまずノードラベルとアプリケーションプロセス制限YARNプロパティに基づいてノードを追加します。

  • Amazon EMRリリース 7.2 以降では、ノードラベルを有効にし、アプリケーションプロセスをCOREノードに制限すると、アプリケーションプロセスの需要が増加し、エグゼキュターの需要が増加すると、Amazon EMRマネージドスケーリングによってコアノードとタスクノードがスケールアップされます。同様に、ノードラベルを有効にし、アプリケーションプロセスをON_DEMANDノードに制限すると、マネージドスケーリングはアプリケーションプロセスの需要が高まった場合はオンデマンドノードをスケールアップし、エグゼキュターの需要が高まった場合はスポットノードをスケールアップします。

  • ノードラベルが有効になっていない場合、アプリケーションプロセスの配置はノードまたはマーケットタイプに制限されません。

  • ノードラベルを使用することで、マネージドスケーリングは同じサイズ変更オペレーションで異なるインスタンスグループとインスタンスフリートをスケールアップおよびスケールダウンできます。例えば、 にON_DEMANDノードがあり、 instance_group1SPOTノードinstance_group2があり、ノードラベルが有効で、アプリケーションプロセスが ON_DEMAND ラベルを持つノードに制限されているシナリオでは、マネージドスケーリングは、instance_group2アプリケーションプロセスの需要が減少しinstance_group1、エグゼキュターの需要が増加すると、スケールダウンおよびスケールアップします。

  • Amazon が現在のインスタンスグループでスケールアップに遅延EMRが発生すると、マネージドスケーリングを使用するクラスターは自動的に別のタスクインスタンスグループに切り替えられます。

  • MaximumCoreCapacityUnits パラメータが設定されている場合、Amazon はコアユニットが最大許容制限に達するまでコアノードをEMRスケーリングします。残りの容量はすべてタスクノードに追加されます。

  • MaximumOnDemandCapacityUnits パラメータが設定されている場合、Amazon はオンデマンドユニットが最大許容制限に達するまで、オンデマンドインスタンスを使用してクラスターをEMRスケーリングします。残りの容量はすべて、スポットインスタンスを使用して追加されます。

  • MaximumCoreCapacityUnits パラメータと MaximumOnDemandCapacityUnitsパラメータの両方が設定されている場合、Amazon はスケーリング中に両方の制限EMRを考慮します。

    例えば、 MaximumCoreCapacityUnitsが より小さい場合MaximumOnDemandCapacityUnits、Amazon はEMRまずコア容量の制限に達するまでコアノードをスケーリングします。残りの容量については、Amazon はEMRまずオンデマンドインスタンスを使用してオンデマンド制限に達するまでタスクノードをスケーリングし、次にタスクノードにスポットインスタンスを使用します。

スケールダウン戦略

  • スケールアップ戦略と同様に、Amazon はノードラベルに基づいてノードEMRを削除します。ノードラベルの詳細については、「ノードタイプを理解する: プライマリノード、コアノード、タスクノード」を参照してください。

  • ノードラベルを有効にしていない場合、マネージドスケーリングはタスクノードを削除し、目的のスケールダウンターゲット容量に達するまでコアノードを削除します。マネージドスケーリングでは、クラスターがマネージドスケーリングポリシーで指定された最小制約を下回ることはありません。

  • Amazon EMRバージョン 5.34.0 以降、および Amazon EMRバージョン 6.4.0 以降では、Spark シャッフルデータ (Spark が特定のオペレーションを実行するためにパーティション間で再分散するデータ) を認識するマネージドスケーリングがサポートされています。シャッフル操作の詳細については、Spark のプログラミングガイドを参照してください。マネージドスケーリングでは、使用率の高いシャッフルデータを含まない、使用率の低いインスタンスのみをスケールダウンします。このインテリジェントなスケーリングにより、意図しないシャッフルデータの損失を防ぐことができ、ジョブを再試行したり、中間データを再計算したりする必要がなくなります。

  • マネージドスケーリングは、まずタスクノードを削除し、次に目的のスケールダウンターゲット容量に達するまでコアノードを削除します。クラスターは、マネージドスケーリングポリシーで指定された最小制約を下回ることはありません。

  • Amazon 5.x リリース 5EMR.34.0 以降、および 6.x リリース 6.4.0 以降で起動されたクラスターの場合、Amazon EMRマネージドスケーリングは、Apache Spark ApplicationMasterが実行されているノードをスケールダウンしません。これにより、ジョブの失敗や再試行が最小限に抑えられ、ジョブのパフォーマンスが向上し、コストが削減されます。クラスター内のどのノードで ApplicationMaster が実行されているかを確認するには、Spark 履歴サーバーにアクセスし、Spark アプリケーション ID の [Executors] タブでドライバーをフィルタリングします。

クラスターにロードがない場合、Amazon は以前の評価からの新しいインスタンスの追加EMRをキャンセルし、スケールダウンオペレーションを実行します。クラスターの負荷が高い場合、Amazon はインスタンスの削除EMRをキャンセルし、スケールアップオペレーションを実行します。

ノード割り当てに関する考慮事項

スポット再利用時にHDFSデータが失われないように、コアノードのオンデマンド購入オプションを使用することをお勧めします。タスクノードに対してスポット購入オプションを使用すると、タスクノードにスポットインスタンスを追加するときのコストが削減され、ジョブ実行が高速になります。

ノード割り当てシナリオ

最大、最小、オンデマンド制限、および最大コアノードの各パラメータをさまざまな組み合わせで、セットアップすることで、ニーズに基づいてさまざまなスケーリングシナリオを作成できます。

シナリオ 1: コアノードのみをスケーリングする

コアノードのみをスケーリングするには、マネージドスケーリングパラメータが次の要件を満たしている必要があります。

  • オンデマンド制限が最大限度と等しいこと。

  • 最大コアノードが最大限度と等しいこと。

オンデマンド制限と最大コアノードのパラメータが指定されていないときは、両方のパラメータがデフォルトで最大限度に設定されます。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをCOREノードでのみ実行するように制限する場合には適用されません。マネージドスケーリングは、エグゼキュターの需要に合わせてタスクノードをスケーリングするためです。

コアノードのみをスケーリングするシナリオの例を次に示します。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンドと 1 スポット

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 20

オンデマンドタイプを使用して、コアノードで 1 ~ 20 個のインスタンスまたはインスタンスフリートユニットをスケーリングします。タスクノードのスケーリングはありません。

ノードラベルでマネージドスケーリングを使用し、アプリケーションの処理をON_DEMANDノードに制限すると、クラスターは、需要のタイプに応じて、 On-Demandまたは Spotタイプを使用してCOREノードのインスタンスまたはインスタンスフリートユニットを 1~20 個スケールします。

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンドと 1 スポット

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 20

シナリオ 2: タスクノードのみをスケーリングする

タスクノードのみをスケーリングするには、マネージドスケーリングパラメータが次の要件を満たしている必要があります。

  • 最大コアノードが最小限度と等しいこと。

タスクノードのみをスケーリングするシナリオの例を次に示します。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:2 オンデマンド

タスク:1 スポット

UnitType: Instances

MinimumCapacityUnits: 2

MaximumCapacityUnits: 20

MaximumCoreCapacityUnits: 2

コアノードを 2 個に固定し、0 から 18 インスタンスまたはインスタンスフリートユニットの間のタスクノードのみをスケーリングします。最小限度と最大限度の間の容量が、タスクノードのみに追加されます。

ノードラベルでマネージドスケーリングを使用し、アプリケーションの処理を ON_DEMAND ノードに制限すると、クラスターはコアノードを 2 に一定に保ち、需要のタイプに応じて、 On-demandまたは Spotタイプを使用する 0~18 個のインスタンスまたはインスタンスフリートユニットの間でのみタスクノードをスケーリングします。

インスタンスフリート

コア:2 オンデマンド

タスク:1 スポット

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 2

MaximumCapacityUnits: 20

MaximumCoreCapacityUnits: 2

シナリオ 3: クラスター内のオンデマンドインスタンスのみ

オンデマンドインスタンスのみを使用するには、クラスターとマネージドスケーリングパラメータが次の要件を満たしている必要があります。

  • オンデマンド制限が最大限度と等しいこと。

    オンデマンド制限が指定されていないときは、パラメータ値がデフォルトで最大限度に設定されます。デフォルト値は、Amazon がオンデマンドインスタンスのみをEMRスケーリングすることを示します。

最大コアノードが最大限度未満の場合、最大コアノードパラメータを使用して、コアノードとタスクノード間で容量割り当てを分割できます。

インスタンスグループで構成されるクラスターでこのシナリオを有効にするには、初期構成時にクラスター内のすべてのノードグループがオンデマンドマーケットタイプを使用する必要があります。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをON_DEMANDノードでのみ実行するように制限する場合には適用されません。マネージドスケーリングは、エグゼキュターの需要に合わせてSpotノードをスケーリングするためです。

クラスター全体にオンデマンドインスタンスを持つシナリオの例を次に示します。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 12

オンデマンドタイプを使用して、コアノードで 1 ~ 12 個のインスタンスまたはインスタンスフリートユニットをスケーリングします。オンデマンドを使用して、タスクノードで残りの容量をスケーリングします。スポットインスタンスを使用したスケーリングはありません。

ノードラベルでマネージドスケーリングを使用し、アプリケーションの処理をCOREノードに制限すると、クラスターは、需要のタイプに応じて、 ON_DEMANDタイプを使用してCOREノードまたはtaskノードのインスタンスまたはインスタンスフリートユニットを 1~20 個スケールします。コアノードでのスケーリングは、12 インスタンスまたはインスタンスフリートユニットを超えることはありません。

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 12

シナリオ 4: クラスター内のスポットインスタンスのみ

スポットインスタンスのみを使用するには、マネージドスケーリングパラメータが次の要件を満たしている必要があります。

  • オンデマンド制限が 0 に設定されていること。

最大コアノードが最大限度未満の場合、最大コアノードパラメータを使用して、コアノードとタスクノード間で容量割り当てを分割できます。

インスタンスグループで構成されるクラスターでこのシナリオを有効にするには、コアインスタンスグループが初期設定時にスポット購入オプションを使用する必要があります。タスクインスタンスグループにスポットインスタンスがない場合、Amazon EMRマネージドスケーリングは必要に応じてスポットインスタンスを使用してタスクグループを作成します。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをON_DEMANDノードでのみ実行するように制限する場合には適用されません。マネージドスケーリングは、アプリケーションプロセスの需要に合わせてON_DEMANDノードをスケーリングするためです。

クラスター全体にスポットインスタンスを持つシナリオの例を次に示します。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 スポット

タスク:1 スポット

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 0

スポットを使用して、コアノードで 1 ~ 20 個のインスタンスまたはインスタンスフリートユニットをスケーリングします。オンデマンドタイプを使用したスケーリングはありません。

ノードラベルでマネージドスケーリングを使用し、アプリケーションの処理をCOREノードに制限すると、クラスターは需要のタイプに応じて、 または を使用するTASKノードで 1 ~ 20 個のインスタンスCOREまたはインスタンスフリートユニットをスケーリングします。Amazon EMRは ON_DEMANDタイプを使用してスケーリングしません。

インスタンスフリート

コア:1 スポット

タスク:1 スポット

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 0

シナリオ 5: コアノードのオンデマンドインスタンスと、タスクノードのスポットインスタンスをスケーリングする

コアノードのオンデマンドインスタンスと、タスクノードのスポットインスタンスをスケーリングするには、マネージドスケーリングパラメータが次の要件を満たしている必要があります。

  • オンデマンドの制限が最大コアノードに等しいこと。

  • オンデマンド制限と最大コアノードの両方が最大限度未満であること。

インスタンスグループで構成されるクラスターでこのシナリオを有効にするには、コアノードグループがオンデマンド購入オプションを使用する必要があります。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをON_DEMANDノードまたはCOREノードでのみ実行するように制限する場合には適用されません。

コアノードのオンデマンドインスタンスと、タスクノードのスポットインスタンスをスケーリングするシナリオの例を次に示します。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンドと 1 スポット

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 7

MaximumCoreCapacityUnits: 7

タスクノードにすでに 1 つのオンデマンドユニットがあり、オンデマンドの最大制限が 7 であるため、コアノードで 6 個のオンデマンドユニットまでスケールアップします。次に、タスクノードで 13 個のスポットユニットまでスケールアップします。

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンドと 1 スポット

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 7

MaximumCoreCapacityUnits: 7

シナリオ 6: アプリケーションプロセスの需要に応じてCOREインスタンスをスケールし、エグゼキュターの需要に応じてTASKインスタンスをスケールします。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをCOREノードでのみ実行するように制限する場合にのみ適用できます。

アプリケーションプロセスの需要に基づいてCOREノードをスケーリングし、エグゼキュターの需要に基づいてTASKノードをスケーリングするには、クラスターの起動時に次の設定を行う必要があります。

  • yarn.node-labels.enabled:true

  • yarn.node-labels.am.default-node-label-expression: 'CORE'

ON_DEMAND 制限と最大COREノードパラメータを指定しない場合、両方のパラメータはデフォルトで最大境界になります。

最大ON_DEMANDノードが最大境界未満の場合、マネージドスケーリングは最大ON_DEMANDノードパラメータを使用して、 ON_DEMANDSPOT ノード間で容量割り当てを分割します。最大COREノードパラメータを最小容量パラメータ以下に設定すると、COREノードは最大コア容量のままになります。

次の例は、アプリケーションプロセスの需要に基づいてCOREインスタンスをスケーリングし、エグゼキュターの需要に基づいてTASKインスタンスをスケーリングするシナリオを示しています。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 10

MaximumCoreCapacityUnits: 20

オンデマンドまたはスポットマーケットタイプを使用して、クラスターのアプリケーションプロセスの需要に基づいて 1 CORE~ 20 個のノードをスケーリングします。Amazon がTASKノードをEMR割り当てた後、エグゼキュターの需要と使用可能な残りの容量に基づいてCOREノードをスケーリングします。

リクエストされた CORETASKノードの合計は、 maximumCapacityの 20 を超えることはありません。リクエストされたオンデマンドコアノードとオンデマンドタスクノードの合計は、 maximumOnDemandCapacityの 10 を超えることはありません。追加のコアノードまたはタスクノードは、スポットマーケットタイプを使用します。

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 10

MaximumCoreCapacityUnits: 20

シナリオ 7: アプリケーションプロセスの需要に応じてON_DEMANDインスタンスをスケールし、エグゼキュターの需要に応じてSPOTインスタンスをスケールします。

このシナリオは、ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスをON_DEMANDノードでのみ実行するように制限する場合にのみ適用できます。

アプリケーションプロセスの需要に基づいてON_DEMANDノードをスケーリングし、エグゼキュターの需要に基づいてSPOTノードをスケーリングするには、クラスターの起動時に次の設定を行う必要があります。

  • yarn.node-labels.enabled:true

  • yarn.node-labels.am.default-node-label-expression: 'ON_DEMAND'

ON_DEMAND 制限と最大COREノードパラメータを指定しない場合、両方のパラメータはデフォルトで最大境界になります。

最大COREノードが最大境界未満の場合、マネージドスケーリングは最大COREノードパラメータを使用して、 CORETASK ノード間で容量割り当てを分割します。最大COREノードパラメータを最小容量パラメータ以下に設定すると、COREノードは最大コア容量のままになります。

次の例は、アプリケーションプロセスの需要に基づいてオンデマンドインスタンスをスケーリングし、エグゼキュターの需要に基づいてスポットインスタンスをスケーリングするシナリオを示しています。

クラスターの初期状態 スケーリングパラメータ スケーリングの動作

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 10

CORE または ON_DEMANDノードタイプを使用して、クラスターのアプリケーションプロセスの需要に基づいて 1~20 ノードのTASKノードをスケーリングします。Amazon がSPOTノードをEMR割り当てた後、エグゼキュターの需要と使用可能な残りの容量に基づいてON_DEMANDノードをスケーリングします。

リクエストされた ON_DEMANDノードと SPOTノードの合計は、 maximumCapacityの 20 を超えることはありません。リクエストされたオンデマンドコアノードとスポットコアノードの合計は、 maximumCoreCapacityの 10 を超えることはありません。追加のオンデマンドノードまたはスポットノードは、 TASKノードタイプを使用します。

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 10