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 Trino do E-MapReduce (EMR) integra os pacotes JAR relacionados ao componente independente do Hudi. Use o conector Hudi do EMR para consultar dados em tabelas Copy on Write e Merge on Read.
Informações básicas
Para obter mais informações sobre o Hudi no EMR, consulte Hudi.
Pré-requisitos
Crie um cluster DataLake ou Hadoop e selecione o serviço Presto. Para obter instruções, consulte Criar cluster.
Limites
Somente clusters DataLake (todas as versões) e clusters Hadoop do EMR V3.38.0 ou posterior suportam o conector Hudi.
Em tabelas Copy on Write, o conector Hudi consulta apenas snapshots.
Em tabelas Merge on Read, o conector Hudi consulta snapshots e resultados de otimização de leitura apenas em cenários específicos. Tenha cautela ao usar o conector Hudi para consultas em ambiente de produção.
Não há suporte a consultas incrementais.
Configure o conector Hudi
Modifique as configurações do conector Hudi. Para mais detalhes, consulte Modificar as configurações de um conector integrado.
Usar metadados do Hive
Para visualizar as configurações padrão do conector Hudi, siga estas etapas: no console EMR, acesse a aba Configure da página do serviço Trino. Na aba Configure, clique em hudi.properties. Modifique os parâmetros descritos na tabela a seguir conforme suas necessidades de negócio.
Parâmetro | Descrição |
hive.metastore.uri | Uniform Resource Identifier (URI) usado para acessar o metastore do Hive via protocolo Thrift.
|
hive.config.resources | Arquivos de configuração do Hadoop Distributed File System (HDFS). Separe os nomes dos arquivos de configuração com vírgulas (,). Certifique-se de que os arquivos existam em todos os hosts onde o Trino está em execução. Importante A configuração deste parâmetro é obrigatória para acessar o HDFS.
|
hive.hdfs.impersonation.enabled | Define se a representação de usuário deve ser ativada. Valores válidos:
|
Usar metadados unificados do DLF
Se os metadados da tabela utilizarem DLF Unified Metadata, configure adicionalmente conectores como Hive, Iceberg e Hudi. Nesse cenário, as consultas deixam de depender do cluster de dados. O valor de hive.metastore.uri é ignorado, pois o Trino acessa diretamente os metadados do DLF na mesma conta.
A tabela a seguir descreve os parâmetros usados para configurar um centro de armazenamento de metadados para dados em data lakes.
| Parâmetro | Descrição | Observações |
| hive.metastore | Tipo do metastore do Hive. | Este parâmetro é fixo como DLF. |
| dlf.catalog.region | ID da região onde o Data Lake Formation (DLF) está ativado. | Para mais informações, consulte Regiões e endpoints suportados. Nota Certifique-se de que o valor deste parâmetro corresponda ao endpoint especificado pelo parâmetro dlf.catalog.endpoint. |
| dlf.catalog.endpoint | Endpoint do serviço DLF. | Para mais informações, consulte Regiões e endpoints suportados. Recomendamos definir o parâmetro dlf.catalog.endpoint como um endpoint de VPC do DLF. Por exemplo, se selecionar a região China (Hangzhou), defina o parâmetro dlf.catalog.endpoint como dlf-vpc.cn-hangzhou.aliyuncs.com. Nota Também é possível usar um endpoint público do DLF. Se selecionar a região China (Hangzhou), defina o parâmetro dlf.catalog.endpoint como dlf.cn-hangzhou.aliyuncs.com. |
| dlf.catalog.akMode | Modo AccessKey do serviço DLF. | Recomendamos definir este parâmetro como EMR_AUTO. |
| dlf.catalog.proxyMode | Modo proxy do serviço DLF. | Recomendamos definir este parâmetro como DLF_ONLY. |
| dlf.catalog.uid | ID da sua conta Alibaba Cloud. | Para obter o ID da sua conta Alibaba Cloud, acesse a página Security Settings. ![]() |
Exemplo
As tabelas Hudi funcionam como tabelas externas do Hive. Use o conector Hive para consultar dados nessas tabelas. Para saber mais sobre como criar uma tabela Hudi e sincronizar dados dela para uma tabela Hive, consulte Integrar Hudi com Spark SQL e Uso básico.
Exemplo de criação de tabela e consulta de dados:
Faça login no cluster via SSH. Para mais informações, consulte Fazer login em um cluster.
-
Execute o comando a seguir para iniciar 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 as informações a seguir, a CLI do Spark SQL foi iniciada:
spark-sql> -
Execute o comando a seguir 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' ); -
Execute os comandos a seguir para inserir dados de teste na tabela emr_test:
insert into emr_test select 1, 'a2', 10; insert into emr_test select 1, 'a1', 10; insert into emr_test select 2, 'a1', 20;NotaO Spark SQL do EMR sincroniza automaticamente os dados das tabelas Hudi com o metastore do Hive ou com o DLF.
-
Consulte os dados no cliente Trino.
-
Execute o comando a seguir para abrir a CLI do Trino:
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoop -
Execute o comando a seguir para consultar dados na tabela emr_test:
select * from emr_test;Saída retornada:
_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)
-
-
Atualize os dados na CLI do Spark SQL.
-
Execute o comando a seguir para iniciar 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 as informações a seguir, a CLI do Spark SQL foi iniciada:
spark-sql> -
Execute o comando a seguir para atualizar o valor de price da entrada de dados cujo ID é 2:
update emr_test set price = price + 20 where id = 2;
-
-
Após concluir a atualização, consulte os dados no cliente Trino.
-
Execute o comando a seguir para abrir a CLI do Trino:
trino --server master-1-1:9090 --catalog hudi --schema default --user hadoop -
Execute o comando a seguir para consultar dados na tabela emr_test:
select * from emr_test;Saída retornada:
_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)
-
