実行中のクラスター内のインスタンスグループの再設定 - Amazon EMR

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

実行中のクラスター内のインスタンスグループの再設定

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

新しい Amazon EMRコンソールでインスタンスグループのアプリケーション設定を更新すると、コンソールは新しい設定を既存の設定とマージして、新しいアクティブな設定を作成しようとします。Amazon が設定をマージEMRできない場合、コンソールからアラートが表示されます。

インスタンスグループの再設定リクエストを送信すると、Amazon は新しい設定仕様にバージョン番号をEMR割り当てます。 CloudWatch イベントを表示することで、設定のバージョン番号またはインスタンスグループの状態を追跡できます。詳細については、「イベントのモニタリング CloudWatch 」を参照してください。

注記

クラスターの作成時に指定したクラスター設定に対して実行できるのは上書きのみであり、削除はできません。既存の設定と指定したファイルの間に違いがある場合、Amazon は、 を使用してクラスターに接続中に変更した設定など、手動で変更された設定をSSH、指定されたインスタンスグループのクラスターのデフォルトにEMRリセットします。

インスタンスグループの再設定時の考慮事項

再設定アクション

Amazon EMRコンソール、 AWS Command Line Interface (AWS CLI)、または を使用して再設定リクエストを送信すると AWS SDK、Amazon は既存のクラスター上の設定ファイルEMRを確認します。既存の設定と指定したファイルの間に違いがある場合、Amazon は再設定アクションEMRを開始し、一部のアプリケーションを再起動し、 を使用してクラスターに接続している間に変更した設定などSSH、手動で変更された設定を、指定されたインスタンスグループのクラスターのデフォルトにリセットします。

注記

Amazon EMRは、インスタンスグループの再設定のたびにいくつかのデフォルトアクションを実行します。これらのデフォルトのアクションが、ユーザーが行ったクラスターのカスタマイズと競合して、再設定に失敗することがあります。再設定失敗のトラブルシューティング方法については、インスタンスグループの再設定のトラブルシューティングを参照してください。

Amazon EMR は、リクエストで指定した設定分類の再設定アクションも開始します。これらのアクションの完全なリストについては、EMR使用する Amazon のバージョンの設定分類セクションを参照してください。例えば、6.2.0 の設定分類です。

注記

Amazon EMRリリースガイドには、Amazon EMRバージョン 5.32.0 および 6.2.0 以降の再設定アクションのみが記載されています。

サービスの中断

Amazon はローリングプロセスEMRに従って、Task インスタンスグループと Core インスタンスグループのインスタンスを再設定します。インスタンスグループ内のインスタンスのうち、一度に変更および再起動されるのはわずか 10% です。このプロセスは完了するまでに時間がかかりますが、実行中のクラスターでアプリケーションが失敗する可能性は低くなります。

YARN 再起動中にYARNジョブを実行するには、複数のマスターノードを持つ Amazon EMRクラスターを作成するか、yarn-site設定分類trueyarn.resourcemanager.recovery.enabled を に設定します。複数のマスターノードの使用の詳細については、「高可用性YARN ResourceManager」を参照してください。

アプリケーションの検証

Amazon EMR は、クラスター上の各アプリケーションが再設定の再起動プロセス後に実行されていることを確認します。使用できないアプリケーションがある場合、再設定操作全体が失敗します。再設定オペレーションが失敗した場合、Amazon は設定パラメータを以前の動作バージョンにEMR逆にします。

注記

再設定の失敗を回避するため、クラスターに使用する予定のアプリケーションのみをインストールすることをお勧めします。再設定リクエストを送信する前に、すべてのクラスターアプリケーションが正常に稼働していることを確認することもお勧めします。

再設定のタイプ

