Amazon EMR の以前の AMI バージョンによるクラスターおよびアプリケーション設定のカスタマイズ - Amazon EMR

Amazon EMR の以前の AMI バージョンによるクラスターおよびアプリケーション設定のカスタマイズ

Amazon EMR リリースバージョン 4.0.0 では、設定分類を使用してアプリケーションを設定する簡単な方法が導入されました。詳細については、「アプリケーションの設定」を参照してください。AMI バージョンを使用する場合は、渡した引数とともにブートストラップアクションを使用してアプリケーションを設定します。たとえば、ブートストラップアクション configure-hadoop および configure-daemons は、Hadoop や YARN に固有の --namenode-heap-size などの 環境プロパティを設定します。より新しいバージョンでは、これらは hadoop-envyarn-env 設定分類を使用して設定されます。実行するブートストラップアクションの一般的な設定の詳細については、Github の emr-bootstrap-actions リポジトリを参照してください。

次の表は、より最近の Amazon EMR リリースバージョンでブートストラップアクションを構成分類にマップしています。

Hadoop
影響を受けるアプリケーションファイル名 AMI バージョンのブートストラップアクション 設定分類
core-site.xml configure-hadoop -c core-site
log4j.properties configure-hadoop -l hadoop-log4j
hdfs-site.xml configure-hadoop -s hdfs-site
該当なし 該当なし hdfs-encryption-zones
mapred-site.xml configure-hadoop -m mapred-site
yarn-site.xml configure-hadoop -y yarn-site
httpfs-site.xml configure-hadoop -t httpfs-site
capacity-scheduler.xml configure-hadoop -z capacity-scheduler
yarn-env.sh configure-daemons --resourcemanager-opts yarn-env
[Hive]
影響を受けるアプリケーションファイル名 AMI バージョンのブートストラップアクション 設定分類
hive-env.sh 該当なし hive-env
hive-site.xml hive-script --install-hive-site ${MY_HIVE_SITE_FILE} hive-site
hive-exec-log4j.properties 該当なし hive-exec-log4j
hive-log4j.properties 該当なし hive-log4j
EMRFS
影響を受けるアプリケーションファイル名 AMI バージョンのブートストラップアクション 設定分類
emrfs-site.xml configure-hadoop -e emrfs-site
該当なし s3get -s s3://custom-provider.jar -d /usr/share/aws/emr/auxlib/ emrfs-site (新しい設定 fs.s3.cse.encryptionMaterialsProvider.uri と併用)

全分類の一覧については、アプリケーションの設定 を参照してください。

アプリケーションの環境変数

AMI バージョンを使用する場合、hadoop-user-env.sh スクリプトが、configure-daemons ブートストラップアクションと組み合わせて使用され、Hadoop 環境を設定します。スクリプトには、以下のアクションが含まれます。

#!/bin/bash export HADOOP_USER_CLASSPATH_FIRST=true; echo "HADOOP_CLASSPATH=/path/to/my.jar" >> /home/hadoop/conf/hadoop-user-env.sh

Amazon EMR リリース 4.x では、次の例に示すように hadoop-env 設定分類を使用して同じ手順を実行します。

[       {          "Classification":"hadoop-env",          "Properties":{          },          "Configurations":[             {                "Classification":"export",                "Properties":{                   "HADOOP_USER_CLASSPATH_FIRST":"true",                   "HADOOP_CLASSPATH":"/path/to/my.jar"                }             }          ]       }    ]

別の例として、configure-daemons の使用、--namenode-heap-size=2048 を渡すこと、--namenode-opts=-XX:GCTimeRatio=19 は以下の設定分類と同じです。

[       {          "Classification":"hadoop-env",          "Properties":{          },          "Configurations":[             {                "Classification":"export",                "Properties":{                   "HADOOP_DATANODE_HEAPSIZE": "2048", "HADOOP_NAMENODE_OPTS": "-XX:GCTimeRatio=19"                }             }          ]       }    ]

他のアプリケーションの環境変数は、/home/hadoop/.bashrc では定義されなくなりました。代わりに、コンポーネントやアプリケーションごとに、主に /etc/default のような /etc/default/hadoop ファイルで設定されます。アプリケーション RPM によってインストールされる /usr/bin/ にあるラッパースクリプトでも、バイナリスクリプトを実際に含める前に、追加の環境変数を設定できます。

サービスポート

AMI バージョンを使用する場合は、一部のサービスでカスタムポートを使用します。

