| Développé par | Apache Software Foundation |
|---|---|
| Dernière version | 1.9.2 () |
| Dépôt | github.com/apache/iceberg |
| Type |
Projet de la fondation Apache (d) Format de fichier (en) |
| Licence | Apache License 2.0 |
| Site web | iceberg.apache.org |
Apache Iceberg est un format open source haute performance pour les tables analytiques à haute volumétrie. Iceberg permet d’utiliser des tables interrogeables en SQL dans des environnements Big Data, tout en permettant à des moteurs comme Spark, Trino, Flink, Presto, Hive, Impala, StarRocks, Doris et Pig d’accéder simultanément aux mêmes tables de manière fiable et cohérente. Iceberg est distribué sous licence Apache. Iceberg répond aux problèmes de performance et d’ergonomie des tables Hive dans les data lakes de grande envergure et exigeants. Parmi les fournisseurs prenant actuellement en charge les tables Apache Iceberg, on trouve Buster, CelerData, Cloudera, Crunchy Dat, Dremio, IBM watsonx.data, IOMETE, Oracle, Snowflake, Starburst, Tabular, AWS, Google Cloud, et Databricks.
Iceberg a été créé chez Netflix par Ryan Blue et Dan Weeks. Apache Hive était utilisé par de nombreux services et moteurs de l'infrastructure Netflix. Hive n'a jamais pu garantir l'exactitude des données et ne fournissait pas de transactions atomiques stables. De nombreux employés de Netflix évitaient d'utiliser ces services et de modifier les données afin de prévenir les conséquences imprévues liées au format Hive. Ryan Blue a entrepris de résoudre trois problèmes liés aux tables Hive en créant Iceberg, :
Le développement d'Iceberg a débuté en 2017. Le projet a été rendu open source et donné à la Fondation Apache Software en . En , le projet Iceberg est devenu un projet Apache de premier plan.
Iceberg est utilisé par de nombreuses entreprises, dont Airbnb, Apple, Expedia, Adobe, Lyft et bien d'autres.
| Version | Évolutions |
|---|---|
| 1 | Gestion de tables analytiques basées sur des fichiers immuables (Parquet, Avro, ORC), snapshots, manifests, partitioning et évolution de schéma. |
| 2 | Ajout des suppressions et mises à jour au niveau ligne (row-level deletes) via des fichiers de delete + contraintes plus strictes sur les writers. |
| 3 | Extension des types et capacités : nouveaux types (timestamp ns, variant, geometry, geography), valeurs par défaut pour les colonnes, transformations multi-arguments pour partition et tri. |
| 4 | Version en cours de développement (non stabilisée), visant à introduire de nouvelles fonctionnalités non rétrocompatibles. |
Apache Iceberg fonctionne en extrayant les métadonnées des tables du stockage de données sous-jacent. Il conserve des fichiers de métadonnées pour chaque instantané, les informations de schéma, la structure des partitions et les emplacements des fichiers de données, permettant ainsi des opérations sur les tables efficaces et atomiques.
De manière générale, Iceberg organise les données des tables en instantanés. Chaque instantané représente l'état de la table à un moment précis, permettant à Iceberg de fournir des fonctionnalités transactionnelles conformes à ACID, notamment l'isolation des instantanés, les écritures simultanées et la restauration. Les métadonnées des instantanés sont gérées sous forme d'une structure arborescente de fichiers manifestes et de fichiers de métadonnées stockés dans le système de fichiers.
Iceberg s’appuie par défaut sur le format Parquet pour le stockage physique des données, car son organisation en colonnes est particulièrement adaptée aux charges de travail analytiques. Les données sont stockées de manière compressée et orientée colonnes, ce qui optimise l’espace disque et accélère la lecture en ne parcourant que les colonnes et les blocs réellement nécessaires. Les métadonnées d’Iceberg maintiennent des références vers ces fichiers, permettant aux moteurs de requêtes d’identifier rapidement les données utiles sans scanner inutilement l’ensemble du stockage.
Apache Iceberg utilise une hiérarchie de métadonnées à plusieurs niveaux pour le suivi du contenu des tables. Au sommet de cette hiérarchie, un fichier de métadonnées (souvent metadata.json) stocke les informations relatives à la table, telles que le schéma, les spécifications de partitionnement, la liste des instantanés et les pointeurs vers l'instantané racine courant. Chaque instantané représente une vue cohérente de la table et est associé à une liste de manifestes (un fichier Avro ) qui répertorie tous les fichiers manifestes de cet instantané. Un fichier manifeste est un index qui liste un ensemble de fichiers de données (par exemple, des fichiers Parquet) ainsi que les métadonnées de chaque fichier, notamment le nombre de lignes, les valeurs de partitionnement et les statistiques des colonnes, telles que les valeurs minimales et maximales. Ces manifestes sont de petits fichiers de métadonnées (souvent au format Avro) qui segmentent les métadonnées de la table, permettant ainsi une architecture distribuée. Dans ce cadre, des manifestes entiers peuvent être supprimés lors d'une requête par partition, au lieu de nécessiter un seul fichier volumineux listant tous les fichiers de données. De plus, l'arborescence de métadonnées d'Iceberg conserve l'historique des modifications apportées aux tables, en préservant les anciens instantanés et manifestes (permettant ainsi de remonter le temps) jusqu'à leur expiration. Elle permet également de planifier rapidement les requêtes en lisant uniquement les fichiers manifestes pertinents, au lieu d'analyser l'ensemble des fichiers de données ou des répertoires. Cette approche évite les opérations coûteuses telles que le listage des répertoires et optimise l'accès aux métadonnées, même pour les tables volumineuses.
| Couche | Description |
|---|---|
| Catalog | Service de catalogue permettant de localiser et versionner les tables Iceberg.
Cette couche souvent externalisée, peut être implémentée via REST, Apache Nessie, AWS Glue, Hive Metastore, etc. |
| Metadata layer | Couche contenant les métadonnées décrivant la table :
|
| Data layer | Couche contenant les données physiques :
Fichiers de données (principalement Parquet). Autres formats possibles : Avro ou ORC |