

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

# Como o Hudi funciona
<a name="emr-hudi-how-it-works"></a>

Ao usar o Hudi com o Amazon EMR, você pode gravar dados no conjunto de dados usando a API Spark Data Source ou o utilitário Hudi. DeltaStreamer O Hudi organiza um conjunto de dados em uma estrutura de diretórios particionada em um `{{basepath}}` que é semelhante a uma tabela tradicional do Hive. As especificidades de como os dados são definidos como arquivos nesses diretórios dependem do tipo de conjunto de dados escolhido. É possível escolher Copiar na gravação (CoW – Copy on Write) ou Mesclar na leitura (MoR – Merge on Read).

Independentemente do tipo de conjunto de dados, cada partição em um conjunto de dados é identificada exclusivamente por seu `partitionpath` relativo ao `basepath`. Dentro de cada partição, os registros são distribuídos em vários arquivos de dados. Para obter mais informações, consulte [File management](https://hudi.apache.org/docs/concepts#file-management) na documentação do Apache Hudi.

Cada ação no Hudi tem uma confirmação correspondente, identificada por um carimbo de data/hora monotonicamente crescente conhecido como *Instant*. O Hudi mantém uma série de todas as ações executadas no conjunto de dados como uma linha do tempo. O Hudi conta com a linha do tempo para fornecer isolamento de snapshot entre leitores e gravadores e para permitir a reversão para um momento anterior específico. Para obter mais informações sobre as ações registradas pelo Hudi e o estado das ações, consulte [Linha do tempo](https://hudi.apache.org/docs/concepts.html#timeline) na documentação do Apache Hudi.

## Noções básicas sobre os tipos de armazenamento de conjuntos de dados: copiar na gravação ou mesclar na leitura
<a name="emr-hudi-data-files"></a>

Ao criar um conjunto de dados do Hudi, você especifica se o conjunto de dados é do tipo copiar na gravação ou mesclar na leitura.
+ **Copy on Write (CoW – Copiar na gravação)**: os dados são armazenados em um formato colunar (Parquet), e cada atualização cria uma nova versão dos arquivos durante uma gravação. CoW é o tipo de armazenamento padrão. 
+ **Merge on Read (MoR – Mesclar na leitura)**: os dados são armazenados usando uma combinação de formatos colunares (Parquet) e baseados em linha (Avro). As atualizações são registradas em arquivos *delta* baseados em linha e são compactadas conforme necessário para criar novas versões dos arquivos colunares.

Com conjuntos de dados CoW, sempre que há uma atualização para um registro, o arquivo que contém o registro é regravado com os valores atualizados. Com um conjunto de dados MoR, sempre que há uma atualização, o Hudi grava apenas a linha do registro alterado. MoR é mais adequado para cargas de trabalho com maior volume de gravações ou alterações e menor volume de leituras. CoW é mais adequado para cargas de trabalho com maior volume de leituras em dados que mudam com menos frequência.

O Hudi fornece três visualizações lógicas para acessar os dados:
+ **Read-optimized view** — Fornece o conjunto de dados confirmado mais recente das tabelas CoW e o conjunto de dados compactado mais recente das tabelas MoR.
+ **Visão incremental**: fornece um fluxo de alterações entre duas ações de um conjunto de dados CoW para alimentar trabalhos downstream e extrair, transformar e carregar (ETL) fluxos de trabalho.
+ **Real-time view** — Fornece os dados confirmados mais recentes de uma tabela MoR mesclando os arquivos colunares e baseados em linhas em linha.

Quando você consulta a visualização otimizada para leitura, a consulta retorna todos os dados compactados, mas não inclui as últimas confirmações delta. A consulta desses dados apresenta bom desempenho de leitura, mas omite os dados mais recentes. Quando você consulta a visualização em tempo real, o Hudi mescla os dados compactados com as confirmações delta na leitura. Os dados mais recentes estão disponíveis para consulta, mas a sobrecarga computacional da mesclagem prejudica o desempenho da consulta. A capacidade de consultar dados compactados ou dados em tempo real permite a você escolher entre o desempenho e a flexibilidade nas consultas.

Para obter mais informações sobre as vantagens e desvantagens dos tipos de armazenamento, consulte [Tipos e visões de armazenamento](https://hudi.apache.org/docs/concepts.html#storage-types--views) na documentação do Apache Hudi.

O Hudi cria duas tabelas no metastore do Hive para MoR: uma tabela com o nome especificado por você, que é uma visão otimizada para leitura, e uma tabela com o mesmo nome anexado com `_rt`, que é uma visão em tempo real. É possível consultar as duas tabelas.

## Registrar um conjunto de dados do Hudi com seu metastore
<a name="emr-hudi-hive-metastore"></a>

Ao registrar uma tabela do Hudi com o metastore do Hive, você pode consultar tabelas do Hudi usando o Hive, o Spark SQL ou o Presto como faria com qualquer outra tabela. Além disso, você pode integrar o Hudi com o AWS Glue configurando o Hive e o Spark para usar o AWS Glue Data Catalog como metastore. Para tabelas MoR, o Hudi registra o conjunto de dados como duas tabelas no Metastore: uma tabela com o nome especificado por você, que é uma visão otimizada para leitura, e uma tabela com o mesmo nome anexado com `_rt`, que é uma visão em tempo real.

Você registra uma tabela do Hudi com o metastore do Hive ao usar o Spark para criar um conjunto de dados do Hudi ao definir a opção `HIVE_SYNC_ENABLED_OPT_KEY` como `"true"` e fornecendo outras propriedades necessárias. Para obter mais informações, consulte [Trabalhe com um conjunto de dados do Hudi](emr-hudi-work-with-dataset.md). Além disso, é possível usar o utilitário de linha de comando hive\_sync\_tool para registrar um conjunto de dados do Hudi como uma tabela no seu metastore, separadamente. 