実行中のクラスターのサイズを手動で変更する - Amazon EMR

実行中のクラスターのサイズを手動で変更する

AWS Management Console、AWS CLI、または Amazon EMR API を使用して、実行中のクラスターのコアとタスクのインスタンスグループ、およびインスタンスフリートに対して、インスタンスの追加と削除を実行できます。クラスターがインスタンスグループを使用する場合、明示的にインスタンス数を変更します。クラスターでインスタンスフリートを使用する場合、オンデマンドインスタンスとスポットインスタンスのターゲットユニットを変更できます。次に、インスタンスフリートは新しいターゲットに合わせてインスタンスを追加または削除します。詳細については、「インスタンスフリートオプション」を参照してください。アプリケーションは、インスタンスが利用可能になったらすぐに、新しくプロビジョニングされた Amazon EC2 インスタンスを使用してノードをホストできます。インスタンスを削除すると、Amazon EMR はジョブを中断しない方法でタスクを終了し、データ損失を防止します。詳細については、「タスクの完了時に終了」を参照してください。

コンソールを使用してクラスターのサイズを変更する

Amazon EMR コンソールを使用して、実行中のクラスターのサイズを変更できます。

注記

Amazon EMR コンソールは、再設計され、使いやすくなりました。古いコンソールと新しいコンソールエクスペリエンスの違いについては、「コンソールの新機能」を参照してください。

New console
新しいコンソールを使用して既存のクラスターのインスタンス数を変更するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. 左側のナビゲーションペインの [EMR on EC2][クラスター] を選択し、更新するクラスターを選択します。クラスターは実行中である必要があります。プロビジョニングしているクラスターや終了したクラスターのサイズを変更することはできません。

  3. クラスターの詳細ページの [インスタンス] タブで、[インスタンスグループ] パネルを表示します。

  4. 既存のインスタンスグループのサイズを変更するには、サイズを変更するコアインスタンスグループまたはタスクインスタンスグループの横にあるラジオボタンを選択し、[インスタンスグループのサイズを変更] を選択します。インスタンスグループの新しいインスタンス数を指定し、[サイズ変更] を選択します。

    注記

    実行中のインスタンスグループのサイズを縮小することを選択した場合、Amazon EMR はデータ損失を最小限に抑えるため、グループから削除するインスタンスをインテリジェントに選択します。サイズ変更アクションをより細かく管理するには、インスタンスグループの [ID] を選択し、削除するインスタンスを選択して、[削除] オプションを使用します。インテリジェントなスケールダウン動作の詳細については、「クラスターのスケールダウン」を参照してください。

  5. サイズ変更アクションをキャンセルする場合は、ステータスが [サイズ変更中] のインスタンスグループのラジオボタンを選択し、アクションのリストから [サイズ変更を停止] を選択します。

  6. ワークロードの増加に応じて 1 つまたは複数のタスクインスタンスグループをクラスターに追加するには、リストアクションから [タスクインスタンスグループを追加] を選択します。Amazon EC2 インスタンスタイプを選択し、タスクグループのインスタンス数を入力して、[タスクインスタンスグループを追加] を選択すると、クラスターの [インスタンスグループ] パネルに戻ります。

Old console
古いコンソールを使用して既存のクラスターのインスタンス数を変更するには
  1. [Cluster List] ページで、サイズを変更するクラスターを選択します。

  2. [クラスターの詳細] ページで、[ハードウェア] を選択します。

  3. クラスターでインスタンスグループを使用する場合は、サイズを変更するインスタンスグループの [インスタンス数] 列で [サイズ変更] を選択し、新しいインスタンス数を入力して、緑色のチェックマークを選択します。

    - または -

    クラスターでインスタンスフリートを使用する場合は、[プロビジョニングされたキャパシティー] 列の [サイズ変更] を選択し、[オンデマンドユニット数][スポットユニット数] に新しい値を入力して、[サイズ変更] を選択します。

ノードの数を変更すると、インスタンスグループの [Status (ステータス)] が更新されます。変更リクエストが完了すると、[Status (ステータス)] が [Running (実行中)] になります。

AWS CLI を使用してクラスターのサイズを変更する

実行中のクラスターのサイズを変更するために、AWS CLI を使用できます。タスクノードの数は増減することができ、実行中のクラスターのコアノードの数を増やすことができます。AWS CLI または API を使用して、コアインスタンスグループのインスタンスをシャッドダウンすることもできます。そうする場合は、注意が必要です。コアインスタンスグループのインスタンスをシャッドダウンすると、データが失われる可能性があり、インスタンスは自動的に置換されません。

