追加のソフトウェアをインストールするためのブートストラップアクションの作成 - Amazon EMR

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

追加のソフトウェアをインストールするためのブートストラップアクションの作成

ブートストラップアクションを使用することにより、追加のソフトウェアのインストール、またはクラスターインスタンスの設定のカスタマイズを行うことができます。ブートストラップアクションは、Amazon EMR が Amazon Linux Amazon Machine Image (AMI) を使用してインスタンスを起動した後に、クラスターで実行されるスクリプトです。ブートストラップアクションは、お客様がクラスターを作成するときに指定するアプリケーションを Amazon EMR がインストールする前、およびクラスターノードがデータの処理を開始する前に実行されます。実行中のクラスターにノードを追加した場合、ブートストラップアクションはこれらのノードでも同じ方法で実行されます。カスタムブートストラップアクションを作成し、クラスターを作成するタイミングを指定できます。

Amazon EMR AMI バージョン 2.x および 3.x 用の事前定義済みのブートストラップアクションのほとんどは、Amazon EMR リリース 4.x ではサポートされません。たとえば、configure-Hadoopおよびconfigure-daemonsAmazon EMR リリース 4.x ではサポートされません。代わりに、Amazon EMR リリース 4.x ではこの機能がネイティブで提供されます。ブートストラップアクションを Amazon EMR AMI バージョン 2.x および 3.x から Amazon EMR リリース 4.x に移行する方法の詳細については、Amazon EMR 4.x リリースバージョンの違いAmazon EMR リリースガイドを参照してください。

ブートストラップアクションの基本

デフォルトでは、ブートストラップアクションは Hadoop ユーザーとして実行されます。ブートストラップアクションは、sudo を使用し、ルート権限で実行できます。

すべての Amazon EMR 管理インターフェイスでブートストラップアクションがサポートされています。コンソール、AWS CLI、または API から複数の bootstrap-actions パラメータを指定すると、クラスターごとに最大 16 個のブートストラップアクションを指定できます。

Amazon EMR コンソールから、クラスターの作成時に、オプションでブートストラップアクションを指定できます。

CLI を使用する場合、ブートストラップアクションスクリプトへの参照を Amazon EMR に渡すことができます。--bootstrap-actionsパラメーターを使用して、クラスターを作成するときにcreate-clusterコマンドを実行します。--bootstrap-actions パラメータのシンタックスは次のとおりです。

AWS CLI

--bootstrap-actions Path="s3://mybucket/filename",Args=[arg1,arg2]

ブートストラップアクションがゼロ以外のエラーコードを返すと、Amazon EMR はそれをエラーとして処理し、インスタンスを終了します。ブートストラップアクションがエラーになるインスタンスが多すぎると、Amazon EMR はクラスターを終了します。ごくわずかのインスタンスでエラーになった場合、Amazon EMR は失敗したインスタンスの再割り当てを試み、処理を継続します。クラスターの lastStateChangeReason エラーコードを使用して、ブートストラップアクションによって引き起こされたエラーを識別します。

ブートストラップアクションを実行します。

Amazon EMR では、事前に定義されたこのブートストラップアクションを提供し、インスタンス固有の値がinstance.jsonまたはjob-flow.jsonファイルを開きます。コマンドは、Amazon EMR がダウンロードして実行できる Amazon S3 内のファイルを参照できます。

スクリプトは s3://elasticmapreduce/bootstrap-actions/run-if にあります。

次の例では、ノードがマスターの場合に、"running on master node" という文字列をそのまま返します。

AWS CLI を使用して条件付きでコマンドを実行するには

AWS CLI を使用してブートストラップアクションを含めるときは、PathArgs をカンマ区切りリストとして指定します。

  • インスタンス固有の値が instance.json ファイルまたは job-flow.json ファイルで見つかったときに条件付きでコマンドを実行するブートストラップアクションでクラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive --instance-count 1 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/run-if",Args=["instance.isMaster=true","echo running on master node"]

    --instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

    注記

    デフォルト Amazon EMR サービスロールと EC2 インスタンスプロファイルを作成したことがない場合、aws emr create-default-rolesと入力する前にそれらを作成するためにcreate-clusterサブコマンド。

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

シャットダウンアクション

ブートストラップアクションスクリプトで 1 つ以上の shutdown actions を作成するには、スクリプトを /mnt/var/lib/instance-controller/public/shutdown-actions/ ディレクトリに書き込みます。クラスターが終了すると、ディレクトリ内のすべてのスクリプトが並行して実行されます。各スクリプトが 60 秒以内に実行され完了しなければなりません。

ノードの終了時にエラーが発生した場合、シャットダウンアクションスクリプトが実行される保証はありません。

