Recherche de site Web

Maîtriser Apache Iceberg pour la gestion évolutive des lacs de données


Introduction

Alors que les volumes de données continuent de croître de manière exponentielle, les organisations se dirigent vers des architectures de lac de données plus ouvertes, flexibles et évolutives. Mais qu'est-ce qu'une architecture de lac de données exactement ?

Une architecture de data lake est un système de stockage de vastes quantités de données brutes dans leur format natif—structuré, semi-structuré ou non structuré—jusqu'à ce qu'elles soient nécessaires pour l'analytique. Contrairement aux bases de données traditionnelles, les data lakes peuvent gérer tout, des flux en temps réel aux fichiers batch, ce qui les rend idéaux pour les big data et les workflows d'apprentissage automatique. Cependant, les solutions de data lake traditionnelles présentent souvent leur propre ensemble de défis—comme des performances lentes, une gestion difficile des changements de schéma et un couplage étroit avec des moteurs de traitement spécifiques. C'est là qu'Apache Iceberg entre en jeu.

Apache Iceberg est un format de table moderne et open-source conçu pour surmonter de nombreux problèmes courants associés aux lacs de données traditionnels. Avec sa gestion robuste des métadonnées, son support intégré pour l'évolution des schémas et sa compatibilité avec plusieurs moteurs de traitement comme Apache Spark et Flink, Iceberg transforme la façon dont les équipes gèrent et analysent les données massives. Dans ce guide, nous examinerons de plus près ce qu'est Apache Iceberg, explorerons ses caractéristiques clés et son architecture, et partagerons quelques conseils pratiques pour l'implémenter dans votre environnement. Nous répondrons également aux questions courantes sur la gestion de l'évolution des schémas et l'intégration d'Iceberg avec des moteurs comme Apache Spark, afin que vous puissiez démarrer sans difficulté.

Conditions préalables

  • Familiarité avec Apache Spark et Hive ou des plateformes de calcul distribué similaires.
  • Comprendre l'architecture des lacs de données. Cela inclut la connaissance des formats de fichiers (tels que Parquet et ORC), des systèmes de stockage (par exemple, HDFS et S3) et des stratégies de partitionnement.
  • Capacité à écrire des requêtes SQL et à créer des tables tout en effectuant des opérations telles que INSERT, UPDATE et ALTER.
  • Assurez-vous qu'Apache Spark 3.x est installé et opérationnel avec le package d'exécution Iceberg approprié à votre version de Spark.
  • Configurez Hive Metastore, le système AWS Glue ou un catalogue compatible pour gérer les métadonnées des tables Iceberg.

Qu'est-ce qu'Apache Iceberg ?

Apache Iceberg est un format de table open-source créé pour gérer de grands ensembles de données analytiques. La Fondation Apache a développé ce format pour relever les défis du stockage des données et de l'interrogation de volumes massifs de données dans des lacs de données. L'équipe derrière Iceberg visait à créer une méthode plus fiable, cohérente et efficace pour gérer les métadonnées des tables, suivre l'emplacement des fichiers et gérer les modifications de schéma. Cela est particulièrement important alors que de plus en plus d'organisations utilisent des lacs de données dans le cloud pour gérer d'énormes ensembles de données.

Caractéristiques clés d'Apache Iceberg

Les caractéristiques fondamentales d'Apache Iceberg soulignent pourquoi il est le standard préféré pour la gestion des grosses données.

Évolution du Schéma Iceberg prend en charge l'évolution du schéma des tables en permettant d'ajouter, de supprimer, de renommer ou de réorganiser des colonnes sans altérer les fichiers de données existants. Cela est réalisé en attribuant un identifiant unique à chaque colonne et en suivant les modifications du schéma dans les métadonnées.

Fractionnement et Évolution des Partitions Les tables Iceberg prennent en charge le partitionnement à travers une ou plusieurs clés (comme la date, la catégorie, etc.) pour améliorer les performances des requêtes. Iceberg offre un support exclusif pour le partitionnement caché et l'évolution des partitions. Le partitionnement caché permet aux tables de suivre les valeurs de partition en interne. Cela permet aux moteurs de requêtes d'effectuer un émondage automatique des partitions sans intervention de l'utilisateur pour ajouter des filtres de partition.

