

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 特定の Java 仮想マシンを使用するようにアプリケーションを設定
<a name="configuring-java8"></a>

Amazon EMR は、リリースごとに、デフォルトの Java 仮想マシン (JVM) のバージョンが異なります。このページでは、さまざまなリリースやアプリケーションに対する JVM サポートについて説明します。

## 考慮事項
<a name="configuring-java8-considerations"></a>

アプリケーションでサポートされている Java バージョンについては、[Amazon EMR リリースガイド](emr-release-components.md)のアプリケーションのページを参照してください。
+ 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](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html#flink-configure-java11)」を参照してください。
+ 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](https://trino.io/blog/2022/07/14/trino-updates-to-java-17.html)」を参照してください。

ランタイムバージョンを選択する際には、次に示すアプリケーション固有の考慮事項に留意してください。


**Java 設定に関する、アプリケーション固有の注意点**  

| アプリケーション | Java の設定に関する注意点 | 
| --- | --- | 
| Spark | Spark をデフォルト以外の Java バージョンで稼働させるには、Spark と Hadoop の両方を設定する必要があります。例については「[JVM をオーバーライドする](#configuring-java8-override)」を参照してください。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/emr/latest/ReleaseGuide/configuring-java8.html) | 
| Spark RAPIDS | Spark 用に設定されている Java バージョンで RAPIDS を実行できます。 | 
| Iceberg | Iceberg は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 | 
| Delta | Delta は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 | 
| Hudi | Hudi は、それを使用するアプリケーションの設定済み Java バージョンで稼働させることができます。 | 
| Hadoop | Hadoop の JVM を更新するには、`hadoop-env` を変更します。例については「[JVM をオーバーライドする](#configuring-java8-override)」を参照してください。 | 
| [Hive] | Hive の Java バージョンを 11 または 17 に設定するには、Hadoop の JVM 設定で、使用する Java バージョンを指定します。 | 
| HBase | HBase の JVM を更新するには、`hbase-env` を変更します。デフォルトの場合、Amazon EMR では、Hadoop の JVM 設定に基づいて HBase の JVM が設定されます。ただし、`hbase-env` の設定をオーバーライドした場合を除きます。例については「[JVM をオーバーライドする](#configuring-java8-override)」を参照してください。 | 
| Flink | Flink の JVM を更新するには、`flink-conf` を変更します。デフォルトの場合、Amazon EMR では、Hadoop の JVM 設定に基づいて Flink の JVM が設定されます。ただし、`flink-conf` の設定をオーバーライドした場合を除きます。詳細については、「[Flink が Java 11 で実行されるよう設定する](flink-configure.md#flink-configure-java11)」を参照してください。 | 
| Oozie | Oozie が Java 11 または 17 で稼働するように構成するには、Oozie サーバーと Oozie LauncherAM ランチャー AM の設定を行い、クライアント側の実行ファイルとジョブ設定を変更します。`EmbeddedOozieServer` を設定して、Java 17 で稼働させることもできます。詳細については、「[Oozie 用の Java バージョンの設定](oozie-java.md)」を参照してください。 | 
| Pig | Pig は Java 8 のみをサポートしています。Hadoop で Java 11 または 17 を使用し、それと同じクラスターで Pig を稼働させることはできません。 | 

## JVM をオーバーライドする
<a name="configuring-java8-override"></a>

Amazon EMR リリースの JVM 設定をオーバーライドするには (例えば、Amazon EMR リリース 6.12.0 を使用するクラスターで Java 17 を使用するなど)、`JAVA_HOME` をその環境分類に設定します。この場合の環境分類は `application-env` であり、Flink を除くすべてのアプリケーションに適用されます。Flink の環境分類は `flink-conf` です。Flink の Java ランタイムを設定する手順については、「[Flink が Java 11 で実行されるよう設定する](flink-configure.md#flink-configure-java11)」を参照してください。

**Topics**
+ [JVM 設定をオーバーライドし Apache Spark を使用する](#configuring-java8-override-spark)
+ [JVM 設定をオーバーライドし Apache HBase を使用する](#configuring-java8-override-hbase)
+ [JVM 設定をオーバーライドし Apache Hadoop と Hive を使用する](#configuring-java8-override-hadoop)

### JVM 設定をオーバーライドし Apache Spark を使用する
<a name="configuring-java8-override-spark"></a>

Amazon EMR リリース 6.12 以上で Spark を使用し、エグゼキューターが Java 11 または 17 を使用するよう環境を設定できます。Amazon EMR リリース 5.x より前のリリースで Spark を使用し、クラスターモードで送信するドライバーを作成すると、ドライバーは Java 7 を使用しますが、エグゼキューターが Java 8 を使用するよう環境を設定できます。

Spark の JVM を上書きするには、Spark 分類設定を設定します。このサンプルでは、Hadoop 用の Java バージョンは同じですが、必須ではありません。

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

Amazon EMR の Hadoop では、JVM バージョンがすべての Hadoop コンポーネントで一貫していることをお勧めします。

 次の例は、EMR 7.0.0 以上に必要な設定パラメータを追加して、すべてのコンポーネントで一貫した Java バージョンの使用を確保する方法を示しています。

```
[
  {
    "Classification": "spark-defaults",
    "Properties": {
      "spark.executorEnv.JAVA_HOME": "/usr/lib/jvm/java-1.8.0",
      "spark.yarn.appMasterEnv.JAVA_HOME": "/usr/lib/jvm/java-1.8.0"
    }
  },
  {
    "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 を使用する
<a name="configuring-java8-override-hbase"></a>

HBase で Java 11 が使用されるように設定するには、クラスターの起動時に次の設定を行います。

```
[
    {
        "Classification": "hbase-env",
        "Properties": {},
        "Configurations": [
            {
                "Classification": "export",
                "Properties": {
                    "JAVA_HOME": "/usr/lib/jvm/jre-11",
                    "HBASE_OPTS": "-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -Dsun.net.inetaddr.ttl=5"
                },
                "Configurations": []
            }
        ]
    }
]
```

### JVM 設定をオーバーライドし Apache Hadoop と Hive を使用する
<a name="configuring-java8-override-hadoop"></a>

次の例は、JVM をバージョン 17 に設定し、Hadoop と Hive を利用可能にする方法を示しています。

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

## サービスポート
<a name="configuring-java8-service-ports"></a>

以下は 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` | デフォルト (`no-value`) | 
| `yarn.resourcemanager.hostname` | `emrDeterminedIP` | 

**注記**  
*emrDeterminedIP* とは、Amazon EMR コントロールプレーンで生成された IP アドレスのことです。新しいバージョンでは、この規則は削除されています ( `yarn.resourcemanager.hostname` および `fs.default.name` 設定は除く)。

## アプリケーションユーザー
<a name="configuring-java8-application-users"></a>

アプリケーションでは、プロセスを独自のユーザーとして実行します。たとえば、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
```