Customizing Cluster and Application Configuration With Earlier AMI Versions of Amazon EMR - Amazon EMR
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Customizing Cluster and Application Configuration With Earlier AMI Versions of Amazon EMR

Amazon EMR 发行版 4.0.0 引入了使用配置分类的精简应用程序配置方法。有关更多信息,请参阅 配置应用程序。) 当使用 AMI 版本时,使用引导操作以及您传递的参数配置应用程序。例如, configure-hadoopconfigure-daemons 引导操作设置Hadoop和纱线–特定环境属性 --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)

有关所有分类的列表,请参阅配置应用程序

Application Environment Variables

当使用 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。包装机脚本 /usr/bin/ 应用程序RPM安装还可以在涉及实际BIN脚本之前设置其他环境变量。

Service Ports

当使用 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.

Users

当使用 AMI 版本时,用户 hadoop 将运行所有进程并拥有所有文件。在 Amazon EMR 版本 4.0.0 及更高版本中,用户位于应用程序和组件级别。

Installation Sequence, Installed Artifacts, and Log File Locations

当使用 AMI 版本时,应用程序构件及其配置目录安装在 /home/hadoop/application 目录中。例如,如果安装了Hive,则目录将是 /home/hadoop/hive。在 Amazon EMR 4.0.0版及更高版本的应用程序伪件安装在 /usr/lib/application 目录。当使用 AMI 版本时,日志文件位于不同的位置。下表列出了位置。

Amazon S3 上的日志位置的更改
守护程序或应用程序 目录位置
instance-state 节点instance-idinstance-state
hadoop-hdfs-namenode 守护程序/instance-id/hadoop-hadoop-namenode.log
hadoop-hdfs-datanode 守护程序/instance-id/hadoop-hadoop-datanode.log
hadoop-yarn (ResourceManager) 守护程序/instance-id/YARN-Hadoop-资源管理器
hadoop-yarn (代理服务器) 守护程序/instance-id/yarn-hadoop-proxyserver
mapred-historyserver 守护程序/instance-id/
httpfs 守护程序/instance-id/httpfs.log
hive-server 节点instance-id/hive-server/hive-server.log
hive-metastore 节点instance-id/apps/hive.log
Hive CLI 节点instance-id/apps/hive.log
YARN 应用程序用户日志和容器日志 task-attempts/
Mahout 不适用*
Pig 不适用*
spark-historyserver 不适用
mapreduce 任务历史记录文件 jobs/

Command Runner

当使用 AMI 版本时,许多脚本或程序 (如 /home/hadoop/contrib/streaming/hadoop-streaming.jar) 未位于 shell 登录路径环境上,因此您需要在使用 jar 文件 (如 command-runner.jar 或 script-runner.jar) 执行脚本时指定完整路径。command-runner.jar 位于 AMI 上,因此无需知道完整 URI,这与 script-runner.jar 的情况相同。

Replication Factor

重复因子使您可以配置启动 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"]