コアグループおよびタスクグループのサイズの変更以外に、AWS CLI を使用して、実行中のクラスターに 1 つ以上のタスクインスタンスグループを追加することもできます。

AWS CLI を使用して、インスタンス数を変更することでクラスターのサイズを変更するには

コアグループまたはタスクグループにインスタンスを追加し、AWS CLI で modify-instance-groups サブコマンドを InstanceCount パラメータと共に使用して、タスクグループからインスタンスを削除できます。コアグループまたはタスクグループにインスタンスを追加するには、InstanceCount を増やします。タスクグループのインスタンス数を減らすには、InstanceCount を減らします。タスクグループのインスタンス数を 0 に変更すると、すべてのインスタンスが削除されますが、インスタンスグループは削除されません。

  • タスクインスタンスグループのインスタンス数を 3 個から 4 個に増やすには、次のコマンドを入力し、ig-31JXXXXXXBTO をインスタンスグループ ID に置き換えます。

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-31JXXXXXXBTO,InstanceCount=4

    InstanceGroupId を取得するには、describe-cluster サブコマンドを使用します。出力は、各インスタンスグループの ID が含まれている、Cluster という名前の JSON オブジェクトです。このコマンドを使用するには、クラスター ID が必要です (aws emr list-clusters コマンドまたはコンソールを使用して取得できます)。インスタンスグループ ID を取得するには、次のコマンドを入力し、j-2AXXXXXXGAPLF をクラスター ID に置き換えます。

    aws emr describe-cluster --cluster-id j-2AXXXXXXGAPLF

    AWS CLI を使用して、--modify-instance-groups サブコマンドでコアインスタンスグループのインスタンスを終了することもできます。

    警告

    EC2InstanceIdsToTerminate の指定は注意して行う必要があります。インスタンスは、そこで実行中のアプリケーションのステータスにかかわらず即時削除され、自動的には置き換えられません。これは、クラスターの [Scale down behavior] 設定とは無関係です。この方法でインスタンスを削除すると、データ損失や、予測不可能なクラスター動作が発生する可能性があります。

    特定のインスタンスを終了するには、インスタンスグループ ID (aws emr describe-cluster --cluster-id サブコマンドによって返されます) とインスタンス ID(aws emr list-instances --cluster-id サブコマンドによって返されます)が必要です。次のコマンドを入力し、ig-6RXXXXXX07SA をインスタンスグループ ID に置き換え、i-f9XXXXf2 をインスタンス ID に置き換えます。

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-6RXXXXXX07SA,EC2InstanceIdsToTerminate=i-f9XXXXf2

    AWS CLI での Amazon EMR コマンドの使用の詳細については、「https://docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。

AWS CLI を使用して、タスクインスタンスグループを追加することでクラスターのサイズを変更するには

AWS CLI で --add-instance-groups サブコマンドを使用して、1~48 個のタスクインスタンスグループをクラスターに追加できます。タスクインスタンスグループは、プライマリインスタンスグループとコアインスタンスグループが含まれるクラスターにのみ追加できます。AWS CLI を使用する場合は、--add-instance-groups サブコマンドを使用するたびに最大で 5 個のタスクインスタンスグループを追加できます。

  1. クラスターに 1 つのタスクインスタンスグループを追加するには、次のコマンドを入力し、j-JXBXXXXXX37R をクラスター ID に置き換えます。

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge
  2. クラスターに複数のタスクインスタンスグループを追加するには、次のコマンドを入力し、j-JXBXXXXXX37R をクラスター ID に置き換えます。1 つのコマンドで最大 5 個のタスクインスタンスグループを追加できます。

    aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m5.xlarge InstanceCount=10,InstanceGroupType=task,InstanceType=m5.xlarge

    AWS CLI での Amazon EMR コマンドの使用の詳細については、「https://docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。

サイズ変更を中断する

Amazon EMR バージョン 4.1.0 以降を使用して、既存のサイズ変更操作中に、サイズ変更を実行できます。さらに、既に提出されたサイズ変更リクエストを中止したり、新規リクエストを提出して先のリクエストの処理が終了するのを待たずに上書きすることもできます。また、既存のサイズ変更をコンソールから中止することも、クラスターのターゲット数を現在の数とした ModifyInstanceGroups API 呼び出しを使用して中止することも可能です。

以下のスクリーンショットには、[Stop] を選択することで中止することのできる、サイズ変更中のタスクインスタンスグループが示されています。

AWS CLI を使用してサイズ変更を中断するには

