

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration des applications pour l'utilisation d'une machine virtuelle Java spécifique
<a name="configuring-java8"></a>

Les versions d'Amazon EMR comportent différentes versions de machine virtuelle Java (JVM) par défaut. Cette page explique la prise en charge de la JVM pour différentes versions et applications.

## Considérations
<a name="configuring-java8-considerations"></a>

Pour plus d’informations sur les versions de Java prises en charge pour les applications, voir les pages relatives aux applications du [Guide des versions d’Amazon EMR](emr-release-components.md).
+ Amazon EMR ne prend en charge que l’exécution d’une seule version d’exécution dans un cluster et ne prend pas en charge l’exécution de différents nœuds ou applications sur différentes versions d’exécution sur le même cluster.
+ Pour les versions 7.x d’Amazon EMR, la machine virtuelle Java (JVM) par défaut est Java 17 pour les applications compatibles avec Java 17, à l’exception d’Apache Livy. Pour plus d’informations sur les versions de JDK prises en charge pour les applications, voir les pages dédiées du Guide des versions d’Amazon EMR.
+ À partir d'Amazon EMR 7.1.0, Flink prend en charge Java 17 et est configuré sur Java 17 par défaut. Pour utiliser une version différente de l'environnement d'exécution Java, remplacez les paramètres définis dans`flink-conf`. Pour plus d'informations sur la configuration de Flink pour utiliser Java 8 ou Java 11, voir [Configurer Flink pour fonctionner avec Java](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html#flink-configure-java11) 11.
+ Pour les versions 5.x et 6.x d’Amazon EMR, la machine virtuelle Java (JVM) par défaut est Java 8.
  + Pour les versions 6.12.0 et supérieures d'Amazon EMR, certaines applications prennent également en charge Java 11 et 17. 
  + Pour les versions 6.9.0 et supérieures d'Amazon EMR, Trino prend en charge Java 17 par défaut. Pour plus d'informations sur Java 17 avec Trino, consultez [Trino updates to Java 17](https://trino.io/blog/2022/07/14/trino-updates-to-java-17.html) sur le blog de Trino.

Tenez compte des considérations spécifiques à l'application suivantes lorsque vous choisissez votre version d'exécution :


**Remarques de configuration Java spécifiques à l'application**  

| Application | Notes sur la configuration de Java | 
| --- | --- | 
| Spark | Pour exécuter Spark avec une version de Java autre que celle par défaut, vous devez configurer à la fois Spark et Hadoop. Pour obtenir des exemples, consultez [Remplacer la JVM](#configuring-java8-override). [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/emr/latest/ReleaseGuide/configuring-java8.html) | 
| Spark RAPIDS | Vous pouvez exécuter RAPIDS avec la version Java configurée pour Spark. | 
| Iceberg | Vous pouvez exécuter Iceberg avec la version Java configurée de l'application qui l'utilise. | 
| Delta | Vous pouvez exécuter Delta avec la version Java configurée de l'application qui l'utilise. | 
| Hudi | Vous pouvez exécuter Hudi avec la version Java configurée de l'application qui l'utilise. | 
| Hadoop | Pour mettre à jour la JVM pour Flink, modifiez `hadoop-env`. Pour obtenir des exemples, consultez [Remplacer la JVM](#configuring-java8-override). | 
| Hive | Pour définir la version Java sur 11 ou 17 pour Hive, configurez le paramètre JVM Hadoop sur la version Java que vous souhaitez utiliser.  | 
| HBase | Pour mettre à jour la JVM pour HBase, modifiez`hbase-env`. Par défaut, Amazon EMR définit la HBase JVM en fonction de la configuration JVM pour Hadoop, sauf si vous remplacez les paramètres dans. `hbase-env` Pour obtenir des exemples, consultez [Remplacer la JVM](#configuring-java8-override). | 
| Flink | Pour mettre à jour la JVM pour Flink, modifiez `flink-conf`. Par défaut, Amazon EMR définit la JVM Flink en fonction de la configuration JVM pour Hadoop, sauf si vous remplacez les paramètres dans `flink-conf`. Pour de plus amples informations, veuillez consulter [Configurer Flink pour qu'il fonctionne avec Java 11](flink-configure.md#flink-configure-java11). | 
| Oozie | Pour configurer Oozie pour qu'il fonctionne sur Java 11 ou 17, configurez Oozie Server, le Oozie LauncherAM Launcher AM et modifiez les configurations de vos exécutables et tâches côté client. Vous pouvez également configurer `EmbeddedOozieServer` pour l'exécuter sur Java 17. Pour de plus amples informations, veuillez consulter [Configurer la version Java pour Oozie](oozie-java.md). | 
| Pig | Pig ne supporte que Java 8. Vous ne pouvez pas utiliser Java 11 ou 17 avec Hadoop et exécuter Pig sur le même cluster. | 

## Remplacer la JVM
<a name="configuring-java8-override"></a>

Pour remplacer le paramètre JVM d'une version d'Amazon EMR (par exemple, pour utiliser Java 17 avec un cluster utilisant Amazon EMR version 6.12.0), entrez le paramètre `JAVA_HOME` correspondant à sa classification d'environnement, qui est `application-env` pour toutes les applications sauf Flink. Pour Flink, la classification de l'environnement est `flink-conf`. Pour connaître les étapes de configuration de l'environnement d'exécution Java avec Flink, consultez [Configurer Flink pour qu'il fonctionne avec Java 11](flink-configure.md#flink-configure-java11).

**Topics**
+ [Remplacer le paramètre JVM par Apache Spark](#configuring-java8-override-spark)
+ [Remplacer le paramètre JVM par Apache HBase](#configuring-java8-override-hbase)
+ [Remplacez le paramètre JVM par Apache Hadoop et Hive](#configuring-java8-override-hadoop)

### Remplacer le paramètre JVM par Apache Spark
<a name="configuring-java8-override-spark"></a>

Lorsque vous utilisez Spark avec Amazon EMR versions 6.12 et supérieures, vous pouvez configurer l'environnement de telle sorte que les exécuteurs utilisent Java 11 ou 17. Et lorsque vous utilisez Spark avec des versions d'Amazon EMR inférieures à 5.x et que vous écrivez un pilote à soumettre en mode cluster, le pilote utilise Java 7. Vous pouvez toutefois configurer l'environnement de manière à ce que les exécuteurs utilisent Java 8.

Pour remplacer la JVM pour Spark, définissez le paramètre de classification Spark. Dans cet exemple, la version de Java pour Hadoop est la même, mais cela n'est pas obligatoire.

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

Notez qu'il est recommandé pour Hadoop sur Amazon EMR que la version de la JVM soit cohérente entre tous les composants Hadoop.

 L'exemple suivant montre comment ajouter les paramètres de configuration requis pour EMR 7.0.0\$1 afin de garantir une utilisation cohérente de la version Java sur tous les composants.

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

### Remplacer le paramètre JVM par Apache HBase
<a name="configuring-java8-override-hbase"></a>

Pour configurer HBase pour utiliser Java 11, vous pouvez définir la configuration suivante lorsque vous lancez le cluster.

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

### Remplacez le paramètre JVM par Apache Hadoop et Hive
<a name="configuring-java8-override-hadoop"></a>

L'exemple suivant montre comment configurer la JVM sur la version 17 pour Hadoop et Hive.

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

## Ports de service
<a name="configuring-java8-service-ports"></a>

Les éléments suivants sont des ports de service YARN et HDFS. Ces paramètres reflètent les valeurs par défaut de Hadoop. D'autres services d'applications sont hébergés sur les ports par défaut, sauf indication contraire. Pour de plus amples informations, veuillez consulter la documentation du projet de l'application.


**Paramètres de port pour YARN and HDFS**  

| Paramètre | Nom d'hôte/Port | 
| --- | --- | 
| `fs.default.name` | par défaut (`hdfs://emrDeterminedIP:8020`) | 
| `dfs.datanode.address` | par défaut (`0.0.0.0:50010`) | 
| `dfs.datanode.http.address` | par défaut (`0.0.0.0:50075`) | 
| `dfs.datanode.https.address` | par défaut (`0.0.0.0:50475`) | 
| `dfs.datanode.ipc.address` | par défaut (`0.0.0.0:50020`) | 
| `dfs.http.address` | par défaut (`0.0.0.0:50070`) | 
| `dfs.https.address` | par défaut (`0.0.0.0:50470`) | 
| `dfs.secondary.http.address` | par défaut (`0.0.0.0:50090`) | 
| `yarn.nodemanager.address` | par défaut (`${yarn.nodemanager.hostname}:0`) | 
| `yarn.nodemanager.localizer.address` | par défaut (`${yarn.nodemanager.hostname}:8040`) | 
| `yarn.nodemanager.webapp.address` | par défaut (`${yarn.nodemanager.hostname}:8042`) | 
| `yarn.resourcemanager.address` | par défaut (`${yarn.resourcemanager.hostname}:8032`) | 
| `yarn.resourcemanager.admin.address` | par défaut (`${yarn.resourcemanager.hostname}:8033`) | 
| `yarn.resourcemanager.resource-tracker.address` | par défaut (`${yarn.resourcemanager.hostname}:8031`) | 
| `yarn.resourcemanager.scheduler.address` | par défaut (`${yarn.resourcemanager.hostname}:8030`) | 
| `yarn.resourcemanager.webapp.address` | par défaut (`${yarn.resourcemanager.hostname}:8088`) | 
| `yarn.web-proxy.address` | par défaut (`no-value`) | 
| `yarn.resourcemanager.hostname` | `emrDeterminedIP` | 

**Note**  
Le terme *emrDeterminedIP* est une adresse IP générée par le plan de contrôle Amazon EMR. Dans la version la plus récente, cette convention a été supprimée, sauf pour les paramètres `yarn.resourcemanager.hostname` et `fs.default.name`.

## Utilisateurs de l'application
<a name="configuring-java8-application-users"></a>

Les applications exécutent des processus comme s’il s’agissait de leur propre utilisateur. Par exemple, Hive JVMs s'exécute en tant qu'utilisateur`hive`, MapReduce JVMs exécute en tant qu'utilisateur`mapred`, etc. Ceci est illustré dans l'exemple d'état des processus suivant.

```
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
```