

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

# Amazon EMR クラスターのインスタンスフリートの設定
<a name="instance-fleet-reconfiguration"></a>

Amazon EMR バージョン 5.21.0 以降では、実行中のクラスター内のインスタンスフリートごとに、クラスターアプリケーションを再設定して追加の設定分類を指定できます。そのためには、 コマンドラインインターフェイス (AWS CLI)、または AWS SDK AWS を使用できます。

CloudWatch イベントを表示することで、インスタンスフリートの状態を追跡できます。詳細については、「[Instance fleet reconfiguration events](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html#emr-cloudwatch-instance-fleet-events-reconfig)」を参照してください。

**注記**  
クラスターの作成時に指定したクラスター設定に対して実行できるのは上書きのみであり、削除はできません。設定オブジェクトの詳細については、「[RunJobFlow request syntax](https://docs.aws.amazon.com/emr/latest/APIReference/API_RunJobFlow.html#API_RunJobFlow_RequestSyntax)」を参照してください。既存の設定と指定したファイルに差異がある場合、Amazon EMR は SSH を使用してクラスターに接続中に変更した設定などの手動で変更された設定を、指定したインスタンスフリートのクラスターのデフォルト値にリセットします。

Amazon EMR コンソール、コマンドラインインターフェイス (AWS CLI)、または AWS SDK AWS を使用して再設定リクエストを送信すると、Amazon EMR は既存のクラスター上の設定ファイルをチェックします。既存の設定と指定したファイルに差異がある場合、Amazon EMR は再設定アクションを開始し、いくつかのアプリケーションを再起動し、SSH を使用してクラスターに接続中に変更した設定などの手動で変更された設定を、指定したインスタンスフリートのクラスターのデフォルト値にリセットします。

## 再設定動作
<a name="instance-fleet-reconfiguration-behaviors"></a>

再設定は、新しく送信された設定セットでクラスター上の設定を上書きし、再設定 API の外部で行われた設定変更を上書きできます。

Amazon EMR では、ローリングプロセスに従って、タスクインスタンスグループとコアインスタンスフリートのインスタンスの再設定を行います。単一のインスタンスタイプ内のインスタンスのうち、一度に変更および再起動されるのはわずか 1% です。インスタンスフリートに複数の異なるインスタンスタイプ設定がある場合、それらは並行して再設定されます。

再設定は [InstanceTypeConfig](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceTypeConfig.html) レベルで宣言されます。ビジュアルの例については、「[インスタンスフリートの再設定](#instance-fleet-reconfiguration-cli-sdk)」を参照してください。1 つのリクエスト内で 1 つ以上のインスタンスタイプの更新された設定を含む再設定リクエストを送信できます。変更リクエストには、インスタンスフリートの一部であるすべてのインスタンスタイプを含める必要があります。ただし、設定フィールドが入力されたインスタンスタイプは再設定され、フリート内の他の `InstanceTypeConfig` インスタンスは変更されません。再設定は、指定されたインスタンスタイプのすべてのインスタンスが再設定を完了した場合にのみ成功したと見なされます。いずれかのインスタンスが再設定に失敗することにより、インスタンスフリート全てが最後の既知の安定した設定に自動的に戻ります。

## 制限事項
<a name="instance-fleet-reconfiguration-limitations"></a>

実行中のクラスターのインスタンスフリートを再設定するときは、次の制限を考慮してください。
+ 非 Yarn アプリケーションでは、アプリケーションが適切に設定されていない場合は特に、再起動中の失敗やクラスターの問題が発生する可能性があります。メモリや CPU 使用率が最大に近づいているクラスターは、再起動プロセス後に問題が発生する可能性があります。これは、プライマリインスタンスフリートに対して特にあてはまります。「[インスタンスフリートの再設定のトラブルシューティング](#instance-fleet-reconfiguration-troubleshooting)」セクションを参照してください。
+ サイズ変更および再設定オペレーションは並行して実行されません。再設定リクエストは、継続的なサイズ変更に待機し、その逆も同様です。
+ サイズ変更および再設定オペレーションは並行して実行されません。再設定リクエストは、継続的なサイズ変更に待機し、その逆も同様です。
+ インスタンスフリートを再設定後、Amazon EMR は、新しい設定を反映するためにアプリケーションを再起動します。再設定中にアプリケーションが使用されていると、ジョブが失敗したり、アプリケーションで予期しない動作が発生したりする可能性があります。
+ インスタンスフリートのインスタンスタイプ設定の再設定が失敗した場合、Amazon EMR は設定パラメータをインスタンスフリート全体の以前の動作バージョンに反転し、イベントの発生と状態の詳細の更新を行います。バージョンを戻せなかった場合は、新しい `ModifyInstanceFleet` リクエストを送信して、インスタンスフリートを `ARRESTED` 状態から復旧させる必要があります。元に戻すと、[インスタンスフリートの再設定イベント](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-cloudwatch-events.html#emr-cloudwatch-instance-fleet-events-reconfig)が発生し、状態が変更されます。
+ Phoenix 設定分類の再設定リクエストは、Amazon EMR バージョン 5.23.0 以降でのみサポートされていて、Amazon EMR バージョン 5.21.0 や 5.22.0 ではサポートされていません。
+ HBase 設定分類の再設定リクエストは、Amazon EMR バージョン 5.30.0 以降でのみサポートされていて、Amazon EMR バージョン 5.23.0 から 5.29.0 ではサポートされていません。
+ hdfs-encryption-zones 分類または Hadoop KMS 設定分類の再設定は、複数のプライマリノードを持つ Amazon EMR クラスターではサポートされていません。
+ Amazon EMR では現在、YARN ResourceManager の再起動を必要とする YARN Capacity Scheduler の特定の再設定リクエストをサポートしていません。例えば、キューを完全に削除することはできません。
+ YARN を再起動する必要がある場合、実行中のすべての YARN ジョブは通常終了され、失われます。これにより、データ処理が遅延する可能性があります。YARN の再起動中に YARN ジョブを実行するには、複数のプライマリノードを持つ Amazon EMR クラスターを作成するか、yarn-site 設定分類で yarn.resourcemanager.recovery.enabled を `true` に設定します。複数のマスターノードの使用方法については、[高可用性 YARN ResourceManager](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-ha-applications.html#emr-plan-ha-applications-YARN) を参照してください。

## インスタンスフリートの再設定
<a name="instance-fleet-reconfiguration-cli-sdk"></a>

------
#### [ Using the AWS CLI ]

`modify-instance-fleet` コマンドを使用して、実行中のクラスター内のインスタンスフリートに新しい設定を指定します。

**注記**  
次の例では、**j-2AL4XXXXXX5T9** をクラスター ID、**if-1xxxxxxx9** をインスタンスフリート ID に置き換えます。

**例 - インスタンスフリートの設定を置き換える**

**警告**  
起動時に使用したすべての `InstanceTypeConfig` フィールドを指定します。フィールドを含めない場合、起動時に宣言した仕様が上書きされる可能性があります。リストについては、「[InstanceTypeConfig](https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceTypeConfig.html)」を参照してください。

次の例では、instanceFleet.jso という名前の設定 JSON ファイルを参照して、インスタンスフリートの YARN NodeManager ディスクヘルスチェッカーのプロパティを編集します。

**インスタンスフリート変更 JSON**

1. 設定分類を準備し、コマンドを実行するのと同じディレクトリに instanceFleet.json として保存します。

   ```
   {
       "InstanceFleetId":"if-1xxxxxxx9",
       "InstanceTypeConfigs": [
               {
                   "InstanceType": "m5.xlarge",
                  other InstanceTypeConfig fields
                   "Configurations": [
                       {
                           "Classification": "yarn-site",
                           "Properties": {
                               "yarn.nodemanager.disk-health-checker.enable":"true",
                               "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0"
                           }
                       }
                   ]
               },
               {
                   "InstanceType": "r5.xlarge",
                  other InstanceTypeConfig fields
                   "Configurations": [
                       {
                           "Classification": "yarn-site",
                           "Properties": {
                               "yarn.nodemanager.disk-health-checker.enable":"false",
                               "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"70.0"
                           }
                       }
                   ]
               }
           ]
   ```

1. 以下のコマンドを実行してください。

   ```
   aws emr modify-instance-fleet \
   --cluster-id j-2AL4XXXXXX5T9 \
   --region us-west-2 \
   --instance-fleet instanceFleet.json
   ```

**例 – インスタンスフリートに設定を追加する**

インスタンスタイプに設定を追加する場合は、そのインスタンスタイプに対して前に指定した設定すべてを新しい `ModifyInstanceFleet` リクエストに含める必要があります。含めない場合、前に指定した設定が削除されます。

次の例では、YARN NodeManager 仮想メモリチェッカーのプロパティを追加します。設定には、値が上書きされないように YARN NodeManager ディスクヘルスチェッカーに対して前に指定した値も含められています。

1. instanceFleet.json に次の内容を準備し、コマンドを実行するのと同じディレクトリに保存します。

   ```
   {
       "InstanceFleetId":"if-1xxxxxxx9",
       "InstanceTypeConfigs": [
               {
                   "InstanceType": "m5.xlarge",
                   other InstanceTypeConfig fields
                   "Configurations": [
                       {
                           "Classification": "yarn-site",
                           "Properties": {
                               "yarn.nodemanager.disk-health-checker.enable":"true",
                               "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0",
                               "yarn.nodemanager.vmem-check-enabled":"true",
                               "yarn.nodemanager.vmem-pmem-ratio":"3.0"
                           }
                       }
                   ]
               },
               {
                   "InstanceType": "r5.xlarge",
                   other InstanceTypeConfig fields
                   "Configurations": [
                       {
                           "Classification": "yarn-site",
                           "Properties": {
                               "yarn.nodemanager.disk-health-checker.enable":"false",
                               "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"70.0"
                           }
                       }
                   ]
               }
           ]      
   }
   ```

1. 以下のコマンドを実行してください。

   ```
   aws emr modify-instance-fleet \
   --cluster-id j-2AL4XXXXXX5T9 \
   --region us-west-2 \
   --instance-fleet instanceFleet.json
   ```

------
#### [ using the Java SDK ]

**注記**  
次の例では、**j-2AL4XXXXXX5T9** をクラスター ID、**if-1xxxxxxx9** をインスタンスフリート ID に置き換えます。

次のコードスニペットは、 AWS SDK for Java を使用したインスタンスフリートの新しい設定を提供します。

```
AWSCredentials credentials = new BasicAWSCredentials("access-key", "secret-key");
AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials);

Map<String,String> hiveProperties = new HashMap<String,String>();
hiveProperties.put("hive.join.emit.interval","1000");
hiveProperties.put("hive.merge.mapfiles","true");
        
Configuration newConfiguration = new Configuration()
    .withClassification("hive-site")
    .withProperties(hiveProperties);
    
List<InstanceTypeConfig> instanceTypeConfigList = new ArrayList<>();

for (InstanceTypeConfig instanceTypeConfig : currentInstanceTypeConfigList) {
    instanceTypeConfigList.add(new InstanceTypeConfig()
        .withInstanceType(instanceTypeConfig.getInstanceType())
        .withBidPrice(instanceTypeConfig.getBidPrice())
        .withWeightedCapacity(instanceTypeConfig.getWeightedCapacity())
        .withConfigurations(newConfiguration)
    );
}

InstanceFleetModifyConfig instanceFleetModifyConfig = new InstanceFleetModifyConfig()
    .withInstanceFleetId("if-1xxxxxxx9")
    .withInstanceTypeConfigs(instanceTypeConfigList);
    
ModifyInstanceFleetRequest modifyInstanceFleetRequest = new ModifyInstanceFleetRequest()
    .withInstanceFleet(instanceFleetModifyConfig)
    .withClusterId("j-2AL4XXXXXX5T9");

emrClient.modifyInstanceFleet(modifyInstanceFleetRequest);
```

------

## インスタンスフリートの再設定のトラブルシューティング
<a name="instance-fleet-reconfiguration-troubleshooting"></a>

インスタンスフリート内のインスタイプの再設定プロセスが失敗した場合、Amazon EMR は再設定を元に戻し、AAmazon CloudWatch Events イベントを使用して失敗メッセージをログに記録します。イベントには、再設定失敗の簡単な概要が記載されます。ここに、再構成が失敗したインスタンスと、対応する失敗メッセージがリストされます。失敗メッセージの例を次に示します。

`Amazon EMR couldn't revert the instance fleet if-1xxxxxxx9 in the Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) to the previously successful configuration at 2021-01-01 00:00 UTC. The reconfiguration reversion failed because of Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message"...`

### ノードのプロビジョニングログにアクセスするには
<a name="instance-fleet-reconfiguration-troubleshooting-connect-node"></a>

SSH を使用して、再設定が失敗したノードに接続します。詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の 「[Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)」を参照してください。

------
#### [ Accessing logs by connecting to a node ]

1. ノードのプロビジョニングログファイルが含まれる次のディレクトリに移動します。

   ```
   /mnt/var/log/provision-node/
   ```

1. レポートサブディレクトリを開き、再設定のノードのプロビジョニングレポートを検索します。レポートディレクトリでは、再設定のバージョン番号、Universally Unique Identifier (UUID)、Amazon EC2 インスタンスの IP アドレス、およびタイムスタンプによってログが整理されます。各レポートは、再設定プロセスに関する詳細情報が含まれる圧縮された YAML ファイルです。レポートファイルの名前とパスの例を次に示します。

   ```
   /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
   ```

1. レポートは、次の例に示すように、zless などのファイルビューワーを使用して確認できます。

   ```
   zless 202104061715.yaml.gz
   ```

------
#### [ Accessing logs using Amazon S3 ]

にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) で Amazon S3 コンソールを開きます。ログファイルをアーカイブするようにクラスターを設定したときに指定した Amazon S3 バケットを開きます。

1.  ノードのプロビジョニングログファイルが含まれる次のフォルダに移動します。

   ```
   amzn-s3-demo-bucket/elasticmapreduce/cluster id/node/instance id/provision-node/
   ```

1. レポートフォルダを開き、再設定のノードのプロビジョニングレポートを検索します。レポートフォルダでは、再設定のバージョン番号、Universally Unique Identifier (UUID)、Amazon EC2 インスタンスの IP アドレス、およびタイムスタンプによってログが整理されます。各レポートは、再設定プロセスに関する詳細情報が含まれる圧縮された YAML ファイルです。レポートファイルの名前とパスの例を次に示します。

   ```
   /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
   ```

ログファイルを表示するには、Amazon S3 からローカルマシンにログファイルをテキストファイルとしてダウンロードします。手順については、「[オブジェクトのダウンロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)」を参照してください。

------

各ログファイルには、関連する再設定に関する詳細なプロビジョニングレポートが含まれています。エラーメッセージ情報を検索するには、レポートの `err` ログレベルを検索します。レポートの形式は、クラスターの Amazon EMR のバージョンによって異なります。以下の例は、5.32.0 および 6.2.0 以降の Amazon EMR リリースバージョンのエラー情報示し、以下ぼフォーマットを使用します: 

```
- level: err
  message: 'Example detailed error message.'
  source: Puppet
  tags:
  - err
  time: '2021-01-01 00:00:00.000000 +00:00'
  file: 
  line:
```