

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á.

# Melhorar a performance do Hive
<a name="emr-hive-s3-performance"></a>

O Amazon EMR oferece atributos para ajudar na otimização da performance ao usar o Hive para consultar, ler e gravar dados salvos no Amazon S3.

O S3 Select pode melhorar a performance de consultas para arquivos CSV e JSON em algumas aplicações ao enviar o processamento para o Amazon S3.

O committer otimizado do EMRFS S3 é uma alternativa à [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)classe, que elimina as operações de lista e renomeação para melhorar o desempenho ao gravar arquivos no Amazon S3 usando o EMRFS.

**Topics**
+ [Habilitar o confirmador otimizado para EMRFS S3 do Hive](hive-optimized-committer.md)
+ [Usar o S3 Select com o Hive para melhorar a performance](emr-hive-s3select.md)
+ [Otimização do MSCK](emr-msck-optimization.md)

# Habilitar o confirmador otimizado para EMRFS S3 do Hive
<a name="hive-optimized-committer"></a>

O confirmador otimizado para EMRFS S3 do Hive é uma forma alternativa pela qual o Hive no EMR grava arquivos para inserir consultas ao ser usado o EMRFS. O confirmador elimina as operações de listar e renomear feitas no Amazon S3 e melhora a performance da aplicação. O atributo está disponível desde o EMR 5.34 e o EMR 6.5.

## Habilitar o confirmador
<a name="enabling-hive-committer"></a>

Se você quiser permitir que o Hive no EMR use `HiveEMRFSOptimizedCommitter` para confirmar dados como padrão para todas as tabelas externas e gerenciadas do Hive, use a seguinte configuração `hive-site` nos clusters do EMR 6.5.0 ou do EMR 5.34.0.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**nota**  
Não ative esse atributo quando `hive.exec.parallel` estiver definido como `true`.

## Limitações
<a name="hive-committer-limitations"></a>