インスタンスグループは、2 つの方法のいずれかで再設定できます。

  • 上書き: デフォルトの再設定方法と、5.35.0 および 6.6.0 より前の Amazon EMRリリースで使用可能な唯一の再設定方法。この方法で再設定すると、クラスター上のすべてのファイルが、新しく送信した設定セットで強制的に上書きされます。メソッドは、再設定 の外部で行われた設定ファイルへの変更をすべて消去しますAPI。

  • マージ: Amazon EMRリリース 5.35.0 および 6.6.0 以降でサポートされる再設定方法。ただし、Amazon EMRコンソールではサポートされるバージョンはありません。この方法で再設定すると、新しく送信した設定が、クラスターに既に存在する設定と統合されます。このオプションでは、送信した新しい設定のみが追加または変更されます。既存の設定は保持されます。

注記

Amazon EMR は、サービスが正しく実行されていることを確認するために必要な重要な Hadoop 設定を引き続き上書きします。

制約事項

実行中のクラスターのインスタンスグループを再設定するときは、次の制限を考慮してください。

  • 特にYARNアプリケーションが正しく設定されていない場合、再起動中に 以外のアプリケーションが失敗したり、クラスターの問題が発生したりする可能性があります。最大メモリとCPU使用量に近づいているクラスターは、再起動プロセス後に問題が発生する可能性があります。これは、マスターインスタンスグループに対して特にあてはまります。

  • インスタンスグループのサイズ変更中は、再設定リクエストを送信できません。インスタンスグループのサイズ変更中に再設定を開始した場合、インスタンスグループのサイズ変更が完了するまで再設定を開始することはできません。再設定中にサイズ変更を行う場合も同様です。

  • インスタンスグループを再設定すると、Amazon はアプリケーションEMRを再起動して新しい設定を有効にします。再設定中にアプリケーションが使用されていると、ジョブが失敗したり、アプリケーションで予期しない動作が発生したりする可能性があります。

  • インスタンスグループの再設定が失敗した場合、Amazon は設定パラメータを以前の動作バージョンにEMR逆にします。バージョンを戻せなかった場合は、新しい ModifyInstanceGroup リクエストを送信して、インスタンスグループを SUSPENDED 状態から復旧させる必要があります。

  • 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 ではサポートされていません。

  • Amazon は、Amazon EMRバージョン 5.27.0 以降でのみ、複数のプライマリノードを持つ Amazon EMRクラスターでのアプリケーション再設定リクエストEMRをサポートします。

  • hdfs-encryption-zones 複数のプライマリノードを持つ Amazon EMRクラスターでは、分類の再設定や Hadoop KMS設定分類はサポートされていません。

  • Amazon EMRは現在、 の再起動を必要とするキャパシティスケジューラに対する特定の再設定リクエストをサポートしていませんYARN ResourceManager。例えば、キューを完全に削除することはできません。

コンソールでのインスタンスグループの再設定

注記

Amazon EMRコンソールは、マージタイプの再設定をサポートしていません。

  1. https://console.aws.amazon.com/emr で Amazon EMRコンソールを開きます。

  2. [名前] の下のクラスター一覧で、再設定するアクティブなクラスターを選択します。

  3. クラスターのクラスター詳細ページを開き、[設定] タブに移動します。

  4. [フィルタ] ドロップダウンリストで、再設定するインスタンスグループを選択します。

  5. 再設定ドロップダウンメニューで、テーブル で編集 または JSON ファイル で編集 を選択します。

    • テーブルで編集する -- 設定分類テーブルで、既存の設定のプロパティと値を編集するか、[設定の追加] を選択して追加の設定分類を指定します。

    • JSON ファイルで編集 - 設定を に直接入力するかJSON、短縮構文 (シャドウテキストで表示) を使用します。それ以外の場合は、JSONConfigurationsオブジェクトを含むURIファイルの Amazon S3 を指定します。

    注記

    設定分類テーブルの [ソース] 列は、クラスター作成時と、このインスタンスグループ用の追加設定の指定時のどちらで設定を指定するかを示しています。インスタンスグループの設定は、両方のソースから編集することができます。最初のクラスター設定を削除することはできませんが、インスタンスグループの設定は上書きすることができます。

    また、ネストされた設定分類は、テーブルで直接追加または編集することもできます。たとえば、export の追加の hadoop-env サブ分類を指定するには、テーブルで hadoop.export 設定分類を追加します。次に、この分類の特定のプロパティおよび値を指定します。

  6. (オプション) [Apply this configuration to all active instance groups (この設定をすべてのアクティブインスタンスグループに適用する)] を選択します。

  7. 変更を保存します。

