すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:スクリプトを実行するためのブートストラップアクションの使用

最終更新日:Feb 26, 2025

E-MapReduce (EMR) では、ブートストラップアクションを使用して、サードパーティ製ソフトウェアをインストールしたり、クラスタのランタイム環境を変更したりできます。このトピックでは、ブートストラップアクションを追加する方法といくつかの例について説明します。

背景情報

ブートストラップアクションを使用すると、クラスタの作成時、スケールアウト時、または自動スケーリングのトリガー時に、新しいノードで特定のスクリプトを自動的に実行できます。手動実行機能を使用すると、要件に合わせて、複数の既存ノードで指定されたスクリプトを同時に実行できます。スクリプトを手動で実行する方法の詳細については、「スクリプトを手動で実行する」をご参照ください。

ブートストラップアクションは、手動で実行されるスクリプトに似ています。クラスタの作成時または作成後に、ブートストラップアクションを使用して、EMR クラスタでサポートされていない操作を実行できます。たとえば、次の操作を実行できます。

  • Yellowdog Updater Modified (YUM) を使用して、インストールパッケージが利用可能なソフトウェアをインストールします。

  • インターネットからパブリックソフトウェアをダウンロードします。

  • Object Storage Service (OSS) からデータを読み取ります。

  • Flink や Impala などのサービスをインストールして実行します。

制限

  • クラスタには最大 10 個のブートストラップアクションを追加できます。ブートストラップアクションは、指定した順序で実行されます。

  • デフォルトでは、ルートアカウントを使用して指定されたスクリプトが実行されます。スクリプトで su - hadoop コマンドを実行して、hadoop ユーザーに切り替えることもできます。

ブートストラップアクションを追加する

次のいずれかの方法を使用して、ブートストラップアクションを追加できます。

方法 1:クラスタの作成時にブートストラップアクションを追加する

  1. ECS 上の EMR ページに移動します。

    1. EMR コンソール にログインします。左側のナビゲーションウィンドウで、[ ECS 上の EMR] をクリックします。

    2. 上部のナビゲーションバーで、ビジネス要件に基づいて リージョンとリソースグループを選択します。

  2. [ECS 上の EMR] ページで、[クラスタの作成] をクリックします。

  3. [詳細設定] セクションの [基本設定] ステップで、[ブートストラップアクション] を見つけて、[ブートストラップアクションの追加] をクリックします。

  4. 次の表に示すパラメータを設定します。

    パラメータ

    説明

    アクション名

    追加するブートストラップアクションの名前。

    スクリプトパス

    スクリプトファイルが配置されている OSS パス。

    oss://**/*.sh 形式でこのパラメータを設定する必要があります。

    パラメータ

    ブートストラップアクションスクリプトのパラメータ。このパラメータは、スクリプトで参照される変数の値を指定するために使用されます。

    実行時間

    • コンポーネントのインストール前: サービスがインストールされる前に、システムがスクリプトを実行します。

    • コンポーネントの起動前: インストールされているサービスが起動される前に、システムがスクリプトを実行します。

    • コンポーネントの起動後: デプロイされたサービスが起動された後に、システムがスクリプトを実行します。

      次の図は、手順を示しています。

    実行失敗ポリシー

    • 続行: スクリプトの実行に失敗した場合、システムは次のスクリプトの実行を続行します。これは、クラスタの作成またはスケールアウトには影響しません。

    • 停止: スクリプトの実行に失敗した場合、システムはスクリプトの実行を停止します。クラスタの作成またはスケールアウトは失敗します。

    実行範囲

    実行範囲。有効な値:

    • クラスタ: ブートストラップアクションはクラスタ全体に適用されます。

    • ノードグループタイプ: ブートストラップアクションは、特定タイプのノードグループにのみ適用されます。

    のブートストラップアクションの例を参照できます。

    説明

    追加されたブートストラップアクションは実行に失敗する可能性があります。ただし、この失敗はクラスタの作成には影響しません。

    詳細については、「クラスタを作成する」をご参照ください。クラスタが作成された後、[スクリプト操作] タブで例外が発生したかどうかを確認できます。例外が発生した場合は、トラブルシューティングのために スクリプト実行ログを表示 できます。

