Amazon EMR
Amazon EMR 版本指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

配置应用程序

您可覆盖应用程序的默认配置,方式是在创建集群时提供配置对象。配置对象作为 JSON 文件引用。配置对象包含分类、属性和可选的嵌套配置。属性是要在该文件中更改的设置。您可以在一个 JSON 对象中为多个应用程序指定多个分类。

下面提供了配置列表的示例 JSON:

[ { "Classification": "core-site", "Properties": { "hadoop.security.groups.cache.secs": "250" } }, { "Classification": "mapred-site", "Properties": { "mapred.tasktracker.map.tasks.maximum": "2", "mapreduce.map.sort.spill.percent": "0.90", "mapreduce.tasktracker.reduce.tasks.maximum": "5" } } ]

分类通常可以映射到应用程序特定的配置文件。此情况的一个例外是已弃用的引导操作 configure-daemons,它用于设置环境参数 (如 --namenode-heap-size)。现在,与此类似的选项已归入 hadoop-envyarn-env 分类并具有其自己的嵌套导出分类。如果任何分类以“env”结尾,则应使用导出子分类。另一个例外是 s3get,它用于将客户 EncryptionMaterialsProvider 对象放置在集群中的每个节点上以用于客户端加密。为了实现此目的,已向 emrfs-site 分类添加一个选项。

下面提供了 hadoop-env 分类的示例:

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

下面提供了 yarn-env 分类的示例:

[ { "Classification": "yarn-env", "Properties": { }, "Configurations": [ { "Classification": "export", "Properties": { "YARN_RESOURCEMANAGER_OPTS": "-Xdebug -Xrunjdwp:transport=dt_socket" }, "Configurations": [ ] } ] } ]

以下设置不属于配置文件,但由 Amazon EMR 用来代表您设置多个设置。

Amazon EMR 辅助设置

应用程序 版本标签分类 有效属性 何时使用
Spark spark maximizeResourceAllocation 配置执行程序以利用每个节点的最大资源。

下面是此版本的所有配置分类:

配置分类

分类 说明

capacity-scheduler

更改 Hadoop 的 capacity-scheduler.xml 文件中的值。

core-site

更改 Hadoop 的 core-site.xml 文件中的值。

emrfs-site

更改 EMRFS 设置。

flink-conf

更改 flink-conf.yaml 设置。

flink-log4j

更改 Flink log4j.properties 设置。

flink-log4j-yarn-session

更改 Flink log4j-yarn-session.properties 设置。

flink-log4j-cli

更改 Flink log4j-cli.properties 设置。

hadoop-env

更改适用于所有 Hadoop 组件的 Hadoop 环境中的值。

hadoop-log4j

更改 Hadoop 的 log4j.properties 文件中的值。

hadoop-ssl-server

更改 hadoop ssl 服务器配置

hadoop-ssl-client

更改 hadoop ssl 客户端配置

hbase

适用于 Apache HBase 的 Amazon EMR 辅助设置。

hbase-env

更改 HBase 环境中的值。

hbase-log4j

更改 HBase 的 hbase-log4j.properties 文件中的值。

hbase-metrics

更改 HBase 的 hadoop-metrics2-hbaase.properties 文件中的值。

hbase-policy

更改 HBase 的 hbase-policy.xml 文件中的值。

hbase-site

更改 HBase 的 hbase-site.xml 文件中的值。

hdfs-encryption-zones

配置 HDFS 加密区域。

hdfs-site

更改 HDFS 的 hdfs-site.xml 中的值。

hcatalog-env

更改 HCatalog 的环境中的值。

hcatalog-server-jndi

更改 HCatalog 的 jndi.properties 中的值。

hcatalog-server-proto-hive-site

更改 HCatalog 的 proto-hive-site.xml 中的值。

hcatalog-webhcat-env

更改 HCatalog WebHCat 的环境中的值。

hcatalog-webhcat-log4j2

更改 HCatalog WebHCat 的 log4j2.properties 中的值。

