Delta Lake o Hive en AWS – Tomar una decisión informada
Amazon S3 se ha convertido en la capa de almacenamiento de referencia para el análisis de big data en AWS. El reto está en decidir cómo añadir un motor de consultas y una capa de metadatos encima de esos datos para convertirlos en un verdadero almacén de datos.
Dos opciones populares son Delta Lake y Hive ejecutado en AWS EMR.
Ambos enfoques consultan datos almacenados en S3, pero difieren en garantías de transacción, manejo de esquemas, optimizaciones de rendimiento y encaje en el ecosistema.
Delta Lake en AWS S3
Delta Lake es un formato de almacenamiento de código abierto que añade transacciones ACID y evolución de esquemas a los data lakes. En AWS, a menudo se combina con Apache Spark ejecutado en EMR para procesar grandes volúmenes de datos almacenados en S3.
Cómo funciona en AWS:
- Almacenamiento de datos: Los archivos brutos o procesados (Parquet, JSON, CSV) se almacenan en un bucket S3.
Ejemplo:
s3://my-data-lake/sales/2024/10/part-0001.snappy.parquet
- Formato Delta: Delta Lake mantiene un registro de transacciones (
_delta_log
) en la misma ruta de S3 para registrar cambios de esquema, adiciones y eliminaciones de datos. - Ejecución de consultas: Spark en EMR lee tablas Delta directamente desde S3, aplicando validación de esquema, compactación y consultas con “time travel”.
Ventajas:
- Transacciones ACID: Garantizan coherencia en lecturas/escrituras concurrentes.
- Evolución de esquema: Permite agregar o modificar columnas sin reescribir todo el conjunto de datos.
- Time Travel: Consultar versiones históricas de los datos.
- Optimizaciones de rendimiento: Data skipping y compactación reducen los tiempos de lectura.
Hive en AWS EMR con S3 como almacén de datos
Hive es un framework de almacén de datos maduro, diseñado para análisis batch a gran escala. En AWS, Hive puede ejecutarse en EMR, con S3 como capa de almacenamiento subyacente.
Cómo funciona en AWS:
- Almacenamiento de datos: Las tablas se guardan como archivos en S3, normalmente en formato Parquet u ORC.
Ejemplo:
s3://my-hive-warehouse/sales/year=2024/month=10/day=15/part-0001.orc
- Metadatos en Glue Data Catalog: AWS Glue almacena los esquemas de las tablas y la información de particiones que Hive utiliza para planificar las consultas.
- Ejecución de consultas: Hive en EMR ejecuta HQL (Hive Query Language) sobre los datos de S3, en modo batch (MapReduce o Tez) o interactivo a través de Hive LLAP.
Ventajas:
- Familiaridad con SQL: HQL es muy similar a SQL ANSI, facilitando su uso por parte de analistas.
- Integración con AWS: Conexión directa con S3, AWS Glue, Athena y Redshift Spectrum.
- Particionado: Reduce el volumen de datos escaneados mediante partition pruning.
- Eficiencia de costos: EMR se cobra por segundo de tiempo de ejecución, y los datos permanecen en S3.
Ejemplo: Guardar datos en S3 para consultas con Hive
Si tienes un trabajo de Spark que escribe en S3 para que Hive lo consuma:
# Ejemplo con PySpark
df.write \
.mode("overwrite") \
.format("parquet") \
.partitionBy("year", "month", "day") \
.save("s3://my-hive-warehouse/sales")
Registrar la tabla en Hive (a través de AWS Glue):
CREATE EXTERNAL TABLE sales (
order_id STRING,
amount DECIMAL(10,2),
customer_id STRING
)
PARTITIONED BY (year INT, month INT, day INT)
STORED AS PARQUET
LOCATION 's3://my-hive-warehouse/sales';
Elegir entre Delta Lake y Hive en AWS
Característica | Delta Lake en S3 + EMR | Hive en S3 + EMR |
---|---|---|
Transacciones | Soporte ACID | Ninguno (consistencia eventual) |
Evolución de esquema | Sí | Limitada |
Lenguaje de consulta | Spark SQL | HQL (similar a SQL) |
Consultas históricas | Sí (time travel) | No |
Ideal para | Workloads streaming + batch | Analítica orientada a batch |
Integración con AWS | Vía Spark en EMR | Nativa (Glue, Athena, Redshift) |
Recomendaciones
- Elige Delta Lake si necesitas streaming y batch en el mismo pipeline, cambios frecuentes de esquema o garantías ACID sobre S3.
- Elige Hive en EMR si manejas análisis batch a gran escala y buscas integración nativa con AWS Glue, Athena y otros servicios de AWS, manteniendo un coste predecible.
Ambas opciones permiten almacenar datos brutos y procesados en S3 y consultarlos directamente, pero cada una se adapta a patrones operativos y analíticos diferentes.
Table of Contents
- Delta Lake en AWS S3
- Hive en AWS EMR con S3 como almacén de datos
- Ejemplo: Guardar datos en S3 para consultas con Hive
- Elegir entre Delta Lake y Hive en AWS
- Recomendaciones
Trending
Table of Contents
- Delta Lake en AWS S3
- Hive en AWS EMR con S3 como almacén de datos
- Ejemplo: Guardar datos en S3 para consultas con Hive
- Elegir entre Delta Lake y Hive en AWS
- Recomendaciones