Hudi es un framework de data lake que permite actualizar y eliminar datos en sistemas de archivos compatibles con Hadoop, así como consumir los datos modificados. Presto de E-MapReduce (EMR) integra los paquetes JAR correspondientes en un plugin independiente de Hudi. Con el conector de Hudi de EMR, usted puede consultar tablas Copy on Write (COW) y Merge on Read (MOR).
Contexto
Para obtener más información sobre Hudi de EMR, consulte Hudi overview.
Requisitos previos
Se requiere un clúster de Hadoop que incluya el servicio Presto o bien un clúster independiente de Presto. Para más detalles, consulte Create a cluster.
Límites
El conector de Hudi solo es compatible con clústeres de Hadoop o Presto de EMR V3.38.0 o versiones posteriores.
En las tablas COW, únicamente se admiten consultas de instantánea.
Para las tablas MOR, están disponibles las consultas de instantánea y las consultas optimizadas para lectura.
No se admiten consultas incrementales.
Configurar el conector de Hudi
Modifique la configuración del conector de Hudi. Para más información, consulte Modify a built-in connector.
Para consultar la configuración predeterminada del conector de Hudi, vaya a la página del servicio Presto en la consola de EMR. En la pestaña
Configure
, busque la sección
Service Configuration
y haga clic en la pestaña
hudi.properties
. A continuación se describen los parámetros. Modifique sus valores según sus necesidades de negocio.
| Parámetro | Descripción |
| hive.recursive-directories | Habilita la lectura de datos desde subdirectorios de las ubicaciones de tablas o particiones. Es similar a la propiedad hive.mapred.supports.subdirectories de Hive. |
| hive.metastore.uri | URI para conectarse a Hive Metastore mediante el protocolo Thrift. El valor predeterminado tiene el formato |
| hive.config.resources | Lista de archivos de configuración de HDFS separados por comas. Estos archivos deben existir en todos los hosts de Presto. Importante Configure este parámetro únicamente cuando se requiera acceso a HDFS. |
| hive.delta-table-enabled | Indica si Presto puede leer tablas de Delta Lake. Los valores válidos son:
|
| hive.delta-compatible-mode-enabled | Determina si se habilita el modo de compatibilidad para las tablas de Delta Lake. Los valores válidos son:
|
| hive.hdfs.impersonation.enabled | Especifica si se habilita la suplantación de usuarios. Los valores válidos son:
|
Ejemplo
Las tablas de Hudi se pueden almacenar como tablas externas de Hive. Mediante el conector de Hive, usted puede consultar los datos de dichas tablas. Para conocer el procedimiento de creación de tablas de Hudi y su sincronización con tablas de Hive, consulte Integrate Hudi with Spark SQL y Write data to Hudi by using Spark.
A continuación se muestra cómo generar y consultar datos:
Inicie sesión en el clúster de EMR mediante SSH. Para más información, consulte Log on to a cluster.
-
Ejecute el siguiente comando para abrir la CLI de Spark SQL:
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'Si la salida contiene la siguiente información, la CLI de Spark SQL se abrió correctamente:
spark-sql> -
Ejecute el siguiente comando para crear una tabla de prueba llamada emr_test:
create table if not exists emr_test( id bigint, name string, price double ) using hudi options ( type = 'mor', primaryKey = 'id,name' ); -
Ejecute los siguientes comandos para insertar datos de prueba:
insert into emr_test select 1, 'a2', 10; insert into emr_test select 1, 'a1', 10; insert into emr_test select 2, 'a1', 20;NotaSpark SQL de EMR sincroniza automáticamente los datos de Hudi con Data Lake Formation (DLF) o con Hive Metastore.
-
Consulte los datos en el cliente de Presto.
-
Ejecute el siguiente comando para abrir el cliente de Presto:
presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop -
Ejecute el siguiente comando para consultar la tabla:
select * from emr_test;Se obtiene la siguiente salida:
_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)
-
-
Actualice los datos en la CLI de Spark SQL.
-
Ejecute el siguiente comando para abrir la CLI de Spark SQL:
spark-sql --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \ --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'Si la salida contiene la siguiente información, la CLI de Spark SQL se abrió correctamente:
spark-sql> -
Ejecute el siguiente comando para actualizar el valor de price en la fila cuyo id es 2:
update emr_test set price = price + 20 where id = 2;
-
-
Una vez completada la actualización, consulte los datos en el cliente de Presto.
-
Ejecute el siguiente comando para abrir el cliente de Presto:
presto --server emr-header-1:9090 --catalog hudi --schema default --user hadoop -
Ejecute el siguiente comando para consultar la tabla:
select * from emr_test;Se obtiene la siguiente salida:
_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)
-