方法 2:クラスタの作成後にブートストラップアクションを追加する

  1. スクリプト操作 タブに移動します。

    1. EMR コンソール にログインします。左側のナビゲーションウィンドウで、[ ECS 上の EMR] をクリックします。

    2. 上部のナビゲーションバーで、ビジネス要件に基づいて リージョンとリソースグループを選択します。

    3. 管理するクラスターを見つけ、[アクション] 列の [サービス] をクリックします。

    4. [スクリプト操作] タブをクリックします。

  2. [ブートストラップアクション] タブで、[ブートストラップアクションの追加] をクリックします。

  3. [ブートストラップアクションの追加] ダイアログボックスで、次の表に示すパラメータを設定します。

    image

    パラメータ

    説明

    名前

    追加するブートストラップアクションの名前。

    スクリプトアドレス

    スクリプトファイルが配置されている OSS パス。

    oss://**/*.sh 形式でこのパラメータを設定する必要があります。

    パラメータ

    ブートストラップアクションスクリプトのパラメータ。このパラメータは、スクリプトで参照される変数の値を指定するために使用されます。

    実行範囲

    実行範囲。有効な値:

    • クラスタ: ブートストラップアクションはクラスタ全体に適用されます。

    • ノードグループタイプ: ブートストラップアクションは、選択したタイプのノードグループにのみ適用されます。

    • ノードグループ: ブートストラップアクションは、選択したノードグループにのみ適用されます。

    実行時間

    • コンポーネントのインストール前: サービスがインストールされる前に、システムがスクリプトを実行します。

    • コンポーネントの起動前: インストールされているサービスが起動される前に、システムがスクリプトを実行します。

    • コンポーネントの起動後: デプロイされたサービスが起動された後に、システムがスクリプトを実行します。

      次の図は、手順を示しています。

    実行失敗ポリシー

    • 続行: スクリプトの実行に失敗した場合、システムは次のスクリプトの実行を続行します。これは、クラスタの作成またはスケールアウトには影響しません。

    • 停止: スクリプトの実行に失敗した場合、システムはスクリプトの実行を停止します。クラスタの作成またはスケールアウトは失敗します。

  4. [OK] をクリックします。

    のブートストラップアクションの例を参照できます。

    既存のブートストラップアクションに対して次の操作を実行できます。

    • ブートストラップアクションの編集: 編集するブートストラップアクションを見つけて、[操作] 列の [編集] をクリックします。

    • ブートストラップアクションの複製: 複製するブートストラップアクションを見つけて、[操作] 列の [複製] をクリックします。

    • ブートストラップアクションの削除: 削除するブートストラップアクションを見つけて、[操作] 列の [削除] をクリックします。

スクリプト実行ログを表示する

説明

スクリプト内の目的の場所にログ出力ロジックを追加することをお勧めします。このようにして、操作ログに基づいてスクリプトのステータスを表示できます。

[操作履歴] パネルでブートストラップアクションスクリプトの実行ログを表示するには、次の操作を実行します。

  1. [サービス] タブに移動します。

    1. EMR コンソール にログインします。

    2. 左側のナビゲーションウィンドウで、[ECS 上の EMR] をクリックします。

    3. 上部のナビゲーションバーで、ビジネス要件に基づいてリージョンとリソースグループを選択します。

    4. [EMR On ECS] ページで、目的のクラスターを見つけ、アクション 列の [サービス] をクリックします。

  2. [スクリプト操作] タブで、管理するスクリプトを見つけて、[操作] 列の [実行結果の表示] をクリックします。スクリプト操作[実行結果の表示]アクション

  3. [操作履歴] パネルで、ブートストラップアクションスクリプトの操作レコードを見つけて、詳細を表示します。

    • Data Lake、Dataflow、OLAP、Data Serving、およびカスタムクラスタ: create または increaseNodeGroup 操作レコードを見つけて、展开 をクリックしてアクティビティの詳細を表示します。RUN_BOOTSTRAP_CLUSTER_SCRIPT_<ブートストラップアクション名>_<ブートストラップアクション ID> で始まる名前のタスクは、ブートストラップアクションに関連するアクティビティです。Stdout ログと Stderr ログを表示できます。

    • Hadoop、Data Science、および EMR Studio クラスタ: CREATE_CLUSTER または RESIZE_CLUSTER 操作レコードを見つけて、展开 をクリックしてアクティビティの詳細を表示します。pollDeployTaskStatusActivity の下で RUN_SCRIPT_HOST_** で始まる名前のタスクは、ブートストラップアクションに関連するアクティビティです。Stdout と Stderr の実行ログを表示できます。

