Iceberg es un formato de tabla abierto para lagos de datos que permite el almacenamiento en HDFS o Alibaba Cloud OSS y su análisis mediante Spark, Flink, Hive y Presto.
Capacidades principales
Apache Iceberg surgió como una solución para migrar almacenes de datos de Hive a la nube y desde entonces se ha convertido en el formato de tabla estándar para servicios de lagos de datos basados en la nube. Visite el sitio web oficial de Apache Iceberg para obtener más detalles.
Iceberg ofrece las siguientes capacidades:
Almacenamiento de bajo costo para lagos de datos en HDFS u Object Storage Service (OSS).
Integración fluida con motores de cómputo de código abierto para la ingesta y el análisis.
Semántica ACID completa.
Cambios de datos a nivel de fila.
Reversiones a versiones históricas.
Filtrado eficiente de datos.
Evolución de esquema.
Evolución del diseño de particiones.
Particionamiento oculto.
A continuación se comparan tres arquitecturas: ClickHouse de código abierto (almacén de datos en tiempo real), Hive de código abierto (almacén de datos sin conexión) e Iceberg de Alibaba Cloud (lago de datos).
|
Criterio de comparación |
Subelemento |
Almacén de datos en tiempo real ClickHouse de código abierto |
Almacén de datos sin conexión Hive de código abierto |
Lago de datos Iceberg de Alibaba Cloud |
|
Arquitectura del sistema |
Arquitectura |
Cómputo y almacenamiento acoplados |
Cómputo y almacenamiento desacoplados |
Cómputo y almacenamiento desacoplados |
|
Compatibilidad con varios motores de cómputo |
No compatible |
Compatible |
Compatible |
|
|
Almacenamiento de datos en object storage |
No compatible |
Parcialmente compatible |
Compatible |
|
|
Almacenamiento de datos en HDFS |
No compatible |
Compatible |
Compatible |
|
|
Apertura del formato de almacenamiento |
Deshabilitado |
Abierto |
Abierto |
|
|
Valor empresarial |
Oportunidad |
Segundos |
Horas/días |
Minutos |
|
Flexibilidad de cómputo |
Baja |
Alta |
Alta |
|
|
Transaccionalidad |
No compatible |
Incompleta |
Compatible |
|
|
Universalidad de la semántica a nivel de tabla |
Deficiente |
Deficiente |
Excelente |
|
|
Cambios de datos a nivel de fila |
No compatible |
Compatible de forma limitada |
Compatible |
|
|
Calidad de los datos |
Muy alta |
Alta |
Alta |
|
|
Costo de mantenimiento |
Rendimiento de consultas |
Alto |
Alto |
Alto |
|
Costo de almacenamiento |
Muy alto |
Medio |
Bajo |
|
|
Autoservicio |
No compatible |
No compatible |
Compatible |
|
|
Elasticidad de recursos |
General |
General |
Excelente |
Comparación con Iceberg de código abierto
La siguiente tabla compara Iceberg de Alibaba Cloud con Iceberg de código abierto en cuanto a funciones básicas, cambios de datos y motores de cómputo.
√ indica que la función es compatible. x indica que la función aún no es compatible.
|
Categoría |
Elemento |
Subelemento |
Iceberg de código abierto |
Edición comercial de Iceberg (Alibaba Cloud) |
|
Funciones básicas |
ACID |
N/D |
√ |
√ |
|
Reversiones a versiones históricas |
N/D |
√ |
√ |
|
|
Integración de origen y destino |
Por lotes |
√ |
√ |
|
|
Streaming |
√ |
√ |
||
|
Filtrado eficiente de datos |
N/D |
√ |
√ |
|
|
Cambios de datos |
Evolución de esquema |
N/D |
√ |
√ |
|
Evolución de particiones |
N/D |
√ |
√ |
|
|
Actualizaciones copy-on-write |
N/D |
√ |
√ |
|
|
Actualizaciones merge-on-read |
Lectura |
√ |
√ |
|
|
Escritura |
√ |
√ |
||
|
Compactación |
x |
x |
||
|
Motores de cómputo |
Apache Spark |
Lectura |
√ |
√ |
|
Escritura |
√ |
√ |
||
|
Apache Hive |
Lectura |
√ |
√ |
|
|
Escritura |
√ |
√ |
||
|
Apache Flink |
Lectura |
√ |
√ |
|
|
Escritura |
√ |
√ |
||
|
PrestoDB o Trino |
Lectura |
√ |
√ |
|
|
Escritura |
√ |
√ |
||
|
Lenguajes de programación |
Java |
N/D |
√ |
√ |
|
Python |
N/D |
√ |
√ |
|
|
Funciones avanzadas |
Integración nativa con Alibaba Cloud OSS |
N/D |
x |
√ |
|
Integración nativa con Alibaba Cloud DLF |
N/D |
x |
√ |
|
|
Aceleración mediante caché de datos local |
N/D |
x |
√ |
|
|
Compactación automática de archivos pequeños |
N/D |
x |
√ |
Esta comparación se elaboró en septiembre de 2021 con base en un análisis de Iceberg de código abierto y la edición comercial de Iceberg disponibles en ese momento. La compatibilidad con las funciones puede cambiar en futuras actualizaciones de versión.
Escenarios
Iceberg es un componente fundamental en las soluciones de lagos de datos y resulta adecuado para los siguientes escenarios.
|
Escenario |
Descripción |
|
Importación y consulta de datos en tiempo real |
Los flujos de datos upstream ingresan al lago de datos Iceberg en tiempo real y están disponibles para consulta de inmediato. Por ejemplo, en un escenario de registros, inicie un trabajo de streaming de Iceberg o Spark para escribir los registros en una tabla de Iceberg. Posteriormente, consulte los datos con Hive, Spark, Iceberg o Presto. La compatibilidad con ACID garantiza el aislamiento entre la ingesta y las consultas, lo que evita lecturas sucias. |
|
Eliminación o actualización de datos |
Los almacenes de datos tradicionales tienen dificultades para ejecutar eliminaciones o actualizaciones a nivel de fila de manera eficiente. Estas operaciones suelen requerir la ejecución de un trabajo sin conexión que lee toda la tabla original, modifica los datos y los vuelve a escribir. Iceberg reduce el alcance de los cambios del nivel de tabla al nivel de archivo, lo que permite actualizaciones parciales eficientes. En un lago de datos Iceberg, puede modificar directamente los datos de una tabla mediante la ejecución de un comando como |
|
Control de calidad de datos |
Utilice la validación de esquemas de Iceberg para descartar o procesar adicionalmente los datos anómalos durante la importación. |
|
Evolución del esquema de datos |
Iceberg admite cambios de esquema mediante instrucciones DDL de Spark SQL sin necesidad de reescribir los datos históricos, lo que agiliza la evolución. La compatibilidad con ACID aísla los cambios de esquema de los trabajos de lectura existentes y garantiza lecturas consistentes durante todo el proceso. |
|
Aprendizaje automático en tiempo real |
En los flujos de trabajo de aprendizaje automático, el procesamiento de datos (limpieza, transformación y extracción de características) consume la mayor parte del tiempo. Iceberg unifica los datos históricos y en tiempo real en un solo flujo confiable, donde cada paso de procesamiento constituye un nodo en la canalización. Esto elimina la necesidad de rutas separadas para lotes y streaming. Además, Iceberg proporciona un SDK nativo de Python para los desarrolladores de algoritmos. |