を使用してインスタンスグループを再設定する CLI

modify-instance-groups コマンドを使用して、実行中のクラスター内のインスタンスグループに新しい設定を指定します。

注記

次の例では、<j-2AL4XXXXXX5T9> をクラスター ID に置き換えます。<ig-1xxxxxxx9> インスタンスグループ ID を入力します。

例 - インスタンスグループの設定を置き換える

次の例では、 という設定JSONファイルを参照して、インスタンスグループのYARNNodeManager ディスクヘルスチェッカーの プロパティinstanceGroups.jsonを編集します。

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

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "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" }, "Configurations":[] } ] } ]
  2. 以下のコマンドを実行します。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
例 - インスタンスグループに設定を追加する

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

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

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

    [ { "InstanceGroupId":"<ig-1xxxxxxx9>", "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" }, "Configurations":[] } ] } ]
  2. 以下のコマンドを実行します。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
例 — マージタイプの再設定を使用してインスタンスグループに設定を追加する

デフォルトの上書き再設定によってインスタンスグループに設定を追加する場合は、そのインスタンスグループに以前指定したすべての設定を、新しい ModifyInstanceGroup リクエストに含める必要があります。そうしない場合、上書きによって、以前指定した設定が削除されます。マージの再設定では、この操作は不要です。ただし、リクエストでは、新しい設定のみ指定する必要があります。

次の例では、YARN NodeManager 仮想メモリチェッカーの プロパティを追加します。これはマージタイプの再設定であるため、YARNNodeManager ディスクヘルスチェッカーに以前に指定した値は上書きされません。

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

    [ {"InstanceGroupId":"<ig-1xxxxxxx9>", "ReconfigurationType" :"MERGE", "Configurations":[ {"Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
  2. 以下のコマンドを実行します。

    aws emr modify-instance-groups --cluster-id <j-2AL4XXXXXX5T9> \ --instance-groups file://instanceGroups.json
例 - インスタンスグループの設定を削除する

インスタンスグループの設定を削除するには、前の設定を除外する新しい再設定リクエストを送信します。

注記

最初のクラスター設定に対して実行できるのは上書きのみです。この設定を削除することはできません。

例えば、前の例からYARN NodeManager ディスクヘルスチェッカーの設定を削除するには、次の内容instanceGroups.jsonの新しい を送信します。

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[ { "Classification":"yarn-site", "Properties":{ "yarn.nodemanager.vmem-check-enabled":"true", "yarn.nodemanager.vmem-pmem-ratio":"3.0" }, "Configurations":[] } ] } ]
注記

最後の再設定リクエストに含まれる設定をすべて削除するには、空の設定の配列を指定して再設定リクエストを送信します。例:

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "Configurations":[] } ]
例 — 1 つのリクエストでインスタンスグループの再設定とサイズ変更を実行する

次の例は、同じリクエストでインスタンスグループを再設定およびサイズ変更する方法JSONを示しています。

[ { "InstanceGroupId":"<ig-1xxxxxxx9>", "InstanceCount":5, "EC2InstanceIdsToTerminate":["i-123"], "ForceShutdown":true, "ShrinkPolicy":{ "DecommissionTimeout":10, "InstanceResizePolicy":{ "InstancesToTerminate":["i-123"], "InstancesToProtect":["i-345"], "InstanceTerminationTimeout":20 } }, "Configurations":[ { "Classification":"yarn-site", "Configurations":[], "Properties":{ "yarn.nodemanager.disk-health-checker.enable":"true", "yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage":"100.0" } } ] } ]

Java を使用してインスタンスグループを再設定する SDK

注記

次の例では、<j-2AL4XXXXXX5T9> をクラスター ID に置き換えます。<ig-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 configuration = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withReconfigurationType("MERGE"); .withConfigurations(configuration); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

次のコードスニペットでは、空の設定の配列を指定して、インスタンスグループに対して前に指定した設定を削除します。

