Anwendungen für die Verwendung einer bestimmten Java Virtual Machine konfigurieren - Amazon EMR

Anwendungen für die Verwendung einer bestimmten Java Virtual Machine konfigurieren

Amazon-EMR-Versionen haben unterschiedliche Standardversionen von Java Virtual Machine (JVM). Auf dieser Seite wird die JVM-Unterstützung für verschiedene Versionen und Anwendungen erklärt.

Überlegungen

  • Für Amazon-EMR-Versionen 5.0.0 und höher ist Java 8 die standardmäßige Java Virtual Machine (JVM).

  • Für Amazon-EMR-Versionen 6.9.0 und höher unterstützt Trino standardmäßig Java 17. Weitere Informationen über Java 17 mit Trino finden Sie unter Trino-Updates für Java 17 im Trino-Blog.

  • Für Amazon-EMR-Versionen 6.12.0 und höher unterstützen einige Anwendungen auch Java 11 und 17. Weitere Informationen über Anwendungen für Java Version finden Sie in den Amazon-EMR-Versionshinweisen. Beachten Sie, dass Amazon EMR nur die Ausführung einer Laufzeit-Version in einem Cluster unterstützt und nicht die Ausführung verschiedener Knoten oder Anwendungen auf verschiedenen Laufzeit-Versionen auf demselben Cluster.

Beachten Sie bei der Auswahl Ihrer Laufzeit-Version die folgenden anwendungsspezifischen Überlegungen:

Anwendungsspezifische Java-Konfigurationshinweise
Anwendung Hinweise zur Java-Konfigurationen

Spark

Um Spark mit einer nicht standardmäßigen Java-Version auszuführen, müssen Sie sowohl Spark als auch Hadoop konfigurieren. Beispiele finden Sie unter Die JVM überschreiben.

  • Konfigurieren Sie JAVA_HOME in spark-env, um die Java-Laufzeit der primären Instanceprozesse zu aktualisieren. Zum Beispiel spark-submit, spark-shell und Spark History Server.

  • Ändern Sie die Hadoop-Konfiguration, um die Java-Laufzeit der Spark-Executors und des YARN ApplicationMaster zu aktualisieren

Spark RAPIDS

Sie können RAPIDS mit der konfigurierten Java-Version für Spark ausführen.

Iceberg

Sie können Iceberg mit der konfigurierten Java-Version der Anwendung ausführen, die es verwendet.

Delta

Sie können Delta mit der konfigurierten Java-Version der Anwendung ausführen, die es verwendet.

Hudi

Sie können Hudi mit der konfigurierten Java-Version der Anwendung ausführen, die es verwendet.

Hive

Um die Java-Version für Hive auf 11 oder 17 festzulegen, konfigurieren Sie die Hadoop JVM-Einstellung auf die Java-Version, die Sie verwenden möchten.

HBase

Um die JVM für HBase zu aktualisieren, ändern Sie hbase-env. Standardmäßig legt Amazon EMR die HBase-JVM auf der Grundlage der JVM-Konfiguration für Hadoop fest, sofern Sie die Einstellungen in hbase-env nicht überschreiben. Beispiele finden Sie unter Die JVM überschreiben.

Flink

Um die JVM für Flink zu aktualisieren, ändern Sie flink-conf. Standardmäßig legt Amazon EMR die Flink-JVM auf der Grundlage der JVM-Konfiguration für Hadoop fest, sofern Sie die Einstellungen in flink-conf nicht überschreiben. Weitere Informationen finden Sie unter Flink für die Ausführung mit Java 11 konfigurieren.

Oozie

Um Oozie für die Ausführung unter Java 11 oder 17 zu konfigurieren, konfigurieren Sie Oozie Server, den Oozie LauncherAM Launcher AM und ändern Sie Ihre clientseitigen ausführbaren Dateien und Auftragskonfigurationen. Sie können EmbeddedOozieServer auch für die Ausführung unter Java 17 konfigurieren. Weitere Informationen finden Sie unter Die Java-Version für Oozie konfigurieren.

Pig

Pig unterstützt nur Java 8. Sie können Java 11 oder 17 nicht mit Hadoop verwenden und Pig auf demselben Cluster ausführen.

Die JVM überschreiben