As restrições básicas a seguir se aplicam a tags:
+ Não há suporte para habilitar o Hive para mesclar arquivos pequenos automaticamente. A lógica de confirmação padrão do Hive será usada mesmo quando o confirmador otimizado estiver habilitado.
+ As tabelas ACID do Hive não são suportadas. A lógica de confirmação padrão do Hive será usada mesmo quando o confirmador otimizado estiver habilitado.
+ A nomenclatura de nomeação para arquivos gravados foi alterada de `<task_id>_<attempt_id>_<copy_n>` para `<task_id>_<attempt_id>_<copy_n>_<query_id>` do Hive. Por exemplo, um arquivo denominado 

  `s3://warehouse/table/partition=1/000000_0` será alterado para `s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. A `query_id` aqui é uma combinação de nome de usuário, carimbo de data/hora e UUID.
+ Quando partições personalizadas estão em sistemas de arquivos diferentes (HDFS, S3), esse atributo é automaticamente desabilitado. A lógica de confirmação padrão do Hive será usada quando estiver habilitada.

# Usar o S3 Select com o Hive para melhorar a performance
<a name="emr-hive-s3select"></a>

**Importante**  
O Amazon S3 Select não está mais disponível para novos clientes. Os clientes existentes do Amazon S3 Select podem continuar usando o recurso normalmente. [Saiba mais](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Com as versões 5.18.0 e posteriores do Amazon EMR, você pode usar o [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) com o Hive no Amazon EMR. O S3 Select possibilita que as aplicações recuperem apenas um subconjunto dos dados de um objeto. Para o Amazon EMR, o trabalho de computação de filtrar grandes conjuntos de dados para processamento é enviado do cluster para o Amazon S3, o que pode melhorar a performance em algumas aplicações e reduz o volume de dados transferidos entre o Amazon EMR e o Amazon S3.

O S3 Select é compatível com tabelas do Hive com base em arquivos CSV e JSON e definindo a variável de configuração `s3select.filter` como `true` durante a sessão do Hive. Para ter mais informações e exemplos, consulte [Especificar o S3 Select no código](#emr-hive-s3select-specify).

## O S3 Select é adequado para minha aplicação?
<a name="emr-hive-s3select-apps"></a>

Recomendamos que você avalie seus aplicativos com e sem o S3 Selecione para ver se o uso pode ser adequado para o aplicativo.

Use as seguintes diretrizes para determinar se o seu aplicativo é adequado para o uso do S3 Select:
+ Sua consulta filtra mais de metade do conjunto de dados original.
+ Os predicados do filtro de consulta usam colunas que têm um tipo de dados compatível com o Amazon S3 Select. Para obter mais informações, consulte [Tipos de dados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) no *Guia do usuário do Amazon Simple Storage Service*.
+ Sua conexão de rede entre o Amazon S3 e o cluster do Amazon EMR tem boa velocidade de transferência e largura de banda disponível. O Amazon S3 não compacta respostas HTTP. Portanto, é provável que o tamanho da resposta aumente para arquivos de entrada compactados.

## Considerações e limitações
<a name="emr-hive-s3select-considerations"></a>
+ A criptografia do lado do servidor do Amazon S3 com chaves de criptografia fornecidas pelo cliente (SSE-C) e a criptografia do lado do cliente não são compatíveis. 
+ A propriedade `AllowQuotedRecordDelimiters` não é compatível. Se essa propriedade for especificada, a consulta falhará.
+ Somente arquivos CSV e JSON no formato UTF-8 são compatíveis. Não há suporte para várias linhas CSVs e JSON.
+ Somente arquivos descompactados, gzip ou bzip2 são compatíveis.
+ Caracteres de comentário na última linha não são compatíveis.
+ Linhas vazias no final de um arquivo não são processadas.
+ O Hive no Amazon EMR oferece suporte a tipos de dados primitivos compatíveis com o S3 Select. Para obter mais informações, consulte [Tipos de dados](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) no *Guia do usuário do Amazon Simple Storage Service*.

## Especificar o S3 Select no código
<a name="emr-hive-s3select-specify"></a>

Para usar o S3 Select em uma tabela do Hive, crie a tabela especificando `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` como o nome da classe `INPUTFORMAT` e especifique um valor para a propriedade `s3select.format` usando a cláusula `TBLPROPERTIES`.

Por padrão, o S3 Select está desabilitado quando você executa consultas. Habilite o S3 Select definindo `s3select.filter` como `true` em sua sessão do Hive, conforme mostrado a seguir. Os exemplos a seguir demonstram como especificar o S3 Select ao criar uma tabela do CSV subjacente e arquivos JSON e, em seguida, consultar a tabela com uma instrução simples do Select.

**Example Instrução CREATE TABLE para tabela baseada em CSV**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example Instrução CREATE TABLE para tabela baseada em JSON**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example Instrução SELECT TABLE**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# Otimização do MSCK
<a name="emr-msck-optimization"></a>

O Hive armazena uma lista de partições para cada tabela no seu metastore. No entanto, quando as partições são adicionadas ou removidas diretamente do sistema de arquivos, o metastore do Hive não toma conhecimento dessas alterações. O [comando MSCK](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) atualiza os metadados da partição no metastore do Hive para partições que foram adicionadas ou removidas diretamente do sistema de arquivos. A sintaxe do comando é:

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

O Hive implementa esse comando da seguinte forma:

1. O Hive recupera todas as partições da tabela do metastore. Em seguida, com base na lista de caminhos de partição que não existem no sistema de arquivos, ele cria uma lista de partições a serem descartadas do metastore.

1. O Hive reúne os caminhos de partição presentes no sistema de arquivos, compara-os com a lista de partições do metastore e gera uma lista de partições que precisam ser adicionadas ao metastore.

1. O Hive atualiza a metastore usando o modo `ADD`, `DROP` ou `SYNC`.

**nota**  
Quando há muitas partições no metastore, a etapa para verificar se uma partição não existe no sistema de arquivos leva muito tempo para ser executada porque a chamada de API `exists` do sistema de arquivos deve ser feita para cada partição.

No Amazon EMR 6.5.0, o Hive introduziu um sinalizador denominado `hive.emr.optimize.msck.fs.check`. Quando habilitado, esse sinalizador faz com que o Hive verifique a presença de uma partição na lista de caminhos de partição do sistema de arquivos gerada na etapa 2 acima, em vez de fazer chamadas de API do sistema de arquivos. No Amazon EMR 6.8.0, o Hive habilitou essa otimização por padrão, eliminando a necessidade de definir o sinalizador `hive.emr.optimize.msck.fs.check`.