AWS CLI を使用して、modify-instance-groups サブコマンドでサイズ変更を中断できます。インスタンスグループに 6 つのインスタンスがあり、これを 10 に増やしたいとします。そして、その後このリクエストをキャンセルしたいとします:

  • 最初のリクエスト:

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=10

    最初のリクエストを中止する 2 番目のリクエスト:

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=6
注記

この処理は非同期であるため、後から申請したリクエストが反映される前に、以前の API リクエストに関したインスタンスの数の変更が表示される場合があります。サイズを縮小する場合、現行のノードで作業中のインスタンスグループのサイズは、それらのノードにおける作業が完了するまで縮小されないことがあります。

停止状態

新しいクラスターノードを起動しようとしているときに、多数のエラーが発生すると、インスタンスグループが停止状態になります。たとえば、ブートストラップアクションの実行中に新しいノードが失敗した場合、インスタンスグループは SUSPENDED 状態になり、新しいノードのプロビジョニングが続行されなくなります。基本となる問題を解決したら、クラスターのインスタンスグループで必要な数のノードをリセットしてください。その後、インスタンスグループはノードの割り当てを再開します。インスタンスグループを変更すると、Amazon EMR は再度ノードをプロビジョニングしようとします。実行中のノードについては再開または終了しません。

AWS CLI では、list-instances サブコマンドは describe-cluster サブコマンドと同様に、すべてのインスタンスとその状態を返します。Amazon EMR によってインスタンスグループのエラーが検出されると、グループの状態が SUSPENDED に変更されます。

AWS CLI を使用して SUSPENDED 状態のクラスターをリセットするには

クラスター内のインスタンスの状態を表示するには、describe-cluster サブコマンドを入力し、--cluster-id パラメータを指定します。

  • クラスター内のすべてのインスタンスとインスタンスグループについての情報を表示するには、次のコマンドを入力し、j-3KVXXXXXXY7UG をクラスター ID に置き換えます。

    aws emr describe-cluster --cluster-id j-3KVXXXXXXY7UG

    出力には、インスタンスグループとインスタンスの状態に関する情報が表示されます:

    { "Cluster": { "Status": { "Timeline": { "ReadyDateTime": 1413187781.245, "CreationDateTime": 1413187405.356 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2b" }, "Name": "Development Cluster", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "3.2.1", "NormalizedInstanceHours": 16, "InstanceGroups": [ { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187775.749, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "MASTER", "InstanceGroupType": "MASTER", "InstanceType": "m5.xlarge", "Id": "ig-3ETXXXXXXFYV8", "Market": "ON_DEMAND", "RunningInstanceCount": 1 }, { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187781.301, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "CORE", "InstanceGroupType": "CORE", "InstanceType": "m5.xlarge", "Id": "ig-3SUXXXXXXQ9ZM", "Market": "ON_DEMAND", "RunningInstanceCount": 1 } ... }

    特定のインスタンスグループについての情報を表示するには、list-instances サブコマンドを入力し、--cluster-id および --instance-group-types パラメータを指定します。プライマリ、コアまたはタスクグループの情報を表示できます。

    aws emr list-instances --cluster-id j-3KVXXXXXXY7UG --instance-group-types "CORE"

    modify-instance-groups 状態のクラスターをリセットするには、--instance-groups サブコマンドを使用し、SUSPENDED パラメータを指定します。インスタンスグループ ID は、describe-cluster サブコマンドによって返されます。

    aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-3SUXXXXXXQ9ZM,InstanceCount=3

クラスターサイズを縮小する場合の考慮事項

実行中のクラスターのサイズを縮小する場合は、以下の Amazon EMR の動作とベストプラクティスについて考慮してください。

  • 進行中のジョブへの影響を減らすため、Amazon EMR は削除するインスタンスをインテリジェントに選択します。クラスターのスケールダウン動作の詳細については、「Amazon EMR 管理ガイド」の「タスクの完了時に終了」を参照してください。

  • クラスターのサイズをスケールダウンすると、Amazon EMR は削除したインスタンスから残っているインスタンスにデータをコピーします。グループに残っているインスタンスに、このデータを保存するのに十分なストレージ容量があることを確認してください。

  • Amazon EMR は、グループ内のインスタンスの HDFS を廃止しようと試みます。クラスターのサイズを縮小する前に、HDFS への書き込み I/O を最小限に抑えることをお勧めします。

  • クラスターのサイズ縮小時に最も細かく管理するには、コンソールでクラスターを表示して [インスタンス] タブに移動します。サイズを変更するインスタンスグループの [ID] を選択します。次に、削除する特定のインスタンスに対して [削除] オプションを使用します。