ポート設定の変更箇所
設定 AMI バージョン 3.x オープンソースのデフォルト
fs.default.name hdfs://emrDeterminedIP:9000 デフォルト (hdfs://emrDeterminedIP:8020)
dfs.datanode.address 0.0.0.0:9200 デフォルト (0.0.0.0:50010)
dfs.datanode.http.address 0.0.0.0:9102 デフォルト (0.0.0.0:50075)
dfs.datanode.https.address 0.0.0.0:9402 デフォルト (0.0.0.0:50475)
dfs.datanode.ipc.address 0.0.0.0:9201 デフォルト (0.0.0.0:50020)
dfs.http.address 0.0.0.0:9101 デフォルト (0.0.0.0:50070)
dfs.https.address 0.0.0.0:9202 デフォルト (0.0.0.0:50470)
dfs.secondary.http.address 0.0.0.0:9104 デフォルト (0.0.0.0:50090)
yarn.nodemanager.address 0.0.0.0:9103 デフォルト (${yarn.nodemanager.hostname}:0)
yarn.nodemanager.localizer.address 0.0.0.0:9033 デフォルト (${yarn.nodemanager.hostname}:8040)
yarn.nodemanager.webapp.address 0.0.0.0:9035 デフォルト (${yarn.nodemanager.hostname}:8042)
yarn.resourcemanager.address emrDeterminedIP:9022 デフォルト (${yarn.resourcemanager.hostname}:8032)
yarn.resourcemanager.admin.address emrDeterminedIP:9025 デフォルト (${yarn.resourcemanager.hostname}:8033)
yarn.resourcemanager.resource-tracker.address emrDeterminedIP:9023 デフォルト (${yarn.resourcemanager.hostname}:8031)
yarn.resourcemanager.scheduler.address emrDeterminedIP:9024 デフォルト (${yarn.resourcemanager.hostname}:8030)
yarn.resourcemanager.webapp.address 0.0.0.0:9026 デフォルト (${yarn.resourcemanager.hostname}:8088)
yarn.web-proxy.address emrDeterminedIP:9046 デフォルト (値なし)
yarn.resourcemanager.hostname 0.0.0.0 (デフォルト) emrDeterminedIP
注記

emrDeterminedIP は、Amazon EMR で生成される IP アドレスです。

Users

AMI バージョンを使用する場合、ユーザー hadoop がすべてのプロセスを実行し、すべてのファイルを保有します。Amazon EMR リリースバージョン 4.0.0 以降では、ユーザーはアプリケーションレベルやコンポーネントレベルで存在します。

インストールシーケンス、インストールされているアーティファクト、およびログファイルの場所

AMI バージョンを使用する場合、アプリケーションのアーティファクトおよびその設定ディレクトリは、/home/hadoop/application ディレクトリにインストールされます。たとえば、Hive をインストールした場合は、ディレクトリは /home/hadoop/hive でした。Amazon EMR リリース 4.0.0 以降では、アプリケーションのアーティファクトは /usr/lib/application ディレクトリにインストールされます。AMI バージョンを使用する場合、ログファイルはさまざまな場所にあります。次の表に、場所を示します。

Amazon S3 のログの場所の変更
デーモンまたはアプリケーション ディレクトリの場所
instance-state node/instance-id/instance-state/
hadoop-hdfs-namenode daemons/instance-id/hadoop-hadoop-namenode.log
hadoop-hdfs-datanode daemons/instance-id/hadoop-hadoop-datanode.log
hadoop-yarn (ResourceManager) daemons/instance-id/yarn-hadoop-resourcemanager
hadoop-yarn (プロキシサーバー) daemons/instance-id/yarn-hadoop-proxyserver
mapred-historyserver daemons/instance-id/
httpfs daemons/instance-id/httpfs.log
hive-server node/instance-id/hive-server/hive-server.log
hive-metastore node/instance-id/apps/hive.log
Hive CLI node/instance-id/apps/hive.log
YARN アプリケーションのユーザーログおよびコンテナログ task-attempts/
Mahout 該当なし
Pig 該当なし
spark-historyserver 該当なし
MapReduce ジョブ履歴ファイル jobs/

Command runner

AMI バージョンを使用する場合、/home/hadoop/contrib/streaming/hadoop-streaming.jar のような多くのスクリプトまたはプログラムが、シェルのログインパス環境に置かれていないため、command-runner.jar または script-runner.jar などの jar ファイルを使用する際に完全パスを指定する必要があります。command-runner.jar が AMI に置かれるため、script-runner.jar を使用する場合のように完全 URI を指定する必要がなくなりました。

レプリケーション係数

レプリケーション係数を使用すると、Hadoop JVM をいつ起動するかを設定できます。Hadoop JVM は、タスクごとに新しく起動できます。これにより、タスクの独立性を高めることも、タスク間で JVM を共有してフレームワークのオーバーヘッドを低下させることもできます。多くの小さいファイルを処理する場合は、JVM を何回も再利用して起動のコストを分散させることに意味があります。ただし、各タスクが長時間かかる場合や大量のデータを処理する場合は、後続のタスクのためにすべてのメモリが確実に解放されるように、JVM を再利用しない選択もできます。AMI のバージョンを使用する場合は、configure-hadoop ブートストラップアクションを使用してレプリケーション係数をカスタマイズすることができ、mapred.job.reuse.jvm.num.tasks プロパティを設定します。

次の例は、無限の JVM 再利用の JVM 再利用係数の設定を示しています。

注記

読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge \ InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hadoop,\ Name="Configuring infinite JVM reuse",Args=["-m","mapred.job.reuse.jvm.num.tasks=-1"]