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 |
| 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:
|
| hive.delta-compatible-mode-enabled | Indica se o modo de compatibilidade para tabelas do Delta Lake está ativado. Valores válidos:
|
| hive.hdfs.impersonation.enabled | Controla a ativação da representação de usuário. Valores válidos:
|
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:
Faça login no cluster EMR via SSH. Para mais informações, consulte Log on to a cluster.
-
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> -
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' ); -
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;NotaO EMR Spark SQL sincroniza automaticamente os dados do Hudi com o Data Lake Formation (DLF) ou o Hive Metastore.
-
Consulte os dados no cliente Presto.
-
Abra o cliente Presto executando o comando a seguir:
presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop -
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)
-
-
Atualize os dados na CLI do Spark SQL.
-
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> -
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;
-
-
Após a atualização, consulte os dados novamente no cliente Presto.
-
Abra o cliente Presto executando este comando:
presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop -
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)
-