List<Configuration> configurations = new ArrayList<Configuration>(); InstanceGroupModifyConfig igConfig = new InstanceGroupModifyConfig() .withInstanceGroupId("<ig-1xxxxxxx9>") .withConfigurations(configurations); ModifyInstanceGroupsRequest migRequest = new ModifyInstanceGroupsRequest() .withClusterId("<j-2AL4XXXXXX5T9>") .withInstanceGroups(igConfig); emr.modifyInstanceGroups(migRequest);

インスタンスグループの再設定のトラブルシューティング

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

The reconfiguration operation for instance group ig-1xxxxxxx9 in Amazon EMR cluster j-2AL4XXXXXX5T9 (ExampleClusterName) failed at 2021-01-01 00:00 UTC and took 2 minutes to fail. Failed configuration version is example12345. Failure message: Instance i-xxxxxxx1, i-xxxxxxx2, i-xxxxxxx3 failed with message "This is an example failure message".

再設定失敗に関する詳細データを収集するには、ノードのプロビジョニングログを確認します。これは、次のようなメッセージを受信したときに特に有用です。

i-xxxxxxx1 failed with message “Unable to complete transaction and some changes were applied.”
On the node
ノードに接続してノードのプロビジョニングログにアクセスする
  1. SSH を使用して、再設定が失敗したノードに接続します。手順については、「Linux インスタンス用 Amazon ユーザーガイド」の「Linux インスタンスへの接続」を参照してください。 EC2

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

    /mnt/var/log/provision-node/
  3. reports サブディレクトリを開き、再設定のノードのプロビジョニングレポートを検索します。reports ディレクトリは、再設定バージョン番号、汎用一意識別子 (UUID)、Amazon EC2インスタンスの IP アドレス、およびタイムスタンプによってログを整理します。各レポートは、再設定プロセスに関する詳細情報を含む圧縮YAMLファイルです。

    レポートファイルの名前とパスの例を次に示します。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  4. レポートは、次の例に示すように、zless などのファイルビューワーを使用して確認できます。

    zless 202104061715.yaml.gz
Amazon S3
Amazon S3 を使用してノードのプロビジョニングログにアクセスするには
  1. にサインイン AWS Management Console し、 で Amazon S3 コンソールを開きますhttps://console.aws.amazon.com/s3/

  2. ログファイルをアーカイブするようにクラスターを設定したときに指定した Amazon S3 バケットを開きます。

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

    DOC-EXAMPLE-BUCKET/elasticmapreduce/<cluster id>/node/<instance id>/provision-node/
  4. reports フォルダを開き、再設定のノードのプロビジョニングレポートを検索します。reports フォルダは、再設定バージョン番号、汎用一意識別子 (UUID)、Amazon EC2インスタンスの IP アドレス、およびタイムスタンプによってログを整理します。各レポートは、再設定プロセスに関する詳細情報を含む圧縮YAMLファイルです。

    レポートファイルの名前とパスの例を次に示します。

    /reports/2/ca598xxx-cxxx-4xxx-bxxx-6dbxxxxxxxxx/ip-10-73-xxx-xxx.ec2.internal/202104061715.yaml.gz
  5. ログファイルを表示するには、Amazon S3 からローカルマシンにログファイルをテキストファイルとしてダウンロードします。手順については、「オブジェクトのダウンロード」を参照してください。

各ログファイルには、関連する再設定に関する詳細なプロビジョニングレポートが含まれています。エラーメッセージ情報を検索するには、レポートの err ログレベルを検索します。レポートの形式は、クラスターEMR上の Amazon のバージョンによって異なります。

次の例は、5.32.0 および 6.2.0 より前の Amazon EMRリリースバージョンのエラー情報を示しています。

- !ruby/object:Puppet::Util::Log level: !ruby/sym err tags: - err message: "Example detailed error message." source: Puppet time: 2021-01-01 00:00:00.000000 +00:00

Amazon EMRリリースバージョン 5.32.0 および 6.2.0 以降では、代わりに次の形式が使用されます。

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