Iceberg indépendant du format fonctionne avec divers formats de fichiers malgré son association courante avec Parquet pour soutenir différentes stratégies d'ingestion de données.

Transactions ACID Iceberg garantit la sécurité transactionnelle lors des opérations de lac de données, ce qui fournit des propriétés ACID que l'on trouve généralement dans les entrepôts de données et les systèmes transactionnels avancés.

Voyage dans le temps et versionnage des données Chaque instantané de l'iceberg est conservé jusqu'à ce que vous choisissiez activement de l'expirer. Les requêtes de voyage dans le temps permettent d'accéder aux données des tables depuis n'importe quel instantané ou horodatage antérieur. Par exemple, vous pourriez exécuter la commande,

*SELECT * FROM my_table*
*FOR TIMESTAMP AS OF '2025-01-01 00:00:00*'

pour voir vos données depuis le début de 2025.

Optimisations de performance
Iceberg est conçu pour la performance des grandes données. L'arbre des métadonnées qui contient des manifestes permet à Iceberg d'éviter des analyses complètes de la table en éliminant les fichiers et partitions inutiles pour une requête spécifique.

Architecture d'Apache Iceberg : Comment ça fonctionne ?

À un niveau élevé, l'architecture d'Apache Iceberg se compose de plusieurs composants clés :

Couche de métadonnées : cette couche est composée de plusieurs fichiers qui conservent des informations complètes sur la structure et l'état de la table :

  • Fichier de métadonnées (metadata.json) : Cela suit le schéma actuel, les spécifications de partition, les instantanés et les références à la liste des manifestes pour l'instantané le plus récent.
  • Liste de manifestes : Cela pointe vers les fichiers de manifestes pertinents, offrant un aperçu fiable de la table à tout moment.
  • Fichiers Manifeste: Listes de fichiers de données avec des informations statistiques telles que le nombre d'enregistrements, les valeurs min/max des colonnes et des métadonnées pour chaque fichier.

Couche de données : Cette couche comprend les fichiers de données réels. Elle stocke les données en utilisant des formats en colonnes tels que Parquet, ORC et Avro.

Lorsqu'une requête est exécutée sur une table Iceberg, le système suit ces étapes :

  • Récupération de métadonnées : Le moteur de requête récupère le fichier metadata.json actuel du catalogue.
  • Identification de l'instantané : Cela examine le dernier instantané ou un instantané spécifique si nous utilisons les fonctionnalités de voyage dans le temps.
  • Élagage de manifeste : Le moteur de requête parcourt la liste des manières pour éliminer les fichiers de manifeste non pertinents à l'aide de prédicats de requête.
  • Accès aux données : Le système lit les fichiers de données nécessaires spécifiés par les fichiers manifestes correspondants et applique des filtres pour extraire les données requises.

Comparaison : Apache Iceberg vs. Hudi vs. Delta Lake

L'iceberg est souvent comparé à d'autres formats de table ouverts tels qu'Apache Hudi et Delta Lake. Tous trois visent à apporter des transactions ACID et de la fiabilité aux lacs de données, mais diffèrent dans leur approche et leurs fonctionnalités :

