Artículos

¿Qué es el Sistema Delta y Cómo Funciona?

A medida que el volumen y la velocidad de los datos siguen creciendo, el grado de complejidad y procesamiento en la canalización de datos sigue creciendo simultáneamente. Delta Lake está diseñado por Databricks para manejar tanto el procesamiento por lotes como el de flujo, así como las preocupaciones por la complejidad del sistema. Su objetivo es resolver estos problemas al proporcionar soluciones de canalización de datos de alto rendimiento, confiables y simples con capacidades transaccionales similares a ACID.

Según la documentación de Databricks, Delta Lake es una capa de almacenamiento de código abierto que brinda confiabilidad a los lagos de datos. Delta Lake proporciona transacciones ACID, manejo de metadatos escalables y unifica el procesamiento de datos por lotes y de flujo. Delta Lake se ejecuta sobre su lago de datos existente y es totalmente compatible con las API de Apache Spark.          

Principales desafíos al trabajar con Apache Spark:               

  1. Si ocurre una falla en una etapa en la que se eliminan los datos antiguos y aún no se escriben los nuevos, se produce una pérdida de datos. Eso significa que hemos perdido los datos antiguos y no pudimos escribir datos nuevos debido a una falla del trabajo, falla la atomicidad. En caso de fallas y pérdida de datos como se describe en el paso 1, nos quedamos con datos corruptos y, por lo tanto, falla la consistencia.
  2. Si hay dos o más trabajos trabajando en los mismos conjuntos de datos subyacentes y uno de los trabajos sobrescribe los datos, otros trabajos pueden fallar y provocar una falla de aislamiento.
  3. Operación/procesamiento más costoso para DML como upserts y aplicación de esquemas.
  4. Demasiados archivos pequeños no son manejados eficientemente por los sistemas de almacenamiento ni pueden ser eficientes para Spark. Un trabajo de compactación puede ser de ayuda, pero el trabajo de procesamiento puede tener que esperar a que se complete la compactación, ya que las operaciones no son transaccionales. Incluso una operación de lectura no es confiable durante la compactación.
  5. Cuando la cardinalidad de su columna de partición es alta, terminamos creando demasiadas particiones y, en última instancia, una gran cantidad de archivos pequeños. Incluso con las columnas de partición de baja cardinalidad, leeremos todos los archivos de datos en particiones calificadas, ya que no tenemos un tipo de indexación o al menos estadísticas para omitir algunos de los archivos en las particiones elegibles.

Estructuración de Structured Streaming                   

A nivel conceptual, Structured Streaming trata los datos en vivo como una tabla que se va añadiendo continuamente. Lo mejor de Structured Streaming es que permite obtener rápidamente valor de los sistemas de streaming prácticamente sin cambios de código.

Structured Streaming nos permitió resolver casi todos los problemas con las transacciones ACID. Sin embargo, la creación de los pipelines con Structured Streaming solo resuelve parte del problema. Resolvió la falta de garantías ACID para las inserciones, pero los pipelines de datos requieren limpieza de datos, eliminaciones de GDPR y tareas de reprocesamiento de datos que siguen siendo un desafío.          

Al reprocesar archivos en un directorio, es muy fácil eliminar archivos que necesita,

  • Colocarlos en la carpeta incorrecta, por lo que la tabla no puede conciliar
  • Archivos parcialmente escritos o corruptos.
  • Esto llevó a la idea de Delta Lake para garantizar que todos los cambios se realicen de manera atómica. Se cubren más detalles en secciones posteriores.

Por qué Delta Lake                

Algunos de los problemas que enfrentan los ingenieros de datos al desarrollar canales de datos son el rendimiento de las consultas, la confiabilidad de los datos y la complejidad del sistema. Así es como Delta aborda estos desafíos:                                        

Rendimiento de las consultas:                                             

A medida que los datos crecen exponencialmente en tamaño, poder obtener información significativa de los datos se vuelve crucial. Mediante el uso de varias técnicas, Delta hace alarde de un rendimiento de las consultas varias veces más rápido que con Apache Spark en Parquet.

  1. Delta crea y mantiene índices en las tablas.
  2. Delta mantiene estadísticas de archivos en el subconjunto de datos para que solo se lean las partes relevantes de los datos en una consulta.

Delta administra los tamaños de los archivos de Parquet subyacentes para un uso más eficiente.

Delta Lake tiene una verificación de seguridad para evitar que ejecutemos un comando VACUUM peligroso. Sin embargo, si estamos seguros de las operaciones en nuestra tabla delta, podemos desactivar esta verificación de seguridad configurando la propiedad de configuración de Spark park.databricks.delta.retentionDurationCheck.enabled en falso.