本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定應用程式以使用特定 Java 虛擬機器
Amazon EMR 發行版本具有不同的預設 Java 虛擬機器 (JVM) 版本。本頁說明不同發行版本和應用程式的 JVM 支援。
考量事項
如需有關應用程式支援的 Java 版本的資訊,請參閱《Amazon EMR 版本指南》關於 Amazon EMR 版本中的應用程式頁面。
-
Amazon EMR 僅支援在叢集中執行一種執行期版本,不支援在相同叢集上的不同執行期版本上執行不同節點或應用程式。
-
對於 Amazon EMR 7.x,預設 Java Virtual Machine (JVM) 為 Java 17,適用於支援 Java 17 的應用程式,但 Apache Livy 除外。如需有關應用程式支援的 JDK 版本的詳細資訊,請參閱《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 Virtual Machine (JVM) 為 Java 8。
-
對於 Amazon EMR 6.12.0 版及更高版本,部分應用程式也支援 Java 11 和 17。
-
對於 Amazon EMR 6.9.0 版及更高版本,Trino 支援 Java 17 作為預設值。如需有關 Java 17 與 Trino 的詳細資訊,請參閱 Trino 部落格上的 Trino 對 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 伺服器和 Oozie Launcher AM,並變更用戶端可執行檔和作業組態。您也可以將 |
Pig | Pig 僅支援 Java 8。您無法將 Java 11 或 17 與 Hadoop 搭配使用並在相同叢集上執行 Pig。 |
覆寫 JVM
若要覆寫 Amazon EMR 發行版本的 JVM 設定 (例如,將 Java 17 與使用 Amazon EMR 發行版本 6.12.0 的叢集搭配使用),請為環境分類提供 JAVA_HOME
設定,對於除 Flink 之外的所有應用程式都為
。對於 Flink,環境分類為 application
-envflink-conf
。如需使用 Flink 設定 Java 執行期的步驟,請參閱 將 Flink 設定為使用 Java 11 執行。
使用 Apache Spark 覆寫 JVM 設定
在您將 Spark 與 Amazon EMR 6.12 版及更高版本搭配使用時,如果您撰寫用於在叢集模式下提交的驅動程式,則該驅動程式將使用 Java 8,但您可以設定環境以便執行程式使用 Java 11 或 17。當您將 Spark 與低於 5.x 的 Amazon EMR 版本搭配使用,並撰寫用於在叢集模式下提交的驅動程式時,該驅動程式將使用 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