Cómo Apache Hudi transformó el lago de datos de Yuno

Descubra cómo Yuno transformó su infraestructura de datos con Apache Hudi, optimizando el rendimiento del lago de datos, reduciendo los costos en un 70% y permitiendo obtener información de datos en tiempo real. Descubra cómo las funciones avanzadas de Hudi, como los viajes en el tiempo, la indexación y la administración automatizada de archivos, mejoraron la eficiencia y la escalabilidad y revolucionaron la estrategia de administración de datos de Yuno.

Como director de datos de Yuno, he sido testigo de primera mano de los desafíos y las oportunidades que conlleva la administración de una infraestructura de datos moderna. Los datos están en el centro de todo lo que hacemos, ya que impulsan la información, las decisiones y las innovaciones en toda la empresa.

Sin embargo, con el aumento del volumen y la complejidad de los datos, nos enfrentamos a importantes obstáculos para mantener la eficiencia, la coherencia y la rentabilidad. Por eso, nuestro objetivo principal era mejorar nuestras capacidades de administración de datos. Necesitábamos una solución que pudiera proporcionar un mejor control sobre nuestras mesas, mejorar el rendimiento y ofrecer un alto grado de organización.

Los criterios de nuestro nuevo sistema eran claros: tenía que cumplir con los requisitos de ACID (atomicidad, consistencia, aislamiento y durabilidad) y ser capaz de gestionar eficazmente las alteraciones y eliminaciones. Tras evaluar varias opciones, Apache Hudi resultó ser la opción ideal.

Apache Hudi es un marco de lago de datos que simplifica la administración de datos en el almacenamiento en la nube al permitir la ingesta, actualización y eliminación eficientes de grandes conjuntos de datos. También ofrece beneficios como la ingesta incremental y una excelente compatibilidad con las fuentes de datos en tiempo real.

Alta personalización en diferentes casos de uso

Antes de profundizar en estrategias específicas, es importante entender la flexibilidad que ofrece Apache Hudi en diferentes casos de uso. Ya sea que su prioridad sea optimizar el rendimiento de lectura o escritura, Hudi ofrece opciones que se adaptan a sus necesidades específicas.

1. COW y MOR

Apache Hudi ofrece una amplia gama de opciones, pero la elección más fundamental es seleccionar el tipo de mesa que mejor se adapte a tus necesidades. Esta decisión depende de si quieres priorizar el rendimiento en lectura o escritura.

Si necesita un rendimiento de escritura más rápido y puede tolerar lecturas más lentas, la estrategia MOR (Merge on Read) es la mejor opción.

Si desea optimizar las lecturas para obtener lecturas más rápidas a expensas de escrituras más lentas, debe optar por la estrategia COW (Copy on Write).

2. Las particiones no son suficientes, ¿qué pasa con INDEX?

Si bien la elección entre COW y MOR es fundamental, es solo una pieza del rompecabezas. A medida que crecen los conjuntos de datos, la partición por sí sola no es suficiente para garantizar el rendimiento. Aquí es donde la indexación se convierte en un factor crucial para mejorar la eficiencia de las consultas y reducir la latencia.

Cuando se trata de conjuntos de datos masivos, a menudo surgen desafíos comunes con operaciones como las actualizaciones, las modificaciones o la lectura de filas específicas. Particionar la tabla es esencial, pero es solo el punto de partida. A medida que tus datos crecen, incluso las tablas particionadas pueden aumentar de tamaño, por lo que tendrás que identificar de manera eficiente qué partición contiene la fila específica que estás buscando.

Para reducir la latencia, minimizar la cantidad de datos leídos y mejorar el rendimiento de las consultas, necesitarás algo más que particiones: tendrás que considerar la posibilidad de indexar. Aquí es donde destaca Apache Hudi, que ofrece un sólido soporte para la indexación multimodal.

Entre las diversas estrategias de indexación que ofrece Hudi, Índice de nivel récord (RLI) destaca. RLI aprovecha HBase, un almacén de valores clave dentro de la carpeta de metadatos, que ofrece un rendimiento de búsqueda excepcional en comparación con otros índices globales.

Sin embargo, no todos los casos de uso requieren un índice global. Para estas situaciones, Hudi ofrece alternativas eficientes, como la conocida Índice de floración, diseñado para necesidades específicas sin la sobrecarga de un índice global.


3. Mantenimiento de mesas

Más allá de la indexación, mantener las tablas de forma eficaz es esencial para la optimización del rendimiento a largo plazo. Esto incluye garantizar una administración eficiente de los archivos, como el tamaño, la agrupación en clústeres, la limpieza y la compactación de los archivos. Analicemos más detenidamente cómo estas funciones contribuyen a mantener un procesamiento de datos fluido y eficiente.

El servicio de agrupamiento es tan crucial como la indexación en lo que respecta al rendimiento. Los motores de consulta funcionan de manera más eficiente cuando los datos que se consultan con frecuencia se ordenan físicamente. Apache Hudi admite de forma nativa la agrupación en clústeres con una variedad de estrategias para satisfacer diferentes necesidades.

