Cómo funciona Hudi - Amazon EMR

Cómo funciona Hudi

Al utilizar Hudi con Amazon EMR, puede escribir datos en el conjunto de datos mediante la API de origen de datos de Spark o la utilidad Hudi DeltaStreamer. Hudi organiza un conjunto de datos en una estructura de directorios particionada en una estructura similar a la de basepath, que es similar a una tabla de Hive tradicional. Los detalles de cómo se disponen los datos en archivos en estos directorios dependen del tipo de dataset que se elija. Puede elegir entre copiar al escribir (CoW, Copy on Write) o fusionar al leer (MOR, Merge on Read).

Independientemente del tipo de dataset, cada partición que contiene se identifica de forma única por su partitionpath relativa a basepath. Dentro de cada partición, los registros se distribuyen en varios archivos de datos. Para obtener más información, consulte el artículo sobre administración de archivos en la documentación de Apache Hudi.

Cada acción de Hudi tiene una confirmación correspondiente, que se identifica mediante una marca de tiempo que aumenta de forma monótona y se conoce como Instant. Hudi guarda una serie de todas las acciones hechas en el conjunto de datos en forma de cronología. Hudi se basa en la cronología para aislar instantáneamente a lectores y escritores, y para poder retroceder a un punto anterior en el tiempo. Para obtener más información acerca de las acciones que Hudi registra y el estado de las acciones, consulte Cronologías en la documentación de Apache Hudi.

Descripción de los tipos de almacenamiento de conjuntos de datos: escribir frente a combinar al leer

Cuando se crea un conjunto de datos de Hudi, se especifica si será de tipo copiar al escribir o fusionar al leer.

  • Copiar al escribir (CoW, Copy on Write): los datos se almacenan en un formato de columnas (Parquet) y cada actualización crea una nueva versión de los archivos durante una escritura. CoW es el tipo de almacenamiento predeterminado.

  • Fusionar al leer (MoR, Merge on Read): los datos se almacenan utilizando un formato que combina columnas (Parquet) y filas (Avro). Las actualizaciones se registran en archivos delta basados en filas y se compactan según sea necesario para crear nuevas versiones de los archivos en columnas.

Con los datasets de tipo CoW, cada vez que se produce una actualización de un registro, el archivo que contiene el registro se vuelve a escribir con los valores actualizados. Con un conjunto de datos de tipo MoR, cada vez que hay una actualización, Hudi escribe solo la fila correspondiente al registro modificado. MoR es más adecuado para cargas de trabajo con gran cantidad de escrituras o cambios y menos lecturas. CoW es más adecuado para cargas de trabajo con gran cantidad de lecturas con datos que cambian con menos frecuencia.

Hudi proporciona tres vistas lógicas para acceder a los datos:

  • Vista optimizada de lectura: proporciona el último conjunto de datos confirmado a partir de las tablas CoW y el último conjunto de datos compactado a partir de las tablas MoR.

  • Vista incremental: proporciona una secuencia de cambios entre dos acciones procedentes de un conjunto de datos CoW para alimentar los trabajos posteriores y extraer, transformar y los flujos de trabajo de extracción, transformación y carga (ETL).

  • Vista en tiempo real: proporciona los datos confirmados más recientes de una tabla MoR; para ello, fusiona en línea los archivos en columnas y basados en filas.

Cuando se consulta la vista optimizada para lectura, la consulta devuelve todos los datos compactados, pero no incluye las últimas confirmaciones delta. La consulta de estos datos proporciona un buen rendimiento de lectura, pero omite los datos más recientes. Cuando se consulta la vista en tiempo real, Hudi fusiona los datos compactados con las confirmaciones delta durante la lectura. Los datos más recientes están disponibles para consultarlos, pero fusionarlos genera una sobrecarga computacional que hace que la consulta sea menos eficiente. La capacidad de consultar datos compactados o datos en tiempo real permite elegir entre rendimiento y flexibilidad al realizar consultas.

Para obtener más información acerca de las ventajas e inconvenientes de ambos los tipos de almacenamiento, consulte Tipos y vistas de almacenamiento en la documentación de Apache Hudi.

Hudi crea dos tablas en el metaalmacén de Hive para MoR: una tabla con el nombre que especificó, que es una vista optimizada para lectura, y una tabla con el mismo nombre al que se ha anexado _rt, que es una vista en tiempo real. Puede consultar ambas tablas.

Registro de un conjunto de datos de Hudi con su metaalmacén

Si registra una tabla de Hudi con el metaalmacén de Hive, puede consultar las tablas de Hudi mediante Hive, Spark SQL o Presto como haría con cualquier otra tabla. Además, puede integrar Hudi con AWS Glue si configura Hive y Spark para usar el Catálogo de datos de AWS Glue como metaalmacén. Para las tablas de MoR, Hudi registra el conjunto de datos como dos tablas en el metaalmacén: una tabla con el nombre que especificó, que es una vista optimizada para lectura, y una tabla con el mismo nombre al que se ha anexado _rt, que es una vista en tiempo real.

Para registrar una tabla de Hudi con el metaalmacén de Hive al usar Spark para crear un conjunto de datos de Hudi, configure la opción HIVE_SYNC_ENABLED_OPT_KEY en "true" e indique otras propiedades requeridas. Para obtener más información, consulte Uso de un conjunto de datos de Hudi. Además, puede utilizar la utilidad de línea de comandos hive_sync_tool para registrar un conjunto de datos de Hudi como tabla en el metaalmacén, por separado.