CaractéristiqueApache IcebergApache HudiDelta Lac
Principe de baseSuivi des métadonnées via des instantanés et des manifestesMVCC, Indexation, ChronologieJournal de transaction (actions JSON)
ArchitectureCouches de métadonnées immuablesÉcriture optimisée (Copie à l'écriture/Fusion à la lecture)Journal des commits ordonnés
Évolution du schémaForte, pas de réécriture nécessaire (ajouter, supprimer, renommer, etc.)Pris en charge, peut nécessiter une compatibilité de typeSoutenu, similaire à Iceberg
Partition Évol.Oui, de manière transparentePlus complexe, peut nécessiter des complémentsNécessite une réécriture de table (en tant qu'open source actuel)
Partition cachéeOuiNon (nécessite des colonnes de partition explicites)Colonnes générées (similaires)
Voyage dans le tempsOui (basé sur un instantané)Oui (basé sur l'instant)Oui (basé sur la version)
Mettre à jour/SupprimerCopie à l'écriture (par défaut), Fusion à la lecture (prévue)Copie à l'écriture et fusion à la lecture (mature)Copie sur écriture (via FUSION)
IndexationRepose sur des statistiques et un partitionnementFiltres de Bloom, index de hachageS'appuie sur des statistiques, du partitionnement, du Z-Ordering (Databricks)
Moteur(s) principal(aux)Spark, Flink, Trino, Hive, DremioSpark, Flink, HiveSpark (principal), des connecteurs Trino/Presto/Hive existent
OuvertureLicence Apache, spécification entièrement ouverteLicence Apache, spécification entièrement ouverteFondation Linux ; cœur ouvert, certaines fonctionnalités centrées sur Databricks

Résumé des principales différences :

  • Iceberg : Il met l'accent sur l'indépendance par rapport aux métadonnées, permet une évolution robuste des schémas et des partitions, et offre une taille impressionnante via des statistiques. Il est adaptable à différents moteurs.
  • Hudi : Offre un support mûr pour Merge-on-Read, ce qui le rend idéal pour des mises à jour rapides et des upserts. Il prend également en charge des capacités d'indexation intégrées. Cependant, il peut être un peu complexe à configurer.
  • Delta Lake : Il offre une forte intégration avec Spark (surtout lorsqu'il est utilisé avec Databricks) et fonctionne sur un système de journal de transactions simple. La version open source ne prend pas en charge certaines fonctionnalités avancées du runtime Databricks, telles que l'évolution des partitions et le Z-Ordering avancé.

Le choix entre Iceberg, Hudi ou Delta Lake devrait se baser sur des cas d'utilisation particuliers, votre environnement technologique actuel et les fonctionnalités prioritaires (par exemple, la fréquence des mises à jour par rapport à la flexibilité du schéma).

Mise en œuvre d'Apache Iceberg

Nous allons montrer comment utiliser Apache Iceberg avec Spark (via Spark SQL) pour créer et gérer des tables Iceberg. Apache Iceberg permet une intégration transparente avec Spark grâce à son API DataSource V2. Cela permet aux utilisateurs d'exécuter des commandes SQL Spark standard pour gérer les tables Iceberg après une configuration appropriée.

Prérequis pour Apache Iceberg

  • Assurez-vous d'avoir Spark 3.x : Votre première étape devrait être de vérifier que Spark 3.x est installé sur votre ordinateur.
  • Package d'exécution Iceberg Spark : Obtenez le fichier JAR du connecteur Iceberg qui correspond à vos numéros de version Spark et Iceberg.
  • Inclure le JAR dans Spark: Incluez le JAR du connecteur Iceberg dans votre classpath lorsque vous démarrez Spark (via spark-shell ou spark-sql). Pour inclure d'autres paquets ou dépendances, vous pouvez utiliser l'option --packages.

Utilisez cette commande pour démarrer Spark-SQL avec la version 1.2.1 d'Iceberg et Spark 3.3.

spark-sql --packages 
org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.2.1

--packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.2.1: Cette option indique les coordonnées Maven du package runtime Iceberg compatible avec Spark 3.3 et Scala 2.12, version 1.2.1. Vous pouvez trouver ce package dans le dépôt central Maven.

Étape 1 : Configurer le catalogue Spark pour Iceberg

Pour configurer Spark afin d'utiliser le catalogue d'Iceberg, vous pouvez le configurer dans spark-defaults.conf ou via des options de ligne de commande --conf. Voici un exemple :

spark-sql \
 --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.2.1 \
 --conf spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalog \
 --conf spark.sql.catalog.local.type=hadoop \
 --conf spark.sql.catalog.local.warehouse=/tmp/iceberg_warehouse \
 --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
  • spark.sql.catalog.local : Cela établit un catalogue Spark nommé local qui utilise le SparkCatalog d'Iceberg.
  • spark.sql.catalog.local.type=hadoop: Ce paramètre indique à Iceberg de gérer les métadonnées dans un système de fichiers compatible avec Hadoop.
  • spark.sql.catalog.local.warehouse : Spécifie le répertoire de l'entrepôt (par exemple, /tmp/iceberg_warehouse).
  • spark.sql.extensions : Cela active certaines extensions SQL spécifiques à Iceberg (par exemple, MERGE, DELETE).

Les tables créées sous le catalogue local seront enregistrées dans le répertoire défini comme votre chemin d'entrepôt. Remarque : Vous devez d'abord configurer le catalogue ; sinon, Spark pourrait simplement créer une table Hive par défaut.

Étape 2 : Créez une table Iceberg et insérez des données

Procédons à la création d'un exemple de table Iceberg et à l'insertion de quelques enregistrements :

CREATE TABLE local.learning.employee (
    id INT,
    name STRING,
    age INT
)
USING iceberg;
-- Insert records into the table
INSERT INTO local.learning.employee VALUES
    (1, 'Adrien', 29),
    (2, 'Patrick', 35),
    (3, 'Paul', 41);

Grâce aux commandes ci-dessus, nous avons créé une table employé dans l'espace de noms apprentissage de notre catalogue local. La clause USING iceberg indique à Spark d'utiliser la source de données Iceberg, ce qui est essentiel pour gérer correctement la table. Toutes les données et métadonnées de cette table seront stockées dans le répertoire d'entrepôt spécifié en tant que répertoire Iceberg.

Étape 3 : Effectuer des mises à jour et l'évolution du schéma

Supposons que nous souhaitions mettre à jour l'un de nos dossiers d'employés (en changeant le nom de Patrick) et également ajouter une nouvelle colonne pour suivre les adresses électroniques. Nous pouvons y parvenir en utilisant des instructions SQL UPDATE et ALTER TABLE dans Iceberg :

-- Update Patrick's name to Flobert
UPDATE local.learning.employee
SET name = 'Flobert'
WHERE id = 2;
-- Alter the table to add a new email column
ALTER TABLE local.learning.employee
ADD COLUMNS (email STRING);
-- Insert a new record that includes the new email field
INSERT INTO local.learning.employee VALUES
    (4, 'David', 30, 'david@company.com')

En arrière-plan :

  • MISE À JOUR opération : Cela génère un nouveau fichier de données pour la partition avec le nom mis à jour de Patrick. Il a également marqué la section de l'ancien fichier comme supprimée dans les métadonnées.
  • Opération de modification de table : L'ALTER TABLE ADD COLUMNS a mis à jour le schéma de la table dans les métadonnées et a attribué un nouvel identifiant à la colonne d'e-mail sans modifier les fichiers existants.
  • Opération d'insertion : cette opération insère le dossier de David, qui comprend le nouveau champ email.

Cette approche nous permet de gérer les changements de schéma de manière efficace et minimise le besoin de réécritures coûteuses de tables.

Gestion des métadonnées à grande échelle dans Apache Iceberg

Iceberg démontre une performance exceptionnelle grâce à sa gestion efficace des métadonnées :

  • Fichiers de manifeste : Au lieu d'un fichier massif contenant toutes les données, Iceberg divise les métadonnées en fichiers de manifeste plus petits, chacun décrivant des sous-ensembles de données.
  • Opérations parallèles : Ce design permet aux requêtes de passer complètement les fichiers de métadonnées et de lire uniquement les partitions ou sous-ensembles pertinents.
  • Élagage de partition : Iceberg suit des statistiques min/max au niveau des fichiers, ce qui lui permet d'élaguer les partitions ou les fichiers de données qui ne correspondent pas aux conditions de requête.

Cette stratégie devient essentielle lorsque l'on travaille dans des environnements contenant des millions de fichiers de données. Elle élimine le besoin de scanner de grands fichiers de métadonnées et évite des processus de réécriture complexes chaque fois que de nouvelles données arrivent.

Apache Iceberg dans des environnements multi-cloud

Les organisations aujourd'hui fonctionnent sur plusieurs plateformes cloud en utilisant des services d'AWS, d'Azure et de Google Cloud. Apache Iceberg fonctionne indépendamment des systèmes de stockage d'objets. Cela vous permettra de :

  • Stockez des données sur des services de stockage d'objets (tels que S3, GCS et ADLS) fournis par les principales plates-formes cloud.
  • Gérez les métadonnées des tables via des systèmes de métadonnées centralisés Hive, des catalogues AWS Glue ou d'autres catalogues.
  • Exécutez Spark ou Presto sur n'importe quelle plateforme cloud de votre choix pour accéder aux mêmes tables Iceberg pour des opérations de lecture et d'écriture.

Cette flexibilité vous aide à éviter d'être enfermé chez un seul fournisseur tout en profitant des forces de chaque cloud : de meilleures réductions sur le calcul, des services d'IA avancés ou des fonctionnalités de conformité en fonction de votre région.

Gestion des problèmes d'évolution du schéma

La nature robuste de l'évolution des schémas complexes présente certains défis. Le tableau suivant présente les principales considérations pour l'évolution des schémas Apache Iceberg.

AspectDescriptionRecommandation
Compatibilité Lecteur/ÉcrivainLes tables doivent être lisibles par des moteurs qui prennent en charge les fonctionnalités du schéma utilisé. Les anciennes versions de Spark peuvent ne pas prendre en charge les nouvelles fonctionnalités de spécification d'Iceberg.Testez toujours les mises à jour avant d'appliquer les modifications de schéma.
Changements de type complexesLes promotions simples sont sûres, mais les changements complexes (par exemple, la modification des champs struct ou des clés/valeurs map) nécessitent des tests rigoureux.Suivez strictement les directives d'évolution de schéma d'Iceberg.
Consommateurs en avalLes applications et les requêtes SQL qui consomment des tables Iceberg doivent gérer les changements de schéma. Renommer des colonnes peut casser les requêtes en aval.Assurez-vous que les systèmes en aval sont mis à jour et testés après les modifications de schéma.
Implications de performanceL'évolution du schéma ne réécrit pas les données mais peut accroître les métadonnées avec des modifications fréquentes ou complexes. Dans certains cas, les performances peuvent en être affectées.Effectuez un entretien régulier ou une compression optionnelle pour l'optimisation si nécessaire.

Les équipes devraient mettre en œuvre des mises à jour de manière progressive, réaliser des tests complets sur tous les moteurs consommateurs, et utiliser l'historique des métadonnées d'Iceberg pour suivre les changements.

Dépannage de l'intégration d'Apache Iceberg avec Spark ou Hive

Cette section présente les problèmes typiques rencontrés lors de l'intégration d'Apache Iceberg avec Spark ou Hive. Vous pouvez les examiner chacun d'eux et consulter la documentation officielle si nécessaire :

ProblèmeDescriptionRecommandation
Conflits de versionDes versions de Spark et d'Iceberg qui ne correspondent pas peuvent provoquer des erreurs de classe introuvable ou de méthode indéfinie.Assurez-vous que vos versions de Spark et Iceberg sont compatibles.
Configuration du catalogueIceberg a besoin d'un catalogue (Hive, Glue, Nessie) pour gérer les métadonnées.Définissez l'URI et les identifiants corrects dans la configuration de votre moteur.
Erreurs de permissionDes problèmes de permission de lecture/écriture peuvent survenir sur des systèmes de fichiers comme HDFS ou le stockage en cloud.Vérifiez que votre moteur a les droits d'accès appropriés au système de fichiers.
Problèmes de point de contrôle ou de capture instantanéeLa suppression manuelle ou la corruption des instantanés en streaming peut entraîner des échecs.Évitez les modifications manuelles ; revenez à une version stable si nécessaire.

Des contrôles fréquents des systèmes d'intégration et des journaux permettent une détection précoce des conflits. Cela contribuera à maintenir des opérations fluides tout en minimisant le temps d'arrêt.

FAQ

Qu'est-ce qu'Apache Iceberg ?

Apache Iceberg est un format de table open-source conçu pour gérer des ensembles de données analytiques à grande échelle. Apache Iceberg est comme un organisateur intelligent pour les grandes données stockées dans des lacs de données.

Lorsque vous stockez de grandes quantités de données dans des fichiers (comme Parquet ou ORC) dans le stockage cloud ou HDFS, cela peut devenir désordonné et difficile à gérer—surtout lorsque les données continuent de changer ou de croître. Iceberg aide à organiser ces données de manière structurée, efficace et fiable afin que des outils comme Apache Spark, Flink et Trino puissent les traiter plus rapidement et plus précisément.

Considérez Iceberg comme un format de table, un peu comme la façon dont Excel organise les données en lignes et en colonnes. Mais contrairement aux formats traditionnels, Iceberg suit les métadonnées (données sur les données), prend facilement en charge les modifications de schéma et permet des fonctionnalités comme le voyage dans le temps (voir les versions antérieures des données), les lectures incrémentales et les transactions ACID (pour garantir que les données restent cohérentes).

Comment Apache Iceberg améliore-t-il les performances des lacs de données ?

Iceberg améliore les performances en stockant des métadonnées dans des manifestes plus compacts qui permettent un élagage efficace des partitions. Le système optimise les performances en limitant les requêtes aux manifestes et fichiers de données pertinents, ce qui minimise les frais d'entrée/sortie. Les instantanés permettent un accès cohérent aux données lors des lectures et écritures tout en prévenant les problèmes liés à la concurrence.

Comment Iceberg gère-t-il l'évolution des schémas ?
L'évolution des schémas est basée sur des versions. Chaque fois que vous modifiez un schéma, Iceberg génère un nouveau snapshot pointant vers le schéma mis à jour. Les snapshots plus anciens restent inchangés, donc les requêtes sur les données précédentes demeurent valides sans avoir besoin de réécrire des fichiers historiques.

Quelle est la différence entre Apache Iceberg, Delta Lake et Hudi ?

  • Iceberg met l'accent sur la gestion des métadonnées indépendante du moteur et sur l'optimisation des performances pour les données à grande échelle.
  • Delta Lake est axé sur les transactions ACID, fonctionne en étroite collaboration avec Databricks et permet des requêtes de voyage dans le temps.
  • Hudi est conçu pour traiter les données de manière incrémentielle et prend en charge l'analyse en quasi temps réel grâce à ses fonctionnalités avancées d'upsert.

Puis-je utiliser Apache Iceberg avec Apache Spark ?

Absolument ! Apache Iceberg peut s'intégrer à Spark, facilitant la lecture, l'écriture et la gestion des tables Iceberg via Spark SQL ou l'API DataFrame.

Quels sont les principaux avantages de l'utilisation d'Apache Iceberg dans les lacs de données ?

Certains des principaux avantages de l'utilisation d'Apache Iceberg dans les lacs de données incluent le support des transactions ACID, une gestion des métadonnées légère mais puissante, l'isolement des instantanés, une évolution de schéma fluide, et la compatibilité entre différents moteurs.

Quels sont les cas d'utilisation les plus courants d'Apache Iceberg ?

Apache Iceberg peut gérer diverses tâches de gestion des données. Cela inclut l'analyse par lots, le traitement de données incrémentielles, le déchargement des tâches d'entreposage de données, l'alimentation des magasins de caractéristiques d'apprentissage automatique et la gestion des données IoT.

Conclusion

Apache Iceberg devient une technologie de choix pour les organisations cherchant à relever les défis liés aux lacs de données modernes. Son design ouvert et évolutif, qui fonctionne avec différents moteurs, offre aux équipes de données la liberté de gérer les changements de schéma, de traiter les problèmes de performance et de maintenir la cohérence.

Apache Iceberg établit la base pour des lacs de données haute performance dans des environnements multi-cloud et monocloud. En utilisant les meilleures pratiques et conseils de dépannage de ce guide, vous maximiserez les capacités d'Iceberg pour vos besoins en analyse de données.

Pour approfondir votre compréhension des technologies basées sur Apache et de la manière dont elles peuvent s'intégrer dans diverses infrastructures, jetez un œil aux articles suivants :

  • Un guide pour installer le serveur web Apache sur Ubuntu 22.04

    • Apache contre Nginx : Ce que vous devez savoir
    • Sécuriser Apache avec Let's Encrypt sur Ubuntu
    • Dépannage des erreurs communes d'Apache

Bien que ces ressources se concentrent principalement sur le serveur HTTP Apache, les concepts sous-jacents de collaboration open-source, de gestion de la configuration et de dépannage système peuvent être appliqués à votre travail avec Apache Iceberg.

Ressources

  • Apache Iceberg vs Delta Lake : Quelles sont les différences ?
  • Apache Iceberg contre Delta Lake contre Apache Hudi
  • Tables Iceberg : Guide complet des fonctionnalités, avantages et meilleures pratiques
  • Apache Iceberg — Opérations CRUD
  • Comprendre le fichier manifeste Apache Iceberg