Um die JVM-Einstellung für eine Amazon-EMR-Version zu überschreiben – z. B. um Java 17 mit einem Cluster zu verwenden, der Amazon-EMR-Version 6.12.0 verwendet – geben Sie die JAVA_HOME-Einstellung an die Umgebungsklassifizierung an, die application-env für alle Anwendungen außer Flink ist. Für Flink lautet die Umgebungsklassifizierung flink-conf. Schritte zur Konfiguration der Java-Laufzeit mit Flink finden Sie unter Flink für die Ausführung mit Java 11 konfigurieren.

Die JVM-Einstellung mit Apache Spark überschreiben

Wenn Sie Spark mit Amazon-EMR-Versionen 6.12 und höher verwenden und einen Treiber für die Einreichung im Cluster-Modus schreiben, verwendet der Treiber Java 8, aber Sie können die Umgebung so einstellen, dass die Executoren Java 11 oder 17 verwenden. Und wenn Sie Spark mit Amazon-EMR-Versionen unter 5.x verwenden und einen Treiber für die Einreichung im Cluster-Modus schreiben, verwendet der Treiber Java 7. Die Umgebung kann dann aber so eingestellt werden, dass die Executors Java 8 verwenden.

Um die JVM für Spark zu überschreiben, empfehlen wir, dass Sie sowohl die Hadoop- als auch die Spark-Klassifizierung festlegen.

{ "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": {} }

Die JVM-Einstellung mit Apache HBase überschreiben

Um HBase für die Verwendung von Java 11 zu konfigurieren, können Sie beim Starten des Clusters die folgende Konfiguration festlegen.

[ { "Classification": "hbase-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-11" } } ], "Properties": {} } ]

Die JVM-Einstellung mit Apache Hadoop und Hive überschreiben

Im folgenden Beispiel wird gezeigt, wie Sie die JVM für Hadoop und Hive auf Version 17 setzen.

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

Service-Ports

Die folgenden Ports sind YARN- und HDFS-Service-Ports. Diese Einstellungen stellen die Hadoop-Standardwerte dar. Andere Anwendungsservices werden bei Standard-Ports gehostet, sofern nicht anders dokumentiert. Weitere Informationen enthält die Projektdokumentation der Anwendung.

Port-Einstellungen für YARN und HDFS
Einstellung Hostname/Port
fs.default.name Standard (hdfs://emrDeterminedIP:8020)
dfs.datanode.address Standard (0.0.0.0:50010)
dfs.datanode.http.address Standard (0.0.0.0:50075)
dfs.datanode.https.address Standard (0.0.0.0:50475)
dfs.datanode.ipc.address Standard (0.0.0.0:50020)
dfs.http.address Standard (0.0.0.0:50070)
dfs.https.address Standard (0.0.0.0:50470)
dfs.secondary.http.address Standard (0.0.0.0:50090)
yarn.nodemanager.address Standard (${yarn.nodemanager.hostname}:0)
yarn.nodemanager.localizer.address Standard (${yarn.nodemanager.hostname}:8040)
yarn.nodemanager.webapp.address Standard (${yarn.nodemanager.hostname}:8042)
yarn.resourcemanager.address Standard (${yarn.resourcemanager.hostname}:8032)
yarn.resourcemanager.admin.address Standard (${yarn.resourcemanager.hostname}:8033)
yarn.resourcemanager.resource-tracker.address Standard (${yarn.resourcemanager.hostname}:8031)
yarn.resourcemanager.scheduler.address Standard (${yarn.resourcemanager.hostname}:8030)
yarn.resourcemanager.webapp.address Standard (${yarn.resourcemanager.hostname}:8088)
yarn.web-proxy.address Standard (no-value)
yarn.resourcemanager.hostname emrDeterminedIP
Anmerkung

Bei dem Begriff emrDeterminedIP handelt es sich um eine IP-Adresse, die von der Amazon-EMR-Steuerebene generiert wird. In der neueren Version wurde diese Konvention entfernt, mit Ausnahme der Einstellungen yarn.resourcemanager.hostname und fs.default.name.

Anwendungsbenutzer

Die Anwendungen führen Prozesse als deren eigene Benutzer aus. So werden z. B. Hive-JVMs als Benutzer hive, MapReduce-JVMs als mapred ausgeführt und so weiter. Dies wird im folgenden Prozessstatusbeispiel gezeigt.

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