使用 Amazon EMR 的早期 AMI 版本自定义集群和应用程序配置 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon EMR 的早期 AMI 版本自定义集群和应用程序配置

Amazon EMR 发行版 4.0.0 推出了使用配置分类的精简应用程序配置方法。有关更多信息,请参阅 配置应用程序。当使用 AMI 版本时,使用引导操作以及您传递的参数配置应用程序。例如,configure-hadoopconfigure-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/usr/bin/ 中由应用程序 RPM 安装的包装脚本还可以在涉及实际 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 地址。

用户

当使用 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 守护进程/ 实例 ID /.log hadoop-hadoop-namenode
hadoop-hdfs-datanode 守护进程/ 实例 ID /.log hadoop-hadoop-datanode
hadoop-yarn () ResourceManager 守护进程/ 实例 ID/yarn-hadoop-resourcemanager
hadoop-yarn (代理服务器) 守护进程/ 实例 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) 未位于 shell 登录路径环境上,因此您需要在使用 jar 文件 (如 command-runner.jar 或 script-runner.jar) 执行脚本时指定完整路径。command-runner.jar 位于 AMI 上,因此无需知道完整 URI,这与 script-runner.jar 的情况相同。

重复因子

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