

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 um metastore externo para o Hive
<a name="emr-metastore-external-hive"></a>

Por padrão, o Hive registra as informações do metastore em um banco de dados MySQL no sistema de arquivos do nó primário. O metastore contém uma descrição da tabela e dos dados subjacentes nos quais foi criado, incluindo os nomes de partição, os tipos de dados etc. Quando um cluster é encerrado, todos os nós de cluster são desligados, inclusive o nó primário. Quando isso acontece, os dados locais são perdidos porque os sistemas de arquivos dos nós usam armazenamento temporário. Se precisar que o metastore seja persistido, você deverá criar um *metastore externo* que exista fora do cluster.

Você tem duas opções para um metastore externo:
+ AWS Glue Data Catalog (somente Amazon EMR versão 5.8.0 ou posterior).

  Para obter mais informações, consulte [Usando o AWS Glue Data Catalog como metastore para o Hive](emr-hive-metastore-glue.md).
+ Amazon RDS ou Amazon Aurora.

  Para obter mais informações, consulte [Usar um banco de dados externo MySQL ou Amazon Aurora](emr-hive-metastore-external.md).

**nota**  
Se você estiver usando o Hive 3 e encontrar muitas conexões com o metastore do Hive, configure o parâmetro `datanucleus.connectionPool.maxPoolSize` para ter um valor menor ou aumente o número de conexões que o servidor de banco de dados pode processar. O aumento do número de conexões se deve à forma como o Hive calcula o número máximo de conexões JDBC. Para calcular o valor ideal de performance, consulte [Propriedades de configuração do Hive](https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-datanucleus.connectionPool.maxPoolSize.1).

# Usando o AWS Glue Data Catalog como metastore para o Hive
<a name="emr-hive-metastore-glue"></a>

Usando o Amazon EMR versão 5.8.0 ou posterior, você pode configurar o Hive para usar o AWS Glue Data Catalog como seu metastore. Recomendamos essa configuração quando você precisa de um metastore persistente ou de um metastore compartilhado por diferentes clusters, serviços e aplicativos ou contas da AWS .

AWS O Glue é um serviço de extração, transformação e carregamento (ETL) totalmente gerenciado que torna simples e econômico categorizar seus dados, limpá-los, enriquecê-los e movê-los de forma confiável entre vários armazenamentos de dados. O AWS Glue Data Catalog fornece um repositório unificado de metadados em uma variedade de fontes e formatos de dados, integrando-se ao Amazon EMR, bem como ao Amazon RDS, Amazon Redshift, Redshift Spectrum, Athena e qualquer aplicativo compatível com o metastore Apache Hive. AWS Os rastreadores do Glue podem inferir automaticamente o esquema dos dados de origem no Amazon S3 e armazenar os metadados associados no catálogo de dados. Para obter mais informações sobre o Catálogo de Dados, consulte [Preenchendo o Catálogo de Dados do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) no *Guia do Desenvolvedor do AWS Glue*.