ブートストラップアクションを追加する場合は、ビジネス要件に基づいて、ブートストラップアクション名、スクリプトファイルの OSS パス、およびスクリプトのパラメータを指定する必要があります。ブートストラップアクションが実行されると、各ノードは指定された OSS パスからスクリプトをダウンロードし、スクリプトを直接またはオプションのパラメータに基づいて実行します。このセクションでは 2 つの例を示します。

  • 例 1

    スクリプトで OSS からダウンロードするファイルを指定できます。この例では、次のスクリプトを使用して、oss://<yourBucket>/ ディレクトリから <myFile>.tar.gz ファイルをダウンロードし、オンプレミスマシンの /<yourDir> ディレクトリにファイルを解凍できます。

    重要

    スクリプト内の OSS エンドポイントは、内部エンドポイント、パブリックエンドポイント、または VPC エンドポイントにすることができます。クラシックネットワークを使用する場合は、内部エンドポイントを指定する必要があります。たとえば、中国 (杭州) リージョンに対応する内部エンドポイントは oss-cn-hangzhou-internal.aliyuncs.com です。仮想プライベートクラウド (VPC) を使用する場合は、VPC からアクセスできるエンドポイントを指定する必要があります。たとえば、中国 (杭州) リージョンに対応するエンドポイントは vpc100-oss-cn-hangzhou.aliyuncs.com です。

    • Data Lake、Dataflow、OLAP、Data Serving、およびカスタムクラスタ

      #!/bin/bash
      ossutil64 cp oss://<yourBucket>/<myFile>.tar.gz  ./  -e oss-cn-hangzhou-internal.aliyuncs.com -i <yourAccessKeyId>  -k <yourAccessKeySecret>
      mkdir -p /<yourDir>
      tar -zxvf <myFile>.tar.gz -C /<yourDir>
    • Hadoop クラスタ

      #!/bin/bash
      osscmd --id=<yourAccessKeyId> --key=<yourAccessKeySecret> --host=oss-cn-hangzhou-internal.aliyuncs.com get oss://<yourBucket>/<myFile>.tar.gz ./
      mkdir -p /<yourDir>
      tar -zxvf <myFile>.tar.gz -C /<yourDir>
  • 例 2

    YUM を使用して追加のシステムソフトウェアをインストールできます。たとえば、次のスクリプトを使用して ld-linux.so.2 をインストールできます。

    #!/bin/bash
    yum install -y ld-linux.so.2

よくある質問

  • ブートストラップアクションのスクリプトが中断されたが、スクリプトログにエラーメッセージが表示されない場合はどうすればよいですか。

    スクリプト内の目的の場所にログ出力ロジックを追加することをお勧めします。このようにして、操作ログに基づいてスクリプトのステータスを表示できます。ほとんどの場合、クラスタスクリプトで発生するエラーは、次のいずれかの理由が原因である可能性があります。

    • ネットワーク接続が異常です。クラスタの ECS インスタンスと OSS バケットは同じリージョンに存在する必要があります。たとえば、中国 (北京) リージョンの ECS インスタンスは、中国 (北京) リージョン以外のリージョンの OSS バケットに接続できません。

    • クラスタの ECS インスタンスが AccessKey ペアを取得できません。ほとんどの場合、この問題は、ECS インスタンスにロール AliyunECSInstanceForEMRRole が割り当てられていないために発生します。

    • スクリプトで nohup コマンドが使用されていますが、出力がリダイレクトされていません。その結果、タスクが長時間終了しません。nohup ... >*** 2>&1 を使用する必要があります。

    • Windows オペレーティングシステムを実行している ECS インスタンスでスクリプトを編集するときに、改行が含まれています。その結果、Linux 環境でスクリプトを実行するとエラーが発生します。操作履歴のエラーログに ^M が含まれているかどうかを確認できます。エラーログに ^M が含まれている場合は、Linux 環境でスクリプトを再度編集して OSS にアップロードすることをお勧めします。

  • ブートストラップアクションのスクリプトに YARN または Hadoop 分散ファイルシステム (HDFS) に関連するコマンドが含まれていない場合はどうすればよいですか。

    デフォルトでは、EMR クラスタのスクリプトにはプロファイル情報は含まれていません。スクリプトで YARN または HDFS に関連するコマンドを実行する場合は、スクリプトの先頭に . /etc/profile を追加します。

    重要

    . /etc/profile を追加する場合は、./etc/profile の間にスペースがあることに注意してください。