配置应用程序来使用特定 Java 虚拟机
Amazon EMR 版本具有不同的默认 Java 虚拟机(JVM)版本。本页介绍了 JVM 对不同版本和应用程序的支持。
注意事项
有关支持的应用程序 Java 版本的信息,请参阅《Amazon EMR 发行版指南》关于 Amazon EMR 发行版中的应用程序页面。
-
Amazon EMR 仅支持在一个集群中运行一个运行时系统版本,不支持在同一集群上的不同运行时系统版本上运行不同的节点或应用程序。
-
对于 Amazon EMR 7.x,支持 Java 17 的应用程序的默认 Java 虚拟机(JVM)为 Java 17,Apache Livy 除外。有关支持的应用程序 Java 版本的更多信息,请参阅《Amazon EMR 发行版指南》中相应的发布页面。
-
从 Amazon EMR 7.1.0 开始,Flink 支持并默认设置为 Java 17。要使用其他版本的 Java 运行时,请覆盖
flink-conf
中的设置。有关配置 Flink 以使用 Java 8 或 Java 11 的更多信息,请参阅将 Flink 配置为使用 Java 11 运行。 -
对于 Amazon EMR 5.x 和 6.x,默认的 Java 虚拟机(JVM)为 Java 8。
-
对于 Amazon EMR 6.12.0 及更高版本,某些应用程序还支持 Java 11 和 17。
-
对于 Amazon EMR 6.9.0 及更高版本,Trino 默认支持 Java 17。有关 Trino 上 Java 17 的更多信息,请参阅 Trino 博客上的 Trino updates to Java 17
。
-
在选择运行时系统版本时,请记住以下特定于应用程序的注意事项:
应用程序 | Java 配置说明 |
---|---|
Spark |
要使用非默认 Java 版本运行 Spark,必须同时配置 Spark 和 Hadoop。有关示例,请参阅覆盖 JVM。
|
Spark RAPIDS |
您可以使用为 Spark 配置的 Java 版本运行 RAPIDS。 |
Iceberg |
您可以使用正在使用 Iceberg 的应用程序的已配置 Java 版本来运行 Iceberg。 |
Delta |
您可以使用正在使用 Delta 的应用程序的已配置 Java 版本来运行 Delta。 |
Hudi |
您可以使用正在使用 Hudi 的应用程序的已配置 Java 版本来运行 Hudi。 |
Hadoop |
要更新适用于 Hadoop 的 JVM,请修改 |
Hive |
要将 Hive 的 Java 版本设置为 11 或 17,请将 Hadoop JVM 设置配置为要使用的 Java 版本。 |
HBase |
要更新适用于 HBase 的 JVM,请修改 |
Flink |
要更新适用于 Flink 的 JVM,请修改 |
Oozie |
要将 Oozie 配置为在 Java 11 或 17 上运行,请配置 Oozie Server、Oozie LauncherAM Launcher AM,然后更改客户端可执行文件和作业配置。您也可以将 |
Pig | Pig 仅支持 Java 8。您无法在 Hadoop 中使用 Java 11 或 17,也不能在同一个集群上运行 Pig。 |
覆盖 JVM
要覆盖 Amazon EMR 版本的 JVM 设置 – 例如,在使用 Amazon EMR 版本 6.12.0 的集群中使用 Java 17,请为其环境分类提供 JAVA_HOME
设置,该设置对于除 Flink 之外的所有应用程序都为
。对于 Flink 来说,环境分类是 application
-envflink-conf
。有关使用 Flink 配置 Java 运行时系统的步骤,请参阅 将 Flink 配置为使用 Java 11 运行。
使用 Apache Spark 覆盖 JVM 设置
在 Amazon EMR 6.12 及更高版本中使用 Spark 时,如果您编写驱动程序以在集群模式下提交,则驱动程序使用 Java 8,但您可以将环境设置为执行程序使用 Java 11 或 17。而且,当您在低于 5.x 的 Amazon EMR 版本中使用 Spark 并编写驱动程序以在集群模式下提交时,驱动程序会使用 Java 7。不过,您可以设置环境以确保执行程序使用 Java 8。
要覆盖 Spark 的 JVM,我们建议您同时设置 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": {} }
使用 Apache HBase 覆盖 JVM 设置
要将 HBase 配置为使用 Java 11,可以在启动集群时设置以下配置。
[ { "Classification": "hbase-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-11" } } ], "Properties": {} } ]
使用 Apache Hadoop 和 Hive 覆盖 JVM 设置
以下示例说明如何将 Hadoop 和 Hive 的 JVM 设置为版本 17。
[ { "Classification": "hadoop-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-17" } } ], "Properties": {} } ]
服务端口
以下是 YARN 和 HDFS 服务端口。这些设置反映 Hadoop 默认值。其它应用程序服务托管在默认端口上,除非另有指定。有关更多信息,请参阅应用程序的项目文档。
设置 | 主机名/端口 |
---|---|
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
默认值( |
|
|
注意
术语 emrDeterminedIP
意指由 Amazon EMR 控制面板生成的 IP 地址。在较新的版本中,已删除该约定,但 yarn.resourcemanager.hostname
和 fs.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