Amazon EMR クラスターのインスタンスフリートの計画と設定
注記
インスタンスフリート設定は、5.0.0 および 5.0.3 を除く Amazon EMR リリース 4.8.0 以降でのみ使用できます。
Amazon EMR クラスターのインスタンスフリート設定では、Amazon EC2 インスタンスのさまざまなプロビジョニングオプションを選択でき、クラスター内のノードタイプごとに柔軟で伸縮性に富むリソース戦略を開発できます。
インスタンスフリート設定では、各フリート内のオンデマンドインスタンスおよびスポットインスタンスのターゲット容量を指定します。クラスターを起動すると、Amazon EMR は、ターゲットが満たされるまでインスタンスをプロビジョニングします。クラスターの実行中に、料金の値上げまたはインスタンスの失敗のために Amazon EC2 がスポットインスタンスを再利用する場合、Amazon EMR は指定されたインスタンスタイプのいずれかで、そのインスタンスを置き換えようとします。これにより、スポット料金の急激な増加中に容量を再取得することが容易になります。
ターゲットを満たすときは、使用する Amazon EMR ごとに、フリートあたり最大 5 つの Amazon EC2 インスタンスタイプを指定できます。AWS CLI または Amazon EMR API、およびオンデマンドインスタンスとスポットインスタンスの配分戦略を使用してクラスターを作成する場合、フリートあたり最大 30 の Amazon EC2 インスタンスタイプを指定できます。
また、異なるアベイラビリティーゾーンに複数のサブネットを選択することもできます。Amazon EMR は、クラスターを起動するときに、指定されたインスタンスと購入オプションをこれらのサブネットで探します。Amazon EMR は、1 つ以上のアベイラビリティーゾーンで AWS の大規模なイベントを検出すると、影響を受けるアベイラビリティーゾーンからトラフィックを遠ざけるように自動的にルーティングし、選択に従って代替アベイラビリティーゾーンで作成する新しいクラスターの起動を試みます。クラスターのアベイラビリティーゾーンの選択はクラスターの作成時にのみ行われることに注意してください。アベイラビリティーゾーンが停止しても、既存のクラスターノードは新しいアベイラビリティーゾーンで自動的に再起動されません。
インスタンスフリートの使用に関する考慮事項
Amazon EMR でインスタンスフリートを使用する場合は、以下の項目について考慮します。
-
ノードタイプ (プライマリ、コア、タスク) あたり 1 つのみのインスタンスフリートを使用できます。AWS Management Consoleでフリートあたり最大 5 個の Amazon EC2 インスタンスタイプを指定できます (AWS CLI または Amazon EMR API および インスタンスフリートの配分戦略 を使用してクラスターを作成する場合は、インスタンスフリートあたり最大 30 のタイプを指定できます)。
-
Amazon EMR は、スポット購入オプションとオンデマンド購入オプションの両方で、プロビジョニングする指定された Amazon EC2 インスタンスタイプのいずれかまたはすべてを選択します。
-
コアフリートとタスクフリートのスポットインスタンスおよびオンデマンドインスタンスのターゲット容量を確立できます。ターゲットに対してカウントされる、各 Amazon EC2 インスタンスに割り当てられた vCPU または汎用ユニットを使用します。Amazon EMR は各ターゲット容量が完全に満たされるまでインスタンスをプロビジョニングします。プライマリフリートの場合、ターゲットは常に 1 つです。
-
1 つのサブネット (アベイラビリティーゾーン) または範囲を選択できます。範囲を選択する場合、Amazon EMR はアベイラビリティーゾーンに最適な容量をプロビジョニングします。
-
スポットインスタンスのターゲット容量を指定するとき、次のことを実行します。
-
インスタンスタイプごとに、最大スポット料金を指定します。スポット料金が最大スポット料金を下回る場合、Amazon EMR はスポットインスタンスをプロビジョニングします。お客様にご負担いただくのはスポット料金であり、必ずしも最大スポット料金ではありません。
-
フリートごとにスポットインスタンスをプロビジョニングするためのタイムアウト期間を定義します。Amazon EMR がスポット容量をプロビジョニングできない場合は、代わりにクラスターを終了させるか、オンデマンド容量のプロビジョニングに切り替えることができます。これはクラスターのプロビジョニングにのみ適用され、サイズ変更には適用されません。クラスターのサイズ変更プロセス中にタイムアウト期間が終了すると、プロビジョニングされていないスポットリクエストはオンデマンド容量に移行されずに無効になります。
-
-
スポットインスタンスには、フリートごとに、価格と容量の最適化、容量の最適化、容量最適化優先、最低価格、全プールへの分散のいずれかの配分戦略を指定できます。
-
フリートごとに、最低料金戦略または優先戦略の、オンデマンドインスタンスに次の配分戦略を適用できます。
-
オンデマンドインスタンスを使用するフリートごとに、キャパシティ予約オプションを適用することを選択できます。
-
インスタンスフリートに配分戦略を使用する場合、EMR クラスターにサブネットを選択するときは、次の考慮事項が適用されます。
Amazon EMR がタスクフリートでクラスターをプロビジョニングすると、リクエストされた EMR クラスターのすべてのインスタンスをプロビジョニングするのに十分な使用可能な IP アドレスがないサブネットがフィルタリングされます。これには、クラスターの起動時にプライマリ、コア、タスクインスタンスフリートに必要な IP アドレスが含まれます。次に、Amazon EMR は、その配分戦略を活用して、インスタンスタイプと十分な IP アドレスを持つ残りのサブネットに基づいてインスタンスプールを決定し、クラスターを起動します。
使用可能な IP アドレスが不足しているため、Amazon EMR がクラスター全体を起動できない場合、必須 (コアおよびプライマリ) インスタンスフリートを起動するのに十分な空き IP アドレスを持つサブネットを識別しようとします。このようなシナリオでは、タスクインスタンスフリートはエラーでクラスターを終了するのではなく、中断状態になります。
指定されたサブネットに必須コアおよびプライマリインスタンスフリートをプロビジョニングするのに十分な IP アドレスが含まれていない場合、クラスターの起動は VALIDATION_ERROR で失敗します。これにより、重大な重要度のクラスター終了イベントがトリガーされ、クラスターを起動できないことが通知されます。この問題を防止するには、サブネット内の IP アドレスの数を増やすことをお勧めします。
-
オンデマンドインスタンスを起動すると、アカウント内でプライマリ、コア、タスクノード用のオープンまたはターゲットのキャパシティ予約を使用するオプションがあります。インスタンスフリートの配分戦略でオンデマンドインスタンスを使用すると、容量が不足することがあります。複数のインスタンスタイプを指定することで分散させ、容量不足になる可能性を低減させることをお勧めします。詳細については、「Amazon EMR でインスタンスフリートにキャパシティ予約を使用する」を参照してください。
インスタンスフリートオプション
次のガイドラインを使用して、インスタンスフリートオプションについて理解してください。
ターゲット容量の設定
コアフリートとタスクフリートのターゲット容量を指定します。この操作を行うと、Amazon EMR がプロビジョニングするオンデマンドインスタンスとスポットインスタンスの数が決まります。インスタンスを指定するときは、ターゲットに対してカウントされる各インスタンスの数を決定します。オンデマンドインスタンスがプロビジョニングされると、オンデマンドターゲットに対してカウントされます。スポットインスタンスの場合も同様です。プライマリフリートはコアフリートやタスクフリートとは異なり、常に 1 つのインスタンスです。したがって、このフリートのターゲット容量は常に 1 になります。
コンソールを使用する場合、デフォルトではターゲット容量のカウントとして、Amazon EC2 インスタンスタイプの vCPU が使用されます。これを [Generic units (汎用ユニット)] に変更し、各 EC2 インスタンスタイプの数を指定できます。AWS CLI を使用する場合は、各インスタンスタイプに手動で汎用ユニットを割り当てることができます。
重要
AWS Management Console を使用してインスタンスタイプを選択する場合、[インスタンスタイプ] ごとに表示される [vCPU] の数は、そのインスタンスタイプの YARN vcore の数であり、そのインスタンスタイプの EC2 vCPU の数ではありません。各インスタンスタイプの vCPU 数の詳細については、「Amazon EC2 インスタンスタイプ
フリートごとに、最大 5 つの Amazon EC2 インスタンスタイプを指定します。インスタンスフリートの配分戦略を使用しており、AWS CLI または Amazon EMR API を使用してクラスターを作成する場合、インスタンスフリートあたり最大 30 の EC2 インスタンスタイプを指定できます。Amazon EMR は、これらの EC2 インスタンスタイプの任意の組み合わせを選択して、ターゲット容量を満たします。Amazon EMR は完全にターゲット容量を満たそうとするため、超過が発生する可能性があります。例えば、2 つの満たされていないユニットがある場合、Amazon EMR は 5 ユニットのインスタンスしかプロビジョニングできず、インスタンスは引き続きプロビジョニングされます。つまり、ターゲット容量を 3 ユニット超過します。
ターゲット容量を減らして実行中のクラスターのサイズを変更する場合、Amazon EMR は新しいターゲットに合わせてアプリケーションタスクを完了し、インスタンスを削除しようとします。詳細については、「タスクの完了時に終了」を参照してください。
起動オプション
スポットインスタンスでは、フリート内のインスタンスタイプごとに最大スポット料金を指定できます。この料金は、オンデマンド料金のパーセンテージまたは特定の金額として設定できます。アベイラビリティーゾーンの現在のスポット料金が最大スポット料金を下回っている場合、Amazon EMR はスポットインスタンスをプロビジョニングします。お客様にご負担いただくのはスポット料金であり、必ずしも最大スポット料金ではありません。
注記
期間が定義されたスポットインスタンス (スポットブロックとも呼ばれます) は、2021 年 7 月 1 日以降の新規のお客様は、ご利用いただけません。既に、期間が指定されたスポットインスタンスを使用した経験をお持ちのお客様については、2022 年 12 月 31 日まで、この機能を引き続きサポートいたします。
Amazon EMR 5.12.1 以降では、容量が最適化された配分を使用してスポットインスタンスフリートおよびオンデマンドインスタンスフリートを起動するオプションを利用できます。この配分戦略オプションは、古いAWS Management Consoleで、または API RunJobFlow
を使用して設定できます。新しいコンソールでは配分戦略をカスタマイズできないことに注意してください。配分戦略オプションを使用するには、追加のサービスロールのアクセス許可が必要です。デフォルトの Amazon EMR サービスロールと管理ポリシー (EMR_DefaultRole および AmazonEMRServicePolicy_v2
) をクラスターに使用する場合、配分戦略のアクセス許可は既に含まれています。デフォルトの Amazon EMR サービスロールと管理ポリシーを使用していない場合、このオプションを使用するには、それらを追加する必要があります。「Amazon EMR のサービスロール (EMR ロール)」を参照してください。
スポットインスタンスの詳細については、「Amazon EC2 ユーザーガイド」の「スポットインスタンス」を参照してください。オンデマンドインスタンスの詳細については、「Amazon EC2 ユーザーガイド」の「オンデマンドインスタンス」を参照してください。
最低料金配分戦略を使用してオンデマンドインスタンスフリートを起動する場合は、キャパシティ予約を使用するオプションがあります。キャパシティ予約オプションは、Amazon EMR API RunJobFlow
を使用して設定できます。キャパシティ予約では、これらのオプションを使用するためにサービスロールのアクセス許可を追加する必要があります。「配分戦略のアクセス許可」を参照してください。新しいコンソールではキャパシティ予約をカスタマイズできないことに注意してください。
複数サブネット (アベイラビリティーゾーン) オプション
インスタンスフリートを使用する場合は、VPC 内で複数の Amazon EC2 サブネットを指定できます。それぞれが異なるアベイラビリティーゾーンに対応しています。EC2-Classic を使用する場合はアベイラビリティーゾーンを明示的に指定します。Amazon EMR は、フリートの指定に従って、インスタンスを起動するために最適なアベイラビリティーゾーンを識別します。インスタンスは、1 つのアベイラビリティーゾーンのみで常にプロビジョニングされます。プライベートサブネットまたはパブリックサブネットを選択できますが、2 つを組み合わせることはできません。指定するサブネットは同じ VPC 内になければなりません。
マスターノードの設定
プライマリインスタンスフリートは単一インスタンスにすぎないため、その構成はコアインスタンスフリートとタスクインスタンスフリートとは多少異なります。プライマリインスタンスフリートは 1 つのみのインスタンスで構成されているため、プライマリインスタンスフリートにはオンデマンドまたはスポットのいずれかを選択します。コンソールを使用してインスタンスフリートを作成する場合、選択する購入オプションのターゲット容量は 1 に設定されます。AWS CLI を使用する場合、TargetSpotCapacity
または TargetOnDemandCapacity
のいずれかを必要に応じて 1 に設定します。この場合もプライマリインスタンスフリートには、最大 5 つのインスタンスタイプを選択できます (オンデマンドインスタンスまたはスポットインスタンスの配分戦略を使用する場合は、最大 30)。ただし、Amazon EMR が異なるタイプの複数のインスタンスをプロビジョニングする可能性があるコアインスタンスフリートとタスクインスタンスフリートとは異なり、Amazon EMR は、プライマリインスタンスフリートにプロビジョニングするために単一インスタンスタイプを選択します。
インスタンスフリートの配分戦略
Amazon EMR バージョン 5.12.1 以降では、各クラスターノードのオンデマンドインスタンスとスポットインスタンスで配分戦略オプションを使用できます。AWS CLI、Amazon EMR API、または Amazon EMR コンソールを使用してクラスターを作成する場合、フリートあたり最大 30 の Amazon EC2 インスタンスタイプを指定できます。デフォルトの Amazon EMR クラスターインスタンスフリート設定では、フリートごとに最大 5 つのインスタンスタイプを使用できます。クラスターのプロビジョニングにかかる時間が短縮され、スポットインスタンスの割り当てがより正確になり、スポットインスタンスの中断が低減するように、配分戦略オプションを使用することをお勧めします。
オンデマンドインスタンスの配分戦略
オンデマンドインスタンスでは、次の配分戦略を使用できます。
lowest-price
(デフォルト)最低価格配分戦略では、使用可能な容量を持つ最低価格のプールからオンデマンドインスタンスを起動します。最低料金のプールに使用可能なキャパシティがない場合、その次に料金が安く、かつ使用可能なキャパシティがあるプールからオンデマンドインスタンスが取得されます。
prioritized
優先配分戦略を使用すると、インスタンスフリートの各インスタンスタイプに優先度値を指定できます。Amazon EMR は、優先度が最も高いオンデマンドインスタンスを起動します。この戦略を使用する場合は、少なくとも 1 つのインスタンスタイプの優先度を設定する必要があります。インスタンスタイプの優先度値を設定しない場合、Amazon EMR はそのインスタンスタイプに最小の優先度を割り当てます。クラスター内の各インスタンスフリート (プライマリ、コア、またはタスク) には、特定のインスタンスタイプごとに異なる優先度値を設定できます。
注記
容量最適化優先スポット配分戦略を使用する場合、Amazon EMR は優先順位を設定するときに、オンデマンドインスタンスとスポットインスタンスの両方に同じ優先順位を適用します。
スポットインスタンスの配分戦略
スポットインスタンスには次のいずれかの配分戦略を指定できます。
price-capacity-optimized
(推奨)-
価格と容量の最適化配分戦略では、起動中のインスタンス数に対して、使用可能な容量が最も高く、価格が最も低いスポットインスタンスプールからスポットインスタンスを起動します。そのため、価格と容量の最適化戦略では通常、スポット容量を獲得できる可能性が高く、中断率も低くなります。これは、Amazon EMR リリース 6.10.0 以降のデフォルト戦略です。
capacity-optimized
-
容量の最適化配分戦略では、短期的に中断の可能性が最も低い、最も利用可能なプールにスポットインスタンスを起動します。これは、作業の再開に関連する中断に伴うコストが高くなる可能性があるワークロードに適しています。これは Amazon EMR リリース 6.9.0 以前のデフォルト戦略です。
capacity-optimized-prioritized
-
容量最適化優先配分戦略を使用すると、インスタンスフリート内のインスタンスタイプごとに優先度値を指定できます。Amazon EMR は最初に容量を最適化しますが、優先順位がフリートの最適な容量のプロビジョニング能力に大きく影響しない場合など、インスタンスタイプの優先順位をベストエフォートベースで尊重します。このオプションは、特定のインスタンスタイプに対するニーズがまだある中断を最小限に抑える必要があるワークロードがある場合にお勧めします。この戦略を使用する場合は、少なくとも 1 つのインスタンスタイプの優先度を設定する必要があります。インスタンスタイプの優先度を設定しない場合、Amazon EMR はそのインスタンスタイプに最小優先度値を割り当てます。クラスター内の各インスタンスフリート (プライマリ、コア、またはタスク) には、特定のインスタンスタイプごとに異なる優先度値を設定できます。
注記
優先オンデマンド配分戦略を使用する場合、Amazon EMR は、優先順位を設定するときにオンデマンドインスタンスとスポットインスタンスの両方に同じ優先順位値を適用します。
diversified
-
分散型の配分戦略により、Amazon EC2 はすべてのスポット容量プールにスポットインスタンスを分散します。
lowest-price
-
最低価格配分戦略では、使用可能な容量を持つ最低価格のプールからスポットインスタンスを起動します。最低価格のプールに使用可能な容量がない場合、スポットインスタンスは使用可能な容量のある 2 番目に低価格のプールから取得されます。希望する容量を満たす前にプールの容量が不足した場合、Amazon EC2 Fleet は 2 番目に低い価格のプールから容量を引き出し、引き続きリクエストを満たします。希望する容量を確実に満たすために、複数のプールからスポットインスタンスを受け取る場合があります。この戦略では、インスタンスの価格のみが考慮され、キャパシティの可用性は考慮されないため、中断率が高くなる可能性があります。
配分戦略のアクセス許可
配分戦略オプションでは、デフォルトの Amazon EMR サービスロールと Amazon EMR 管理ポリシー (EMR_DefaultRole
と AmazonEMRServicePolicy_v2
) に自動的に含まれるいくつかの IAM アクセス許可が必要です。クラスターにカスタムサービスロールまたは管理ポリシーを使用する場合は、クラスターを作成する前にこれらのアクセス許可を追加する必要があります。詳細については、「配分戦略のアクセス許可」を参照してください。
オンデマンド配分戦略オプションを使用すると、オプションのオンデマンドキャパシティ予約 (ODCR) を利用できます。キャパシティ予約オプションを使用すると、Amazon EMR クラスターに対してリザーブドキャパシティを最初に使用する設定を指定できます。これを使用すると、重要なワークロードには、オープンまたはターゲットの ODCR を使用して既に予約済みの容量を使用できます。重要でないワークロードの場合、キャパシティ予約設定を使用して、リザーブドキャパシティを消費するかどうかを指定できます。
キャパシティ予約は、属性 (インスタンスタイプ、プラットフォーム、アベイラビリティーゾーン) が一致するインスタンスのみ使用することができます。デフォルトでは、インスタンス属性と一致するオンデマンドインスタンスをプロビジョニングするときに、Amazon EMR によってオープンキャパシティ予約が自動的に使用されます。キャパシティの予約の属性と一致する実行中のインスタンスがない場合は、一致する属性を持つインスタンスを起動するまでは使用されません。クラスターの起動時にキャパシティ予約を使用しない場合は、起動オプションでキャパシティ予約設定を [なし] に設定する必要があります。
ただし、特定のワークロードに対してキャパシティ予約を指定することもできます。これにより、リザーブドキャパシティーで実行できるインスタンスを明示的に制御できます。オンデマンドキャパシティ予約については、「Amazon EMR でインスタンスフリートにキャパシティ予約を使用する」を参照してください。
配分戦略に必要な IAM アクセス許可
Amazon EMR のサービスロール (EMR ロール) では、オンデマンドインスタンスフリートまたはスポットインスタンスフリートの配分戦略オプションを使用するクラスターを作成するには、追加のアクセス許可が必要です。
これらのアクセス権限は、デフォルトの Amazon EMR サービスロール EMR_DefaultRole と Amazon EMR 管理ポリシー AmazonEMRServicePolicy_v2 に自動的に含まれます。
クラスターにカスタムサービスロールまたは管理ポリシーを使用する場合は、次のアクセス許可を追加する必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteLaunchTemplate", "ec2:CreateLaunchTemplate", "ec2:DescribeLaunchTemplates", "ec2:CreateLaunchTemplateVersion", "ec2:CreateFleet" ], "Resource": "*" } }
オープンまたはターゲットのキャパシティ予約を使用するクラスターを作成するために必要なサービスロールのアクセス許可を次に示します。配分戦略オプションの使用に必要なアクセス許可に加えて、これらのアクセス許可を含める必要があります。
例 サービスロールキャパシティ予約に関するポリシードキュメント
オープンキャパシティ予約を使用するには、次の追加のアクセス許可を含める必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeCapacityReservations", "ec2:DescribeLaunchTemplateVersions", "ec2:DeleteLaunchTemplateVersions" ], "Resource": "*" } ] }
ターゲットキャパシティ予約を使用するには、次の追加のアクセス許可を含める必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeCapacityReservations", "ec2:DescribeLaunchTemplateVersions", "ec2:DeleteLaunchTemplateVersions", "resource-groups:ListGroupResources" ], "Resource": "*" } ] }
クラスターのインスタンスフリートを設定する
例: インスタンスフリート設定でクラスターを作成する
次の例は、 create-cluster
コマンドを、組み合わせ可能なさまざまなオプションを使って実行する方法を示しています。
注記
デフォルト Amazon EMR サービスロールと EC2 インスタンスプロファイルを作成したことがない場合、create-cluster
コマンドを使用する前に、aws emr create-default-roles
を使って作成します。
例: オンデマンドプライマリ、単一インスタンスタイプのオンデマンドコア、デフォルト VPC
aws emr create-cluster --release-label
emr-5.3.1
--service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}']
例: スポットプライマリ、単一インスタンスタイプのスポットコア、デフォルト VPC
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}'] \ InstanceFleetType=CORE,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']
例: オンデマンドプライマリ、単一インスタンスタイプの混合コア、単一 EC2 サブネット
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=2,TargetSpotCapacity=6,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=2}']
例: オンデマンドプライマリ、複数の加重インスタンスタイプのスポットコア、スポットのタイムアウト、EC2 サブネットの範囲
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetSpotCapacity=11,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\ '{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'}
例: オンデマンドプライマリ、複数の加重インスタンスタイプの混合コアおよびタスク、コアスポットインスタンスのタイムアウト、EC2 サブネットの範囲
aws emr create-cluster --release-label emr-5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,SubnetIds=['subnet-ab12345c','subnet-de67890f'] \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,InstanceTypeConfigs=['{InstanceType=m5.xlarge}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=8,TargetSpotCapacity=6,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}',\ '{InstanceType=m4.2xlarge,BidPrice=0.9,WeightedCapacity=5}'],\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=120,TimeoutAction=SWITCH_TO_ON_DEMAND}'} \ InstanceFleetType=TASK,TargetOnDemandCapacity=3,TargetSpotCapacity=3,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,WeightedCapacity=3}']
例: スポットプライマリ、コアまたはタスクなし、Amazon EBS 設定、デフォルト VPC
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetSpotCapacity=1,\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=60,TimeoutAction=TERMINATE_CLUSTER}'},\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5,\ EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=gp2,\ SizeIn GB=100}},{VolumeSpecification={VolumeType=io1,SizeInGB=100,Iop s=100},VolumesPerInstance=4}]}}']
例: 複数のカスタム AMI、複数のインスタンスタイプ、オンデマンドプライマリ、オンデマンドコア
aws emr create-cluster --release-label Amazon EMR 5.3.1 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets \ InstanceFleetType=MASTER,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}'] \ InstanceFleetType=CORE,TargetOnDemandCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456},{InstanceType=m6g.xlarge, CustomAmiId=ami-234567}']
例: 複数のインスタンスタイプと複数のカスタム AMI を持つ実行中のクラスターにタスクノードを追加する
aws emr add-instance-fleet --cluster-id j-123456 --release-label Amazon EMR 5.3.1 \ --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleet \ InstanceFleetType=Task,TargetSpotCapacity=1,\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,CustomAmiId=ami-123456}',\ '{InstanceType=m6g.xlarge,CustomAmiId=ami-234567}']
例: JSON 設定ファイルを使用する
JSON ファイルでインスタンスフリートパラメータを構成してから、インスタンスフリートの唯一のパラメータとして JSON ファイルを参照できます 例えば、次のコマンドは JSON 設定ファイル
を参照します。my-fleet-config.json
aws emr create-cluster --release-label emr-5.30.0 --service-role EMR_DefaultRole \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole \ --instance-fleets file://
my-fleet-config.json
my-fleet-config.json
ファイルは、次の例で示すように、プライマリ、コア、およびタスクインスタンスフリートを指定します。コアインスタンスフリートは、オンデマンドの割合として最大スポット料金 (BidPrice
) を使用するのに対し、タスクおよびプライマリインスタンスフリートでは、米ドルの文字列として、最大スポット料金 (BidPriceAsPercentageofOnDemandPrice) を使用します。
[ { "Name": "Masterfleet", "InstanceFleetType": "MASTER", "TargetSpotCapacity": 1, "LaunchSpecifications": { "SpotSpecification": { "TimeoutDurationMinutes": 120, "TimeoutAction": "SWITCH_TO_ON_DEMAND" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPrice": "0.89" } ] }, { "Name": "Corefleet", "InstanceFleetType": "CORE", "TargetSpotCapacity": 1, "TargetOnDemandCapacity": 1, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "UsageStrategy": "use-capacity-reservations-first", "CapacityReservationResourceGroupArn": "String" } }, "SpotSpecification": { "AllocationStrategy": "capacity-optimized", "TimeoutDurationMinutes": 120, "TimeoutAction": "TERMINATE_CLUSTER" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPriceAsPercentageOfOnDemandPrice": 100 } ] }, { "Name": "Taskfleet", "InstanceFleetType": "TASK", "TargetSpotCapacity": 1, "LaunchSpecifications": { "OnDemandSpecification": { "AllocationStrategy": "lowest-price", "CapacityReservationOptions": { "CapacityReservationPreference": "none" } }, "SpotSpecification": { "TimeoutDurationMinutes": 120, "TimeoutAction": "TERMINATE_CLUSTER" } }, "InstanceTypeConfigs": [ { "InstanceType": "m5.xlarge", "BidPrice": "0.89" } ] } ]
インスタンスフリートのターゲット容量を変更する
コマンドを使用して、インスタンスフリートの新しいターゲット容量を指定します modify-instance-fleet
。クラスター ID とインスタンスフリート ID を指定しなければなりません。コマンドを使用してインスタンスフリート ID を取得しますlist-instance-fleets
。
aws emr modify-instance-fleet --cluster-id
<cluster-id>
\ --instance-fleet \ InstanceFleetId='<instance-fleet-id>
',TargetOnDemandCapacity=1,TargetSpotCapacity=1
タスクインスタンスフリートをクラスターに追加する
クラスターにプライマリインスタンスフリートおよびコアインスタンスフリートしかない場合、add-instance-fleet
コマンドを使用してタスクインスタンスフリートを追加できます。このコマンドは、タスクインスタンスフリートを追加するためだけに使用できます。
aws emr add-instance-fleet --cluster-id
<cluster-id>
--instance-fleet \ InstanceFleetType=TASK,TargetSpotCapacity=1,\ LaunchSpecifications={SpotSpecification='{TimeoutDurationMinutes=20,TimeoutAction=TERMINATE_CLUSTER}'},\ InstanceTypeConfigs=['{InstanceType=m5.xlarge,BidPrice=0.5}']
クラスター内のインスタンスフリートの設定情報を取得する
クラスター内のインスタンスフリートの構成情報を得るには、 list-instance-fleets
コマンドを使用します。コマンドは、クラスター ID を入力として受け入れます。次の例では、このコマンドと、それによるプライマリタスクインスタンスグループとコアタスクインスタンスグループを含むクラスターの出力を示しています。完全なレスポンスの構文については、「Amazon EMR API リファレンス」の「ListInstanceFleets」を参照してください。
list-instance-fleets --cluster-id
<cluster-id>
{ "InstanceFleets": [ { "Status": { "Timeline": { "ReadyDateTime": 1488759094.637, "CreationDateTime": 1488758719.817 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "ProvisionedSpotCapacity": 6, "Name": "CORE", "InstanceFleetType": "CORE", "LaunchSpecifications": { "SpotSpecification": { "TimeoutDurationMinutes": 60, "TimeoutAction": "TERMINATE_CLUSTER" } }, "ProvisionedOnDemandCapacity": 2, "InstanceTypeSpecifications": [ { "BidPrice": "0.5", "InstanceType": "m5.xlarge", "WeightedCapacity": 2 } ], "Id": "if-1ABC2DEFGHIJ3" }, { "Status": { "Timeline": { "ReadyDateTime": 1488759058.598, "CreationDateTime": 1488758719.811 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "ProvisionedSpotCapacity": 0, "Name": "MASTER", "InstanceFleetType": "MASTER", "ProvisionedOnDemandCapacity": 1, "InstanceTypeSpecifications": [ { "BidPriceAsPercentageOfOnDemandPrice": 100.0, "InstanceType": "m5.xlarge", "WeightedCapacity": 1 } ], "Id": "if-2ABC4DEFGHIJ4" } ] }