

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar aplicações para usar uma Máquina Virtual Java específica
<a name="configuring-java8"></a>

As versões do Amazon EMR têm diferentes versões Máquina Virtual Java (JVM) padrão. Esta página explica a compatibilidade da JVM para diferentes versões e aplicações.

## Considerações
<a name="configuring-java8-considerations"></a>

Para obter informações sobre as versões do Java compatíveis com aplicações, consulte as páginas das aplicações no [Guia de lançamento do Amazon EMR](emr-release-components.md).
+ O Amazon EMR só oferece suporte à execução de uma versão de runtime em um cluster e não oferece suporte à execução de nós ou aplicações diferentes em outras versões de runtime no mesmo cluster.
+ Para o Amazon EMR 7.x, a Máquina Virtual Java (JVM) padrão é Java 17 para aplicações compatíveis com Java 17, com exceção do Apache Livy. Para obter mais informações sobre as versões do JDK compatíveis com aplicações, consulte a página de lançamento correspondente no Guia de lançamento do Amazon EMR.
+ A partir do Amazon EMR 7.1.0, o Flink oferece suporte e está configurado para Java 17 por padrão. Para usar uma versão diferente do runtime do Java, substitua as configurações em `flink-conf`. Para obter mais informações sobre como configurar o Flink para usar o Java 8 ou o Java 11, consulte [Configure Flink to run with Java 11](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/flink-configure.html#flink-configure-java11).
+ Para as séries 5.x e 6.x do Amazon EMR, a Máquina Virtual Java (JVM) padrão é Java 8.
  + Para as versões 6.12.0 e posteriores do Amazon EMR, algumas aplicações também oferecem suporte ao Java 11 e 17. 
  + Para as versões 6.9.0 e posteriores do Amazon EMR, o Trino oferece suporte ao Java 17 como padrão. Para obter mais informações sobre o Java 17 com Trino, consulte [Trino updates to Java 17](https://trino.io/blog/2022/07/14/trino-updates-to-java-17.html) no blog do Trino.

Lembre-se das seguintes considerações específicas da aplicação ao escolher sua versão de runtime:


**Notas de configuração Java específicas da aplicação**  

| Aplicação | Notas sobre configurações do Java | 
| --- | --- | 
| Spark | Para executar o Spark com uma versão Java que não seja padrão, é necessário configurar o Spark e o Hadoop. Para obter exemplos, consulte [Substituir a JVM](#configuring-java8-override). [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/emr/latest/ReleaseGuide/configuring-java8.html) | 
| Spark RAPIDS | É possível executar o RAPIDS com a versão Java configurada para o Spark. | 
| Iceberg | Você pode executar o Iceberg com a versão Java configurada da aplicação que o está usando. | 
| Delta | Você pode executar o Delta com a versão Java configurada da aplicação que o está usando. | 
| Hudi | Você pode executar o Hudi com a versão Java configurada da aplicação que o está usando. | 
| Hadoop | Para atualizar a JVM para o Hadoop, modifique `hadoop-env`. Para obter exemplos, consulte [Substituir a JVM](#configuring-java8-override). | 
| Hive | Para definir a versão Java como 11 ou 17 para Hive, defina a configuração da JVM do Hadoop para a versão do Java que você deseja usar.  | 
| HBase | Para atualizar a JVM para HBase, modifique. `hbase-env` Por padrão, o Amazon EMR define a HBase JVM com base na configuração da JVM para o Hadoop, a menos que você substitua as configurações em. `hbase-env` Para obter exemplos, consulte [Substituir a JVM](#configuring-java8-override). | 
| Flink | Para atualizar a JVM para Flink, modifique `flink-conf`. Por padrão, o Amazon EMR define a JVM do Flink segundo a configuração da JVM para o Hadoop, a menos que você substitua as configurações em `flink-conf`. Para obter mais informações, consulte [Configurar o Flink para ser executado com o Java 11](flink-configure.md#flink-configure-java11). | 
| Oozie | Para configurar o Oozie para ser executado no Java 11 ou 17, configure o Oozie Server, o Oozie LauncherAM Launcher AM e altere as configurações de trabalho e executáveis do lado do cliente. Também é possível configurar `EmbeddedOozieServer` para ser executado no Java 17. Para obter mais informações, consulte [Configurar a versão do Java para Oozie](oozie-java.md). | 
| Pig | O Pig é compatível apenas com Java 8. Não é possível usar o Java 11 ou 17 com o Hadoop e executar o Pig no mesmo cluster. | 

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

Para substituir a configuração da JVM para uma versão do Amazon EMR (por exemplo, para usar o Java 17 com um cluster que usa o Amazon EMR versão 6.12.0) forneça a configuração `JAVA_HOME` para sua classificação de ambiente, que é `application-env` para todas as aplicações, exceto o Flink. Para o Flink, a classificação do ambiente é `flink-conf`. Para obter as etapas para configurar o runtime Java com o Flink, consulte [Configurar o Flink para ser executado com o Java 11](flink-configure.md#flink-configure-java11).

**Topics**
+ [Substituir a configuração da JVM usando o Apache Spark](#configuring-java8-override-spark)
+ [Substitua a configuração da JVM com o Apache HBase](#configuring-java8-override-hbase)
+ [Substituir a configuração da JVM usando o Apache Hadoop e o Hive](#configuring-java8-override-hadoop)

### Substituir a configuração da JVM usando o Apache Spark
<a name="configuring-java8-override-spark"></a>

Ao usar o Spark com as versões 6.12 e superiores do Amazon EMR, você pode definir o ambiente para que os executores usem o Java 11 ou 17. E quando você usa o Spark com versões do Amazon EMR anteriores a 5.x e grava um driver para envio no modo de cluster, o driver usa o Java 7. No entanto, você pode configurar o ambiente para garantir que os executores usem o Java 8.

Para substituir a JVM do Spark, defina a configuração de classificação do Spark. Neste exemplo, a versão do Java para o Hadoop é a mesma, mas isso não é obrigatório.

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

Observação: para o Hadoop no Amazon EMR, uma prática recomendada é que a versão da JVM seja consistente em todos os componentes do Hadoop.

 O exemplo a seguir mostra como adicionar parâmetros de configuração necessários para o EMR 7.0.0\$1 para garantir o uso consistente da versão Java em todos os componentes.

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

### Substitua a configuração da JVM com o Apache HBase
<a name="configuring-java8-override-hbase"></a>

Para configurar HBase para usar o Java 11, você pode definir a seguinte configuração ao iniciar o 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": []
            }
        ]
    }
]
```

### Substituir a configuração da JVM usando o Apache Hadoop e o Hive
<a name="configuring-java8-override-hadoop"></a>

O exemplo a seguir mostra como definir a JVM para a versão 17 para Hadoop e Hive.

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

## Portas de serviço
<a name="configuring-java8-service-ports"></a>

A seguir estão as portas de serviço YARN e HDFS. Essas configurações refletem os padrões do Hadoop. Outros serviços de aplicativos são hospedados em portas padrão, a menos que documentado de outra forma. Para obter mais informações, consulte a documentação de projeto do aplicativo.


**Configurações de portas para o YARN e o HDFS**  

| Configuração | Nome do host/Porta | 
| --- | --- | 
| `fs.default.name` | (padrão) (`hdfs://emrDeterminedIP:8020`) | 
| `dfs.datanode.address` | (padrão) (`0.0.0.0:50010`) | 
| `dfs.datanode.http.address` | (padrão) (`0.0.0.0:50075`) | 
| `dfs.datanode.https.address` | (padrão) (`0.0.0.0:50475`) | 
| `dfs.datanode.ipc.address` | (padrão) (`0.0.0.0:50020`) | 
| `dfs.http.address` | (padrão) (`0.0.0.0:50070`) | 
| `dfs.https.address` | (padrão) (`0.0.0.0:50470`) | 
| `dfs.secondary.http.address` | (padrão) (`0.0.0.0:50090`) | 
| `yarn.nodemanager.address` | (padrão) (`${yarn.nodemanager.hostname}:0`) | 
| `yarn.nodemanager.localizer.address` | (padrão) (`${yarn.nodemanager.hostname}:8040`) | 
| `yarn.nodemanager.webapp.address` | (padrão) (`${yarn.nodemanager.hostname}:8042`) | 
| `yarn.resourcemanager.address` | (padrão) (`${yarn.resourcemanager.hostname}:8032`) | 
| `yarn.resourcemanager.admin.address` | (padrão) (`${yarn.resourcemanager.hostname}:8033`) | 
| `yarn.resourcemanager.resource-tracker.address` | (padrão) (`${yarn.resourcemanager.hostname}:8031`) | 
| `yarn.resourcemanager.scheduler.address` | (padrão) (`${yarn.resourcemanager.hostname}:8030`) | 
| `yarn.resourcemanager.webapp.address` | (padrão) (`${yarn.resourcemanager.hostname}:8088`) | 
| `yarn.web-proxy.address` | (padrão) (`no-value`) | 
| `yarn.resourcemanager.hostname` | `emrDeterminedIP` | 

**nota**  
O termo *emrDeterminedIP* é um endereço IP gerado pelo plano de controle do Amazon EMR. Na versão mais recente, essa convenção foi eliminada, com exceção para as configurações `yarn.resourcemanager.hostname` e `fs.default.name`.

## Usuários do aplicativo
<a name="configuring-java8-application-users"></a>

Os aplicativos executarão processos como seus próprios usuários. Por exemplo, o Hive é JVMs executado como usuário`hive`, MapReduce JVMs executado como `mapred` e assim por diante. Isso é demonstrado no exemplo a seguir de status de processo.

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