注記

Amazon EMR バージョン 4.0 以降を使用する場合は、手動で作成する必要があります/mnt/var/lib/instance-controller/public/shutdown-actions/ディレクトリに移動します。デフォルトでは存在しませんが、作成後は、このディレクトリのスクリプトがシャットダウンの前に実行されます。ディレクトリを作成するためのマスターノードへの接続の詳細については、「SSH を使用してマスターノードConnect する」を参照してください。

カスタムブートストラップアクションを使用する

カスタムスクリプトを作成すると、カスタマイズされたブートストラップアクションを実行します。Amazon EMR インターフェイスはすべて、カスタムブートストラップアクションを参照できます。

カスタムブートストラップアクションを追加するには、AWS CLIAmazon EMR CLI

次の例は、ブートストラップアクションスクリプトを使用して、圧縮された TAR アーカイブを Amazon S3 からダウンロードし、抽出しています。サンプルスクリプトは、https://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/download.sh

サンプルスクリプトを次に示します。

#!/bin/bash set -e wget -S -T 10 -t 5 http://elasticmapreduce.s3.amazonaws.com/bootstrap-actions/file.tar.gz mkdir -p /home/hadoop/contents tar -xzf file.tar.gz -C /home/hadoop/contents

AWS CLI を使用してカスタムブートストラップアクションでクラスターを作成するには

AWS CLI を使用してブートストラップアクションを含めるときは、PathArgs をカンマ区切りリストとして指定します。次の例では、引数リストが使用されていません。

  • カスタムブートストラップアクションでクラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。

    • Linux、UNIX、Mac OS X ユーザー:

      aws emr create-cluster --name "Test cluster" --release-label emr-4.0.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"
    • Windows ユーザー:

      aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --use-default-roles --ec2-attributes KeyName=myKey --applications Name=Hive Name=Pig --instance-count 3 --instance-type m5.xlarge --bootstrap-actions Path="s3://elasticmapreduce/bootstrap-actions/download.sh"

    --instance-groups パラメータを使用せずにインスタンス数を指定すると、1 つのマスターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンドで指定したインスタンスタイプが使用されます。

    注記

    デフォルト Amazon EMR サービスロールと EC2 インスタンスプロファイルを作成したことがない場合、aws emr create-default-rolesと入力する前にそれらを作成するためにcreate-clusterサブコマンド。

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

コンソールを使用してカスタムブートストラップアクションを追加する

次の手順では、独自のカスタムブートストラップアクションを使用する方法について説明します。

コンソールを使用してカスタムブートストラップアクションでクラスターを作成するには

  1. で Amazon EMR コンソール (https://console.aws.amazon.com/elasticmapreduce/

  2. [Create cluster (クラスターの作成)] を選択します。

  3. [Go to advanced options] をクリックします。

  4. [Create Create]-[Advanced Options] で、説明に従ってステップ 1 と 2 でオプションを選択し、ステップ 3: 全般的なクラスター設定

  5. [Bootstrap Actions] で [Configure and add] を選択して、ブートストラップアクションの [Name]、[JAR location]、および引数を指定します。[Add] (追加) をクリックします。

  6. オプションで、必要に応じてさらにブートストラップアクションを追加します。

  7. クラスターの作成に進みます。ブートストラップアクションは、クラスターがプロビジョニングおよび初期化された後で実行されます。

クラスターのマスターノードの実行中には、マスターノードに接続して、/mnt/var/log/bootstrap-actions/1 ディレクトリにブートストラップアクションが生成したログファイルを確認できます。

カスタムブートストラップアクションを使用して、オブジェクトを Amazon S3 から各ノードにコピーする

アプリケーションをインストールする前に、ブートストラップアクションを使用して、Amazon S3 からクラスター内の各ノードにオブジェクトをコピーできます。AWS CLI はクラスターの各ノードにインストールされ、ブートストラップアクションは AWS CLI コマンドを呼び出すことができます。

次の例で示しているのは、ファイル、myfile.jar、Amazon S3 からローカルフォルダ、/mnt1/myfolderを、各クラスターノードで実行します。このスクリプトは Amazon S3 にファイル名でcopymyfile.sh以下の内容で、

#!/bin/bash aws s3 cp s3://mybucket/myfilefolder/myfile.jar /mnt1/myfolder

クラスターの起動時にスクリプトを指定します。次の AWS CLI はこの例を示します。

aws emr create-cluster --name "Test cluster" --release-label emr-5.33.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hive Name=Pig \ --instance-count 3 --instance-type m5.xlarge \ --bootstrap-actions Path="s3://mybucket/myscriptfolder/copymyfile.sh"