hcatalog-webhcat-site

更改 HCatalog WebHCat 的 webhcat-site.xml 文件中的值。

hive-beeline-log4j2

更改 Hive 的 beeline-log4j2.properties 文件中的值。

hive-parquet-logging

更改 Hive parquet-logging.properties 文件中的值。

hive-env

更改 Hive 环境中的值。

hive-exec-log4j2

更改 Hive 的 hive-exec-log4j2.properties 文件中的值。

hive-llap-daemon-log4j2

更改 Hive 的 llap-daemon-log4j2.properties 文件中的值。

hive-log4j2

更改 Hive 的 hive-log4j2.properties 文件中的值。

hive-site

更改 Hive 的 hive-site.xml 文件中的值

hiveserver2-site

更改 Hive Server2 的 hiveserver2-site.xml 文件中的值

hue-ini

更改 Hue 的 ini 文件中的值

httpfs-env

更改 HTTPFS 环境中的值。

httpfs-site

更改 Hadoop 的 httpfs-site.xml 文件中的值。

hadoop-kms-acls

更改 Hadoop 的 kms-acls.xml 文件中的值。

hadoop-kms-env

更改 Hadoop KMS 环境中的值。

hadoop-kms-log4j

更改 Hadoop 的 kms-log4j.properties 文件中的值。

hadoop-kms-site

更改 Hadoop 的 kms-site.xml 文件中的值。

mapred-env

更改 MapReduce 应用程序的环境中的值。

mapred-site

更改 MapReduce 应用程序的 mapred-site.xml 文件中的值。

oozie-env

更改 Oozie 的环境中的值。

oozie-log4j

更改 Oozie 的 oozie-log4j.properties 文件中的值。

oozie-site

更改 Oozie 的 oozie-site.xml 文件中的值。

phoenix-hbase-metrics

更改 Phoenix 的 hadoop-metrics2-hbase.properties 文件中的值。

phoenix-hbase-site

更改 Phoenix 的 hbase-site.xml 文件中的值。

phoenix-log4j

更改 Phoenix 的 log4j.properties 文件中的值。

phoenix-metrics

更改 Phoenix 的 hadoop-metrics2-phoenix.properties 文件中的值。

pig-properties

更改 Pig 的 pig.properties 文件中的值。

pig-log4j

更改 Pig 的 log4j.properties 文件中的值。

presto-log

更改 Presto 的 log.properties 文件中的值。

presto-config

更改 Presto 的 config.properties 文件中的值。

presto-connector-blackhole

更改 Presto 的 blackhole.properties 文件中的值。

presto-connector-cassandra

更改 Presto 的 cassandra.properties 文件中的值。

presto-connector-hive

更改 Presto 的 hive.properties 文件中的值。

presto-connector-jmx

更改 Presto 的 jmx.properties 文件中的值。

presto-connector-kafka

更改 Presto 的 kafka.properties 文件中的值。

presto-connector-localfile

更改 Presto 的 localfile.properties 文件中的值。

presto-connector-mongodb

更改 Presto 的 mongodb.properties 文件中的值。

presto-connector-mysql

更改 Presto 的 mysql.properties 文件中的值。

presto-connector-postgresql

更改 Presto 的 postgresql.properties 文件中的值。

presto-connector-raptor

更改 Presto 的 raptor.properties 文件中的值。

presto-connector-redis

更改 Presto 的 redis.properties 文件中的值。

presto-connector-tpch

更改 Presto 的 tpch.properties 文件中的值。

spark

适用于 Apache Spark 的 Amazon EMR 辅助设置。

spark-defaults

更改 Spark 的 spark-defaults.conf 文件中的值。

spark-env

更改 Spark 环境中的值。

spark-hive-site

更改 Spark 的 hive-site.xml 文件中的值

spark-log4j

更改 Spark 的 log4j.properties 文件中的值。

spark-metrics

更改 Spark 的 metrics.properties 文件中的值。

sqoop-env

更改 Sqoop 的环境中的值。

