特定の Java 仮想マシンを使用するようにアプリケーションを設定
Amazon EMR は、リリースごとに、デフォルトの Java 仮想マシン (JVM) のバージョンが異なります。このページでは、さまざまなリリースやアプリケーションに対する JVM サポートについて説明します。
考慮事項
アプリケーションでサポートされている Java バージョンについては、Amazon EMR リリースガイドのアプリケーションのページを参照してください。
-
Amazon EMR のクラスター内で実行可能なランタイムバージョンは 1 つのみであり、同じクラスターで、異なるランタイムバージョンを実行し、異なるノードまたはアプリケーションを稼働させることはできません。
-
Amazon EMR 7.x の場合、Apache Livy を除く、Java 17 をサポートするアプリケーションのデフォルトの Java 仮想マシン (JVM) は Java 17 です。アプリケーションでサポートされている JDK バージョンの詳細については、Amazon EMR リリースガイドの対応するリリースページを参照してください。
-
Amazon EMR 7.1.0 以降、Flink は Java 17 をサポートし、デフォルトで Java 17 に設定されています。別のバージョンの Java ランタイムを使用するには、
flink-conf
の設定を上書きします。Java 8 または Java 11 を使用するように Flink を設定する方法の詳細については、「Configure Flink to run with 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 をサポートしています。Java 17 と Trino の詳細については、Trino のブログ、「Trino updates to Java 17
」を参照してください。
-
ランタイムバージョンを選択する際には、次に示すアプリケーション固有の考慮事項に留意してください。
アプリケーション | Java の設定に関する注意点 |
---|---|
Spark |
Spark をデフォルト以外の Java バージョンで稼働させるには、Spark と Hadoop の両方を設定する必要があります。例については、「JVM をオーバーライドする」を参照してください。
|
Spark RAPIDS |
Spark 用に設定されている Java バージョンで RAPIDS を実行できます。 |
Iceberg |
Iceberg は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 |
差分 |
Delta は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 |
Hudi |
Hudi は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 |
Hadoop |
Hadoop の JVM を更新するには、 |
[Hive] |
Hive の Java バージョンを 11 または 17 に設定するには、Hadoop の JVM 設定で、使用する Java バージョンを指定します。 |
HBase |
HBase の JVM を更新するには、 |
Flink |
Flink の JVM を更新するには、 |
Oozie |
Oozie が Java 11 または 17 で稼働するように構成するには、Oozie サーバーと Oozie LauncherAM ランチャー 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 で実行されるよう設定する」を参照してください。
トピック
JVM 設定をオーバーライドし Apache Spark を使用する
Amazon EMR リリース 6.12 以降で Spark を使用し、クラスターモードで送信するドライバーを作成すると、そのドライバーは Java 8 を使用します。ただし、エグゼキューターが Java 11 または 17 を使用するよう環境を設定できます。Amazon EMR リリース 5.x より前のリリースで 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": {} }
JVM 設定をオーバーライドし Apache HBase を使用する
HBase で Java 11 が使用されるように設定するには、クラスターの起動時に次の設定を行います。
[ { "Classification": "hbase-env", "Configurations": [ { "Classification": "export", "Configurations": [], "Properties": { "JAVA_HOME": "/usr/lib/jvm/jre-11" } } ], "Properties": {} } ]
JVM 設定をオーバーライドし Apache Hadoop と Hive を使用する
次の例は、JVM をバージョン 17 に設定し、Hadoop と Hive を利用可能にする方法を示しています。
[ { "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