El servicio de dimensionamiento de archivos aborda problemas comunes, como los tamaños pequeños de los archivos, que pueden reducir considerablemente el rendimiento de lectura en los lagos de datos. Cuando las tablas se fragmentan en muchos archivos pequeños, las consultas requieren más solicitudes, lo que aumenta el tiempo de procesamiento. También mejora el tamaño adecuado de los archivos compresión, ya que los archivos de tamaño insuficiente pueden provocar una compresión ineficiente y, en consecuencia, mayores requisitos de almacenamiento.

El servicio de limpieza es importante para recuperar el espacio ocupado por versiones de datos desactualizadas. Al eliminar las versiones antiguas, puede liberar espacio de almacenamiento y mantener una estructura de tablas más eficiente.

Todas estas funciones son totalmente compatibles con Apache Hudi. Puedes ejecutar estos procesos en línea (como parte de tu proceso) o de forma asincrónica como trabajos independientes, según tus requisitos específicos.

4. Viaje en el tiempo para la depuración y la auditoría de datos

Además de las optimizaciones del rendimiento, la función de viaje en el tiempo de Hudi añade otro nivel de valor al mejorar la integridad de los datos y permitir una depuración y auditoría eficientes. Esta capacidad desempeña un papel fundamental en el mantenimiento de la calidad de los datos a lo largo del tiempo.

Una de las características más destacadas de Apache Hudi es su viaje en el tiempo capacidad, que permite volver a las versiones anteriores de las tablas. Esta función ha supuesto un punto de inflexión en nuestros procesos de depuración y auditoría de datos, ya que ha mejorado considerablemente la eficiencia de nuestras operaciones de control de calidad. La capacidad de acceder a los estados históricos de los datos y revisarlos nos ha permitido identificar y resolver rápidamente los problemas y, en última instancia, mejorar la integridad general de nuestros datos.

5. Ejemplo de COW en la vida real

Para comprender mejor cómo funciona una tabla COW (Copy on Write) con la agrupación y la limpieza en línea, eche un vistazo al siguiente ejemplo. Este ejemplo también puede servir como referencia práctica a la hora de implementar configuraciones similares en su propio entorno.

Superar los desafíos de implementación

Como ocurre con cualquier tecnología avanzada, la implementación de Apache Hudi conlleva sus propios desafíos. En nuestro caso, la complejidad de Spark y la abundancia de nuevas opciones de Hudi plantearon algunas dificultades. Para solucionarlos, desarrollamos plantillas para la mayoría de nuestros casos de uso e incorporamos la DBT (herramienta de creación de datos) a nuestro flujo de trabajo.

Esta abstracción nos permitió aprovechar al máximo Spark SQL y sus funciones integradas de alto rendimiento sin sentirnos abrumados por las complejidades de Spark. Al crear plantillas reutilizables, redujimos considerablemente el tiempo de desarrollo y mantuvimos la coherencia en todos nuestros procesos de procesamiento de datos.

Además, estructuramos nuestro lago de datos siguiendo la arquitectura medallón, que normalmente incluye:

The image illustrates Yuno's data lake medallion architecture at the 'Landing' stage.
La imagen ilustra la arquitectura del medallón del lago de datos de Yuno en la etapa de «Landing».

Landing

Almacenamos los datos sin procesar sin ninguna transformación y con la extensión original, si corresponde.

The image illustrates Yuno's data lake medallion architecture at the 'Raw' stage.
La imagen ilustra la arquitectura del medallón del lago de datos de Yuno en la etapa «Raw».

Raw

Convertimos los datos a formato Parquet para su consumo, pero no realizamos ningún otro tipo de transformación de datos.

The image illustrates Yuno's data lake medallion architecture at the 'Master' stage.
La imagen ilustra la arquitectura del medallón del lago de datos de Yuno en la etapa «Master».

Master

Tenemos nuestras tablas Hudi y la fuente podría ser una tabla sin procesar o una tabla Hudi maestra para crear un nuevo modelo.

Esta estructura, junto con la DBT, garantiza un procesamiento de datos eficiente y respalda nuestras crecientes cargas de trabajo.

Cómo administramos nuestros recursos

Administrar los recursos de manera eficiente es clave para garantizar la escalabilidad a medida que crecen sus operaciones de datos. Para facilitar esto, creamos perfiles personalizados en nuestro repositorio DBT para asignar los recursos en función del tamaño y la complejidad de la carga de trabajo.

Para administrar nuestros recursos de manera eficaz, creamos diferentes perfiles (XS, S, M, L y XL) en el archivo profiles.yml de nuestro repositorio DBT. Estos perfiles nos permiten asignar los recursos de forma adecuada en función del tamaño y la complejidad de la carga de trabajo, lo que garantiza un rendimiento eficiente y escalable en varios casos de uso.

Integración con AWS Glue y creación de plantillas para abstraer la complejidad de Spark y Hudi