sqoop-oraoop-site

更改 Sqoop OraOop 的 oraoop-site.xml 文件中的值。

sqoop-site

更改 Sqoop 的 sqoop-site.xml 文件中的值。

tez-site

更改 Tez 的 tez-site.xml 文件中的值。

yarn-env

更改 YARN 环境中的值。

yarn-site

更改 YARN 的 yarn-site.xml 文件中的值。

zeppelin-env

更改 Zeppelin 环境中的值。

zookeeper-config

更改 ZooKeeper 的 zoo.cfg 文件中的值。

zookeeper-log4j

更改 ZooKeeper 的 log4j.properties 文件中的值。

例 在控制台中提供配置

要提供配置,请导航至 Create cluster 页面并选择 Edit software settings。随后,您可以在控制台中直接输入配置 (使用 JSON 或用阴影文本显示的速记语法),也可以使用 JSON Configurations 对象为文件提供 Amazon S3 URI。

例 使用 CLI 提供配置

您可通过提供本地存储或在 Amazon S3 中存储的 JSON 文件的路径来为 create-cluster 提供配置。以下示例假定您为 Amazon EMR 使用默认角色,并且已创建角色。如果您需要创建角色,请先运行 aws emr create-default-roles

aws emr create-cluster --use-default-roles --release-label emr-5.4.0 --instance-type m3.xlarge --instance-count 2 --applications Name=Hive --configurations https://s3.amazonaws.com/mybucket/myfolder/myConfig.json

如果您的配置在本地目录中,您可以使用以下内容:

aws emr create-cluster --use-default-roles --release-label emr-5.4.0 --applications Name=Hive \ --instance-type m3.xlarge --instance-count 3 --configurations file://./configurations.json

例 使用 Java 开发工具包提供配置

以下程序摘要说明如何使用 AWS SDK for Java 提供配置:

Application hive = new Application().withName("Hive"); Map<String,String> hiveProperties = new HashMap<String,String>(); hiveProperties.put("hive.join.emit.interval","1000"); hiveProperties.put("hive.merge.mapfiles","true"); Configuration myHiveConfig = new Configuration() .withClassification("hive-site") .withProperties(hiveProperties); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Create cluster with ReleaseLabel") .withReleaseLabel("emr-5.4.0") .withApplications(hive) .withConfigurations(myHiveConfig) .withServiceRole("EMR_DefaultRole") .withJobFlowRole("EMR_EC2_DefaultRole") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKey") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") );

配置应用程序以使用特定 Java 虚拟机

Java 8 是使用 Amazon EMR 4.9.2 版或更高版本创建的集群实例的默认 Java 虚拟机 (JVM)。要覆盖此 JVM 设置 (例如,使用包含用 Amazon EMR 4.8.0 版创建的集群的 Java 8),您可以为应用程序设置 JAVA_HOME,方法是为其环境分类 application-env 提供设置。对于 Hadoop 和 Hive,与以下内容类似:

[ { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" } } ], "Properties": {} } ]

对于 Spark,如果您要编写驱动程序以在集群模式下提交,则驱动程序将使用 Java 7,但设置环境可确保执行程序使用 Java 8。为此,建议同时设置 Hadoop 和 Spark 分类:

[ { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" } } ], "Properties": {} }, { "Classification": "spark-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" } } ], "Properties": {} } ]

服务端口

以下是 YARN 和 HDFS 服务端口。这些设置反映 Hadoop 默认值。其他应用程序服务托管在默认端口上,除非另有指定。请参考应用程序的项目文档,以获取进一步信息。

YARN 和 HDFS 的端口设置

设置 主机名/端口
fs.default.name 默认值 (hdfs://emrDeterminedIP:8020)
dfs.datanode.address 默认值 (0.0.0.0:50010)
dfs.datanode.http.address 默认值 (0.0.0.0:50075)
dfs.datanode.https.address 默认值 (0.0.0.0:50475)
dfs.datanode.ipc.address 默认值 (0.0.0.0:50020)
dfs.http.address 默认值 (0.0.0.0:50070)
dfs.https.address 默认值 (0.0.0.0:50470)
dfs.secondary.http.address 默认值 (0.0.0.0:50090)
yarn.nodemanager.address 默认值 (${yarn.nodemanager.hostname}:0)
yarn.nodemanager.localizer.address 默认值 (${yarn.nodemanager.hostname}:8040)
yarn.nodemanager.webapp.address 默认值 (${yarn.nodemanager.hostname}:8042)
yarn.resourcemanager.address 默认值 (${yarn.resourcemanager.hostname}:8032)
yarn.resourcemanager.admin.address 默认值 (${yarn.resourcemanager.hostname}:8033)
yarn.resourcemanager.resource-tracker.address 默认值 (${yarn.resourcemanager.hostname}:8031)
yarn.resourcemanager.scheduler.address 默认值 (${yarn.resourcemanager.hostname}:8030)
yarn.resourcemanager.webapp.address 默认值 (${yarn.resourcemanager.hostname}:8088)
yarn.web-proxy.address 默认值 (无值)
yarn.resourcemanager.hostname emrDeterminedIP

注意

术语 emrDeterminedIP 意指由 Amazon EMR 控制面板生成的 IP 地址。在更新的版本中,此约定已消除 (yarn.resourcemanager.hostnamefs.default.name 设置除外)。

应用程序用户

应用程序以自己用户的身份运行进程。例如,Hive JVM 将以用户 hive 的身份运行,MapReduce JVM 将以 mapred 的身份运行,等等。以下进程状态演示此情况:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND hive 6452 0.2 0.7 853684 218520 ? Sl 16:32 0:13 /usr/lib/jvm/java-openjdk/bin/java -Xmx256m -Dhive.log.dir=/var/log/hive -Dhive.log.file=hive-metastore.log -Dhive.log.threshold=INFO -Dhadoop.log.dir=/usr/lib/hadoop hive 6557 0.2 0.6 849508 202396 ? Sl 16:32 0:09 /usr/lib/jvm/java-openjdk/bin/java -Xmx256m -Dhive.log.dir=/var/log/hive -Dhive.log.file=hive-server2.log -Dhive.log.threshold=INFO -Dhadoop.log.dir=/usr/lib/hadoop/l hbase 6716 0.1 1.0 1755516 336600 ? Sl Jun21 2:20 /usr/lib/jvm/java-openjdk/bin/java -Dproc_master -XX:OnOutOfMemoryError=kill -9 %p -Xmx1024m -ea -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Dhbase.log.dir=/var/ hbase 6871 0.0 0.7 1672196 237648 ? Sl Jun21 0:46 /usr/lib/jvm/java-openjdk/bin/java -Dproc_thrift -XX:OnOutOfMemoryError=kill -9 %p -Xmx1024m -ea -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -Dhbase.log.dir=/var/ hdfs 7491 0.4 1.0 1719476 309820 ? Sl 16:32 0:22 /usr/lib/jvm/java-openjdk/bin/java -Dproc_namenode -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-hdfs -Dhadoop.log.file=hadoop-hdfs-namenode-ip-10-71-203-213.log -Dhadoo yarn 8524 0.1 0.6 1626164 211300 ? Sl 16:33 0:05 /usr/lib/jvm/java-openjdk/bin/java -Dproc_proxyserver -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-yarn- yarn 8646 1.0 1.2 1876916 385308 ? Sl 16:33 0:46 /usr/lib/jvm/java-openjdk/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoop.log.dir=/var/log/hadoop-yarn -Dyarn.log.dir=/var/log/hadoop-yarn -Dhadoop.log.file=yarn-y mapred 9265 0.2 0.8 1666628 260484 ? Sl 16:33 0:12 /usr/lib/jvm/java-openjdk/bin/java -Dproc_historyserver -Xmx1000m -Dhadoop.log.dir=/usr/lib/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/lib/hadoop