Taxas separadas se aplicam ao AWS Glue. Há uma taxa mensal para armazenar e acessar os metadados no Catálogo de Dados, uma taxa horária cobrada por minuto pelas tarefas do AWS Glue ETL e pelo tempo de execução do rastreador, e uma taxa horária cobrada por minuto para cada endpoint de desenvolvimento provisionado. O Catálogo de Dados permite o armazenamento de até um milhão de objetos gratuitamente. Se você armazenar mais de um milhão de objetos, será cobrado uma taxa de USD\$11 por cada 100.000 objetos em mais de um milhão. Um objeto no Catálogo de Dados é uma tabela, uma partição ou um banco de dados. Para obter mais informações, consulte [Definição de preço do Glue](https://aws.amazon.com/glue/pricing).

**Importante**  
Se você criou tabelas usando o Amazon Athena ou o Amazon Redshift Spectrum antes de 14 de agosto de 2017, bancos de dados e tabelas são armazenados em um catálogo gerenciado pelo Athena, que é separado do Glue Data Catalog. AWS Para integrar o Amazon EMR a essas tabelas, você deve fazer o upgrade para o AWS Glue Data Catalog. Para obter mais informações, consulte [Atualização para o catálogo de dados AWS Glue no Guia](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html) do usuário do *Amazon Athena*.

## Especificando o AWS Glue Data Catalog como metastore
<a name="emr-hive-glue-configure"></a>

Você pode especificar o AWS Glue Data Catalog como metastore usando a API Console de gerenciamento da AWS AWS CLI, ou Amazon EMR. Ao usar a CLI ou a API, você usa a classificação de configuração do Hive para especificar o Catálogo de Dados. Além disso, com o Amazon EMR 5.16.0 e versões posteriores, você pode usar a classificação de configuração para especificar um catálogo de dados em outro. Conta da AWS Ao usar o console, você pode especificar o Catálogo de Dados usando **Opções avançadas** ou **Opções rápidas**.

------
#### [ Console ]

**Para especificar o AWS Glue Data Catalog como o metastore do Hive com o console**

1. [Faça login no e abra Console de gerenciamento da AWS o console do Amazon EMR em https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr)

1. Em **EMR no EC2**, no painel de navegação esquerdo, escolha **Clusters** e depois **Criar cluster**.

1. **Em **Pacote de aplicativos**, escolha **Core Hadoop** ou Custom **HBase**.** Se você personalizar seu cluster, certifique-se de selecionar o Hive ou HCatalog como um dos seus aplicativos.

1. Em **Configurações do Catálogo de Dados do AWS Glue**, marque a caixa de seleção **Usar para metadados de tabelas do Hive**.

1. Escolha qualquer outra opção que se aplique ao cluster. 

1. Para iniciar o cluster, escolha **Criar cluster**.

------
#### [ CLI ]

**Para especificar o AWS Glue Data Catalog como o metastore do Hive com o AWS CLI**

Para obter mais informações sobre como especificar uma classificação de configuração usando a API AWS CLI e EMR, consulte. [Configurar aplicações](emr-configure-apps.md)
+ Especifique o valor para `hive.metastore.client.factory.class` usando a classificação de configuração `hive-site`, conforme mostrado neste exemplo:

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
      }
    }
  ]
  ```

  Nas versões 5.28.0, 5.28.1, 5.29.0 ou 6.x do EMR, se você estiver criando um cluster usando o AWS Glue Data Catalog como metastore, defina o. `hive.metastore.schema.verification` `false` Isso impede que o Hive and valide o esquema HCatalog do metastore em relação ao MySQL. Sem essa configuração, o grupo de instâncias primárias será suspenso após a reconfiguração no Hive ou. HCatalog 

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false"
      }
    }
  ]
  ```

  Se você já tiver um cluster na versão 5.28.0, 5.28.1 ou 5.29.0 do EMR, poderá definir o grupo de instâncias principais `hive.metastore.schema.verification` como `false` com as seguintes informações:

  ```
     
      Classification = hive-site
      Property       = hive.metastore.schema.verification
      Value          = false
  ```

  Para especificar um catálogo de dados em uma AWS conta diferente, adicione a `hive.metastore.glue.catalogid` propriedade conforme mostrado no exemplo a seguir. Substitua `acct-id` pela conta da AWS do Catálogo de Dados.

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false",
        "hive.metastore.glue.catalogid": "acct-id"
      }
    }
  ]
  ```

------

## permissões do IAM
<a name="emr-hive-glue-permissions"></a>

O perfil da instância EC2 de um cluster deve ter permissões do IAM para ações do AWS Glue. Além disso, se você habilitar a criptografia para objetos do AWS Glue Data Catalog, a função também deverá ter permissão para criptografar, descriptografar e gerar o AWS KMS key usado para criptografia.

### Permissões para ações do AWS Glue
<a name="emr-hive-glue-permissions-actions"></a>

Se você usar o perfil de instância padrão do EC2 para o Amazon EMR, nenhuma ação será necessária. A política `AmazonElasticMapReduceforEC2Role` gerenciada anexada ao `EMR_EC2_DefaultRole` permite todas as ações necessárias do AWS Glue. No entanto, se você especificar um perfil e permissões de instância EC2 personalizados, deverá configurar as ações apropriadas do AWS Glue. Use a política gerenciada `AmazonElasticMapReduceforEC2Role` como ponto de partida. Para obter mais informações, consulte [Perfil de serviço para instâncias do EC2 de cluster (perfil de instância do EC2)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html) no *Guia de gerenciamento do Amazon EMR*.

### Permissões para criptografar e descriptografar o Glue Data Catalog AWS
<a name="emr-hive-glue-permissions-encrypt"></a>

O perfil de instância precisa de permissão para criptografar e descriptografar dados usando a chave. Você *não* precisa configurar essas permissões se as duas instruções a seguir se aplicarem:
+ Você ativa a criptografia para objetos do AWS Glue Data Catalog usando chaves gerenciadas para o AWS Glue.
+ Você usa um cluster que está no mesmo catálogo Conta da AWS de dados do AWS Glue.

Caso contrário, você deverá adicionar a seguinte instrução à política de permissões anexada ao perfil de instância do EC2. 

Para obter mais informações sobre a criptografia do AWS Glue Data Catalog, consulte [Criptografando seu catálogo de dados](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html) no *AWS Glue Developer Guide*.

### Permissões baseadas em recursos
<a name="emr-hive-glue-permissions-resource"></a>

Se você usa o AWS Glue em conjunto com o Hive, o Spark ou o Presto no Amazon EMR AWS , o Glue oferece suporte a políticas baseadas em recursos para controlar o acesso aos recursos do catálogo de dados. Esses recursos incluem bancos de dados, tabelas, conexões e funções definidas pelo usuário. Para obter mais informações, consulte [Políticas baseadas em recursos no AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html) no *Guia do desenvolvedor do AWS Glue*.

Ao usar políticas baseadas em recursos para limitar o acesso ao AWS Glue de dentro do Amazon EMR, o principal que você especifica na política de permissões deve ser o ARN da função associado ao perfil de instância do EC2 que é especificado quando um cluster é criado. Por exemplo, para uma política baseada em recursos anexada a um catálogo, você pode especificar o ARN da função para a função de serviço padrão para instâncias EC2 de cluster, *EMR\$1EC2\$1DefaultRole* como a`Principal`, usando o formato mostrado no exemplo a seguir:

```
arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole
```

*acct-id*Pode ser diferente do ID da conta AWS Glue. Isso possibilita o acesso de clusters do EMR em outras contas. Você pode especificar várias entidades principais, cada uma de uma conta diferente.

## Considerações ao usar o AWS Glue Data Catalog
<a name="emr-hive-glue-considerations-hive"></a>

Considere os seguintes itens ao usar o AWS Glue Data Catalog como metastore com o Hive:
+ A adição de auxiliares JARs usando o shell Hive não é suportada. Como solução alternativa, use a classificação de `hive-site` configuração para definir a `hive.aux.jars.path` propriedade, que adiciona auxiliar JARs ao classpath do Hive.
+ Não há suporte para [transações do Hive](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions).
+ Não há suporte para renomear tabelas de dentro do AWS Glue.
+ Quando você cria uma tabela do Hive sem especificar um `LOCATION`, os dados da tabela são armazenados no local especificado pela propriedade `hive.metastore.warehouse.dir`. Por padrão, esse é um local no HDFS. Se outro cluster precisar acessar a tabela, ele apresentará falha, a menos que tenha permissões adequadas para o cluster que criou a tabela. Além disso, como o armazenamento do HDFS é transitório, se o cluster for encerrado, os dados da tabela serão perdidos e a tabela precisará ser recriada. Recomendamos que você especifique a `LOCATION` no Amazon S3 ao criar uma tabela do Hive usando o Glue. AWS Como alternativa, você pode usar a classificação de configuração `hive-site` para especificar um local no Amazon S3 para `hive.metastore.warehouse.dir`, que se aplica a todas as tabelas do Hive. Se uma tabela for criada em um local do HDFS e o cluster que a criou ainda estiver em execução, você poderá atualizar o local da tabela para o Amazon S3 a partir AWS do Glue. Para obter mais informações, consulte Como [trabalhar com tabelas no console do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) no *Guia do desenvolvedor do AWS Glue*. 
+ Valores de partição contendo aspas e apóstrofos não são compatíveis, por exemplo, `PARTITION (owner="Doe's").`
+ [As estatísticas de coluna](https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ColumnStatistics) são têm suporte para o emr-5.31.0 e versões posteriores.
+ O uso da [autorização do Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization) não é compatível. Como alternativa, considere usar as [Políticas baseadas em recursos do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html). Para obter mais informações, consulte [Usar políticas baseadas em recursos para o Amazon EMR Access to AWS Glue](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html) Data Catalog.
+ Não há suporte para [restrições do Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Constraints).
+ A [Otimização baseada em custos no Hive](https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive) não é compatível.
+ A configuração de `hive.metastore.partition.inherit.table.properties` não é compatível. 
+ O uso das seguintes constantes de metastore não é compatível: `BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION`.
+ Quando você usa uma expressão do predicado, os valores explícitos devem estar no lado direito do operador de comparação ou as consultas podem apresentar falha.
  + **Correto**: `SELECT * FROM mytable WHERE time > 11`
  + **Incorreto**: `SELECT * FROM mytable WHERE 11 > time`
+ As versões 5.32.0 e 6.3.0 e posteriores do Amazon EMR oferecem suporte ao uso de funções definidas pelo usuário () em expressões de predicados. UDFs Quando são usadas versões anteriores, suas consultas podem apresentar falha devido à forma como o Hive tenta otimizar a execução da consulta.
+ [Tabelas temporárias](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TemporaryTables) não são compatíveis.
+ Recomendamos criar tabelas usando aplicativos por meio do Amazon EMR em vez de criá-las diretamente usando o AWS Glue. Criar uma tabela por meio do AWS Glue pode fazer com que os campos obrigatórios sejam perdidos e causar exceções de consulta.
+ No EMR 5.20.0 ou posterior, a remoção paralela de partições é ativada automaticamente para Spark e Hive quando o AWS Glue Data Catalog é usado como metastore. Essa alteração reduz significativamente o tempo de planejamento de consultas ao executar várias solicitações em paralelo para recuperar partições. O número total de segmentos que podem ser executados simultaneamente varia entre 1 e 10. O valor padrão é 5, que é uma configuração recomendada. Você pode alterá-lo especificando a propriedade `aws.glue.partition.num.segments` na classificação de configuração `hive-site`. Se ocorrer controle de utilização, você poderá desativar o atributo alterando o valor para 1. Para obter mais informações, consulte a [Estrutura de segmentos do AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-Segment).

# Usar um banco de dados externo MySQL ou Amazon Aurora
<a name="emr-hive-metastore-external"></a>

Para usar um banco de dados MySQL externo ou o Amazon Aurora como seu metastore do Hive, você substitui os valores de configuração padrão do metastore no Hive para especificar a localização do banco de dados externo, seja em uma instância MySQL do Amazon RDS ou em um Amazon Aurora Postgre. SQLinstance

**nota**  
O Hive não oferece suporte nem impede o acesso simultâneo para gravação em tabelas da metastore. Se você compartilhar informações do metastore entre dois clusters, deverá garantir não gravar na mesma tabela do metastore simultaneamente, a menos que esteja gravando em partições diferentes da mesma tabela do metastore.

O procedimento a seguir mostra como substituir os valores de configuração padrão para a localização da metastore do Hive e iniciar um cluster usando a localização da metastore reconfigurada.

**Para criar uma metastore localizada fora do cluster do EMR**

1. Crie um banco de dados MySQL ou Aurora PostgreSQL. Se você usa o PostgreSQL, deve configurá-lo depois de provisionar o cluster. Somente o MySQL é compatível na criação do cluster. Para obter informações sobre as diferenças entre o Aurora MySQL e o Aurora PostgreSQL, consulte [Visão geral do Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Overview.html) e [Trabalhar com o Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html). Para obter informações sobre como criar um banco de dados do Amazon RDS em geral, consulte [https://aws.amazon.com/rds/](https://aws.amazon.com/rds/).

1. Modifique seus grupos de segurança para permitir conexões JDBC entre seu banco de dados e o grupo de segurança **ElasticMapReduce-Master**. Para obter informações sobre como modificar os grupos de segurança para obter acesso, consulte [Working with Amazon EMR-managed security groups](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-man-sec-groups.html).

1. Defina valores de configuração do JDBC em `hive-site.xml`:
**Importante**  
Se você fornecer informações confidenciais, como senhas, à API de configuração do Amazon EMR, estas informações serão exibidas para as contas que tiverem permissões suficientes. Se você teme que essas informações possam ser exibidas para outros usuários, crie o cluster com uma conta administrativa e limite os outros usuários (usuários do IAM ou aqueles com credenciais delegadas) para o acesso a serviços no cluster, criando uma função que negue permissões explicitamente para a chave de API `elasticmapreduce:DescribeCluster`.

   1. Crie um arquivo de configuração chamado `hiveConfiguration.json`, que contém edições em `hive-site.xml`, conforme mostrado no exemplo a seguir.

       *hostname*Substitua pelo endereço DNS da sua instância do Amazon RDS executando o banco de dados *username* e *password* pelas credenciais do seu banco de dados. Para obter mais informações sobre como se conectar a instâncias de banco de dados MySQL e Aurora, consulte [Conectar-se a uma instância de banco de dados executando o mecanismo de banco de dados MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html) e [Conectar-se a um cluster de banco de dados do Athena](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connect.html) no *Guia do usuário do Amazon RDS*. `javax.jdo.option.ConnectionURL` é a string de conexão JDBC para um metastore JDBC. `javax.jdo.option.ConnectionDriverName` é o nome da classe de driver para um metastore JDBC.

      Os drivers JDBC MySQL são instalados pelo Amazon EMR. 

      A propriedade "value" não pode conter espaços ou retornos de carro. Eles devem aparecer todos em uma única linha.

      ```
      [
          {
            "Classification": "hive-site",
            "Properties": {
              "javax.jdo.option.ConnectionURL": "jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true",
              "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
              "javax.jdo.option.ConnectionUserName": "username",
              "javax.jdo.option.ConnectionPassword": "password"
            }
          }
        ]
      ```

   1. Faça referência ao `hiveConfiguration.json` arquivo ao criar o cluster, conforme mostrado no AWS CLI comando a seguir. Neste comando, o arquivo é armazenado localmente, você também pode carregar o arquivo para o Amazon S3 e consultá-lo, por exemplo, `s3://DOC-EXAMPLE-BUCKET/hiveConfiguration.json`.
**nota**  
Os caracteres de continuação de linha do Linux (\$1) são incluídos para facilitar a leitura. Eles podem ser removidos ou usados ​​em comandos do Linux. No Windows, remova-os ou substitua-os por um sinal de interpolação (^).

      ```
      aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge --instance-count 2 \
      --applications Name=Hive --configurations file://hiveConfiguration.json --use-default-roles
      ```

1. Conecte-se ao nó primário do cluster. 

   Para obter informações sobre como se conectar ao nó primário, consulte [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) no *Guia de gerenciamento do Amazon EMR*.

1. Crie tabelas do Hive especificando o local no Amazon S3 ao digitar um comando semelhante ao seguinte:

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS table_name
   (
   key int,
   value int
   )
   LOCATION s3://DOC-EXAMPLE-BUCKET/hdfs/
   ```

1. Adicione seu script do Hive ao cluster em execução.

O cluster do Hive é executado com o uso do metastore localizado no Amazon RDS. Execute todos os clusters Hive adicionais que compartilham essa metastore, especificando a localização da metastore. 