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

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

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

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

ノード割り当て戦略

Amazon EMR Managed Scaling は、次のスケールアップ戦略とスケールダウン戦略に基づいて、コアノードとタスクノードを割り当てます。

スケールアップ戦略

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

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

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

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

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

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

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

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

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

スケールダウン戦略

  • スケールアップ戦略と同様に、Amazon EMR はノードラベルに基づいてノードを削除します。ノードラベルの詳細については、「Understand node types: primary, core, and task nodes」を参照してください。

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

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

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

  • Amazon EMR 5.x リリース 5.34.0 以降、および 6.x リリース 6.4.0 以降で起動されたクラスターの場合、Amazon EMR Managed Scaling は、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 Managed Scaling は、必要に応じてスポットインスタンスを使用してタスクグループを作成します。

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

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

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

インスタンスグループ

コア:1 スポット

タスク:1 スポット

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 0

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

ノードラベルでマネージドスケーリングを使用し、アプリケーションプロセスを CORE ノードに制限すると、クラスターは、需要のタイプに応じて、Spot を使用して CORE または TASK ノードで 1~20 個のインスタンスまたはインスタンスフリートユニットをスケーリングします。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_DEMAND ノードと SPOT ノード間で容量割り当てを分割できます。最大 CORE ノードパラメータを最小容量パラメータ以下に設定すると、CORE ノードは最大コア容量で静的のままになります。

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

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

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 10

MaximumCoreCapacityUnits: 20

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

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

インスタンスフリート

コア: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 ノードパラメータを使用して、CORE ノードと TASK ノード間で容量割り当てを分割できます。最大 CORE ノードパラメータを最小容量パラメータ以下に設定すると、CORE ノードは最大コア容量で静的のままになります。

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

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

インスタンスグループ

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: Instances

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 10

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

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

インスタンスフリート

コア:1 オンデマンド

タスク:1 オンデマンド

UnitType: InstanceFleetUnits

MinimumCapacityUnits: 1

MaximumCapacityUnits: 20

MaximumOnDemandCapacityUnits: 20

MaximumCoreCapacityUnits: 10