Todos os produtos
Search
Central de documentação

E-MapReduce:Conector Hudi

Última atualização: Sep 17, 2026

O Hudi é um framework de data lake que permite atualizar e excluir dados em sistemas de arquivos compatíveis com Hadoop, além de consumir dados alterados. O E-MapReduce (EMR) Presto integra os pacotes JAR relacionados em um plugin Hudi independente. Use o conector Hudi do EMR para consultar tabelas Copy on Write (COW) e Merge on Read (MOR).

Informações básicas

Para obter mais informações sobre o EMR Hudi, consulte Hudi overview.

Pré-requisitos

Crie um cluster Hadoop que inclua o service Presto ou um cluster Presto independente. Para mais detalhes, consulte Create a cluster.

Limites

  • O conector Hudi tem suporte apenas em clusters Hadoop ou Presto do EMR V3.38.0 ou posterior.

  • Tabelas COW aceitam somente consultas de snapshot.

  • Tabelas MOR aceitam apenas consultas de snapshot e consultas otimizadas para leitura.

  • Não há suporte para consultas incrementais.

Configure o conector Hudi

Modifique a configuração do conector Hudi. Para mais informações, consulte Modify a built-in connector.

Para visualizar a configuração padrão do conector Hudi, acesse a página do service Presto no console EMR. Na aba

Configure

, localize a seção

Service Configuration

e clique em na aba

hudi.properties

. A tabela a seguir descreve os parâmetros. Modifique os valores conforme as necessidades do seu negócio.

Parâmetro Descrição
hive.recursive-directories Permite a leitura de dados em subdiretórios dos locais de tabela ou partição. Funciona de forma semelhante à propriedade hive.mapred.supports.subdirectories do Hive.
hive.metastore.uri URI para conexão com o Hive Metastore via protocolo Thrift.

O valor padrão segue o formato thrift://<master-node-name>.cluster-24****:9083.

hive.config.resources Lista de arquivos de configuração do HDFS separados por vírgula. Esses arquivos devem existir em todos os hosts do Presto.
Importante Configure este parâmetro apenas quando o acesso ao HDFS for necessário.
hive.delta-table-enabled Define se o Presto pode ler tabelas do Delta Lake. Valores válidos:
  • true (padrão): o Presto lê tabelas do Delta Lake.
  • false: o Presto não lê tabelas do Delta Lake.
hive.delta-compatible-mode-enabled Indica se o modo de compatibilidade para tabelas do Delta Lake está ativado. Valores válidos:
  • true (padrão): modo de compatibilidade ativado para tabelas do Delta Lake.
  • false: modo de compatibilidade desativado para tabelas do Delta Lake.
hive.hdfs.impersonation.enabled Controla a ativação da representação de usuário. Valores válidos:
  • true: representação de usuário ativada.
  • false (padrão): representação de usuário desativada.

Exemplo

É possível armazenar tabelas Hudi como tabelas externas do Hive. O conector Hive permite consultar dados nessas tabelas. Para saber como criar tabelas Hudi e sincronizá-las com tabelas Hive, consulte Integrate Hudi with Spark SQL e Write data to Hudi by using Spark.

O exemplo a seguir demonstra como gerar e consultar dados:

  1. Faça login no cluster EMR via SSH. Para mais informações, consulte Log on to a cluster.

  2. Execute o comando abaixo para abrir a CLI do Spark SQL:

    spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
    --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

    Se a saída contiver a informação a seguir, a CLI do Spark SQL foi aberta com sucesso:

    spark-sql>
  3. Execute o comando seguinte para criar uma tabela de teste chamada emr_test:

    create table if not exists emr_test(
      id bigint,
      name string,
      price double
    ) using hudi
    options (
      type = 'mor',
      primaryKey = 'id,name'
    );
  4. Insira dados de teste executando os comandos abaixo:

    insert into emr_test select 1, 'a2', 10;
    insert into emr_test select 1, 'a1', 10;
    insert into emr_test select 2, 'a1', 20;
    Nota

    O EMR Spark SQL sincroniza automaticamente os dados do Hudi com o Data Lake Formation (DLF) ou o Hive Metastore.

  5. Consulte os dados no cliente Presto.

    1. Abra o cliente Presto executando o comando a seguir:

      presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop
    2. Consulte a tabela com o comando abaixo:

      select * from emr_test;

      A saída retornada será semelhante a esta:

       _hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path |                            _hoodie_file_name                            | id | name | price
      ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+-------
       20211025145616      | 20211025145616_0_1   | id:1,name:a2       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet |  1 | a2   |  10.0
       20211025145629      | 20211025145629_0_1   | id:1,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet |  1 | a1   |  10.0
       20211025145640      | 20211025145640_0_2   | id:2,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet |  2 | a1   |  20.0
      (3 rows)
  6. Atualize os dados na CLI do Spark SQL.

    1. Inicie a CLI do Spark SQL com o comando abaixo:

      spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
      --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

      A presença da mensagem a seguir confirma que a CLI do Spark SQL está aberta:

      spark-sql>
    2. Atualize o valor de price para a linha onde id é igual a 2 usando o comando a seguir:

      update emr_test set price = price + 20 where id = 2;
  7. Após a atualização, consulte os dados novamente no cliente Presto.

    1. Abra o cliente Presto executando este comando:

      presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop
    2. Consulte a tabela com o comando abaixo:

      select * from emr_test;

      O resultado retornado será:

       _hoodie_commit_time | _hoodie_commit_seqno | _hoodie_record_key | _hoodie_partition_path |                            _hoodie_file_name                            | id | name | price
      ---------------------+----------------------+--------------------+------------------------+-------------------------------------------------------------------------+----+------+-------
       20211025145616      | 20211025145616_0_1   | id:1,name:a2       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-20-1604_20211025145616.parquet |  1 | a2   |  10.0
       20211025145629      | 20211025145629_0_1   | id:1,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-48-3211_20211025145629.parquet |  1 | a1   |  10.0
       20211025145640      | 20211025145640_0_2   | id:2,name:a1       |                        | ac4ec1e6-528d-4189-bde6-d09e137f63f6-0_0-76-4818_20211025145640.parquet |  2 | a1   |  40.0
      (3 rows)