Tras abordar los desafíos iniciales, buscamos más simplificaciones. La integración del conector dbt-glue nos permitió reducir las complejidades de Spark y Hudi, lo que nos dio más control y eficiencia en nuestras operaciones.

El pegamento DBT El conector eliminó la necesidad de administrar un clúster de Spark, lo que nos permitió ejecutar todo sin problemas en AWS Glue. Para optimizar aún más nuestras operaciones, adaptamos nuestro repositorio DBT con una bifurcación del conector dbt-glue para cumplir mejor con nuestros requisitos de Hudi. Al crear plantillas predefinidas, simplificamos el proceso de implementación y adaptamos nuestra configuración para que funcionara con la versión 0.14.1 de Hudi.

A lo largo de este proceso, identificamos opciones clave como Índice de nivel récord (RLI), Sincronización de Glue Data Catalog, y tamaños de archivo mínimo y máximo que se utilizan habitualmente en nuestros flujos de trabajo. Estas opciones se pueden incrustar en su código para personalizar sus propias plantillas y optimizar sus operaciones.

Mediante el uso del Conector AWS Glue, hemos reducido considerablemente la complejidad de la gestión de Spark y Hudi y, al mismo tiempo, hemos mantenido un alto rendimiento y flexibilidad.

Orquestación y resultados de la implementación de Hudi

Para garantizar flujos de trabajo fluidos y automatizados, utilizamos Airflow para la organización, lo que simplificó la programación y la supervisión de los trabajos. Esto, combinado con nuestra configuración de AWS Glue, nos ayudó a lograr importantes mejoras de rendimiento y reducciones de costos.

Para administrar nuestros flujos de trabajo de datos de manera eficiente, utilizamos Flujo de aire para la orquestación, lo que garantiza un funcionamiento fluido sin complicaciones innecesarias. Al aprovechar Airflow, pudimos programar, monitorear y administrar nuestros trabajos de ETL con facilidad y eficacia.

Emparejado con Pegamento AWS, obtuvimos acceso a un entorno escalable y sin servidores que eliminó la necesidad de administrar la infraestructura de forma manual, lo que nos permitió concentrarnos en nuestras tareas de procesamiento de datos. Esta combinación de herramientas ayudó a simplificar nuestras operaciones y optimizar el rendimiento.

Los resultados de la implementación de Apache Hudi fueron impresionantes. Gracias a la incorporación de las funciones avanzadas de Hudi, logramos una Reducción de costos del 70% en nuestros procesos que requieren más recursos. Las capacidades de Hudi, como los viajes en el tiempo, la indexación y la administración de archivos, mejoraron drásticamente nuestra eficiencia en la administración de datos. Esto no solo nos ayudó a reducir los costos, sino que también mejoró el rendimiento general de nuestra canalización de datos, haciéndola más escalable y rentable.

Planes futuros: migración de cargas de trabajo al lago de datos

Con estas optimizaciones implementadas, ahora nos centramos en el futuro. Planeamos migrar las cargas de trabajo de alto rendimiento al lago de datos, una medida diseñada para reducir aún más los costos y mejorar la escalabilidad.

De cara al futuro, planeamos migrar las cargas de trabajo de alto rendimiento de nuestro almacén de Snowflake al lago de datos. Esta medida estratégica tiene como objetivo reducir aún más los costos y permitir que Snowflake lea directamente desde el lago de datos ciertos modelos, optimizando así nuestros recursos y mejorando la eficiencia. Al trasladar estas cargas de trabajo, esperamos aprovechar la escalabilidad de nuestro lago de datos y, al mismo tiempo, mantener las capacidades analíticas de Snowflake.

Nuestra visión final es evolucionar hasta convertirnos en un lago de datos, integrando todas las operaciones de datos en toda la empresa. Esta plataforma unificada impulsará el conocimiento y la innovación, fomentando una cultura basada en los datos en toda la organización. Un almacén de datos combina las mejores características de los lagos de datos y los almacenes de datos, y proporciona una plataforma única para las cargas de trabajo analíticas y operativas. Esta integración nos permitirá gestionar nuestros datos de forma más eficaz y obtener información útil en tiempo real.

La mejor parte es que ya estamos trabajando en nuestro siguiente paso y tenemos datos en tiempo real en nuestro lago de datos con HoodieStreamer, otra gran herramienta de Hudi. Este avance nos permitirá aprovechar la información de los datos en tiempo real, lo que impulsará nuestras operaciones a nuevas alturas. El procesamiento de datos en tiempo real nos permite reaccionar a los cambios de forma instantánea, lo que mejora nuestros procesos de toma de decisiones y la eficiencia operativa.

A medida que continuamos innovando y optimizando nuestra infraestructura de datos, mantenemos nuestro compromiso de aprovechar las tecnologías de vanguardia para impulsar la eficiencia y fomentar el crecimiento. Si tiene alguna pregunta o desea obtener más información sobre nuestra experiencia, no dude en ponerse en contacto con nosotros.