paint-brush
Les mystères du Data Lake révélés : Nessie, Dremio et MinIO font des vaguespar@minio
7,746 lectures
7,746 lectures

Les mystères du Data Lake révélés : Nessie, Dremio et MinIO font des vagues

par MinIO6m2024/02/22
Read on Terminal Reader

Trop long; Pour lire

Cet article fournit un guide étape par étape démontrant comment Nessie, Dremio et MinIO travaillent ensemble pour améliorer la qualité des données et la collaboration dans vos flux de travail d'ingénierie des données.
featured image - Les mystères du Data Lake révélés : Nessie, Dremio et MinIO font des vagues
MinIO HackerNoon profile picture


Beaucoup d’entre nous ont apporté des modifications aux données en fonction d’exigences qui évoluent ultérieurement. Au moment où nous nous en rendons compte, il devient impossible de revenir en arrière. Le changement n'est pas seulement une constante ; il s'agit d'un élément essentiel de la gestion des données qui nécessite une approche sophistiquée. Entrez dans la fonctionnalité de type Git du catalogue de données Nessie de Dremio.


Tout comme Git est devenu fondamental pour le développement de logiciels, les ingénieurs de données ont besoin d'outils similaires pour travailler en parallèle, comparer les versions de données, promouvoir les modifications de la production et restaurer les données si nécessaire. Nessie fournit aux ingénieurs de données un système de contrôle de version de type Git pour gérer les versions, les branches, les fusions et les validations de données. Cela peut être très utile lorsque plusieurs ingénieurs de données travaillent et transforment des données en même temps. Nessie permet à chaque ingénieur de travailler dans des branches distinctes tout en conservant une seule source de vérité sous la forme de la branche principale. Cette fonctionnalité permet aux équipes d'ingénierie de données de maintenir la qualité des données de manière collaborative face à des changements incessants.


Cet article fournit un guide étape par étape démontrant comment Nessie, Dremio et MinIO travaillent ensemble pour améliorer la qualité des données et la collaboration dans vos flux de travail d'ingénierie des données. Que vous soyez un ingénieur de données, un ingénieur ML ou simplement un passionné de lacs de données modernes, ce blog vous fournit les connaissances et les outils nécessaires pour améliorer efficacement vos pratiques de gestion des versions de données.

Comprendre les bases : charges de travail Nessie

Nessie autorise des charges de travail de type Git qui vous permettent de tester, de développer et de passer en production. Décomposons quelques concepts clés :


  • Branches : tout comme dans Git, les branches de Nessie vous permettent de travailler simultanément sur différentes tâches d'ingénierie de données. Par exemple, vous pourriez avoir une branche pour le développement de fonctionnalités, le nettoyage et la transformation des données. Chaque branche peut avoir son propre ensemble de modifications de données.


  • Commits : dans Nessie, un commit représente un instantané des données à un moment précis. Lorsque vous apportez des modifications à vos données, vous créez un nouveau commit qui enregistre ces modifications. Les commits sont liés à une branche spécifique. Lorsque vous devez restaurer vos données dans un état stable ou connu, Nessie facilite la sélection d'une validation spécifique et le retour à cette version de données. Cela garantit la qualité et la cohérence des données.


  • Fusions : Nessie permet de fusionner les modifications d'une branche à une autre. Ceci est similaire à la fusion des modifications de code dans Git. Lorsque vous fusionnez une branche, les modifications de données apportées dans cette branche font partie de la branche cible.

Les composants



Dremio est un moteur d'analyse distribué qui fonctionne comme une plateforme open source, offrant une interface intuitive en libre-service pour l'exploration, la transformation et le travail collaboratif des données. Sa conception est ancrée dans Flèche Apache, un format de mémoire en colonnes à grande vitesse.


Nous avons déjà expliqué comment déployer Dremio avec Kubernetes, ainsi que comment interroger les tables Iceberg sur MinIO avec Dremio . Pour plus d’informations sur Dremio, consultez Ressources Drémio .


MinIO est un stockage objet hautes performances. Réputé pour son caractère exceptionnel vitesse et évolutivité , MinIO joue un rôle essentiel dans la création et la maintenance d'infrastructures de lacs de données modernes. MinIO permet aux architectes de gérer et de stocker efficacement des volumes massifs de données sur site, sur système nu, en périphérie ou sur n'importe quel cloud public.


Apache Iceberg est un format de table ouverte adapté à la gestion de gros volumes de données dans des lacs de données. Des fonctionnalités uniques telles que le voyage dans le temps, l'évolution dynamique des schémas et Partition Evolution changent la donne, permettant aux moteurs de requête de travailler simultanément sur les mêmes données de manière sûre et efficace. Voir Le guide définitif de l'architecture Lakehouse avec Iceberg et MinIO pour plus d’informations sur les fonctionnalités d’Iceberg.

Commencer

Vous aurez besoin du Moteur Docker et Docker Composer pour ce tutoriel. Le moyen le plus simple d’obtenir les deux si vous ne les possédez pas déjà est d’installer Docker Desktop.


Cette partie du tutoriel est basée sur Dremio article de blog . Vous pouvez obtenir le dépôt pour ce projet ici .


Pour commencer, ouvrez un terminal et accédez au dossier dans lequel vous avez cloné/téléchargé le dépôt, puis exécutez la commande ci-dessous pour démarrer Dremio.


 docker-compose up dremio


Attendez quelques instants, puis accédez à http://localhost:9047 pour accéder à Dremio. Mettez à jour les champs demandés, puis cliquez sur Suivant.



Ensuite, exécutez la commande suivante pour démarrer MinIO.


 docker-compose up minio


La commande finale docker-compose up ci-dessous démarrera Nessie.


 docker-compose up nessie


Accédez à http://localhost:9001 pour vous connecter à MinIO avec le nom d'utilisateur et le mot de passe minioadmin:minioadmin . Vous serez invité à créer un compartiment.



Créez-en un nommé iceberg-datalake .



Revenez ensuite à Dremio à http://localhost:9047 , cliquez sur Ajouter une source et sélectionnez Nessie.



  • Définissez le nom sur nessie
  • Définissez l'URL du point de terminaison sur http://nessie:19120/api/v2
  • Définir l'authentification sur none



Ne cliquez pas encore sur Enregistrer. Au lieu de cela, dans le panneau de navigation de gauche, cliquez sur Stockage. MinIO est un stockage d'objets compatible S3-API et peut utiliser les mêmes voies de connexion qu'AWS S3.


  • Pour votre clé d'accès, définissez minioadmin
  • Pour votre clé secrète, définissez minioadmin
  • Définir le chemin racine sur /iceberg-datalake



Faites défiler vers le bas pour la prochaine série d’instructions.

  • Cliquez sur le bouton Add Property sous Connection Properties pour créer et configurer les propriétés suivantes.
    • fs.s3a.path.style.access à true
    • fs.s3a.endpoint vers minio:9000
    • dremio.s3.compat à true
    • Décochez Encrypt connection



Cliquez ensuite sur Enregistrer. Vous devriez maintenant voir les catalogues Nessie dans vos sources de données.



Créer une source de données

Dans Dremio, accédez à SQL Runner sur le côté gauche. Assurez-vous que Context dans la zone supérieure droite de l'éditeur de texte est défini sur notre source Nessie. Sinon, vous devrez référencer le contexte comme nessie.SalesData au lieu de simplement SalesData pour exécuter cette requête. Copiez et collez le SQL ci-dessous et exécutez.


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



Exécutez la requête ci-dessous pour insérer des données dans la table que vous venez de créer.


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



Revenez à MinIO pour voir que votre lac de données a été rempli avec les tables Iceberg.


Branchement et fusion avec Nessie

Retournez à Dremio sur http://localhost:9047 . Commencez par interroger une table sur la branche principale en utilisant la syntaxe AT BRANCH :


 SELECT * FROM nessie.SalesData AT BRANCH main; 



Créez une branche ETL (Extract Transform and Load) pour vous permettre de jouer avec et de transformer les données sans impacter la production.


 CREATE BRANCH etl_06092023 in nessie


Au sein de la branche ETL, insérez de nouvelles données dans la table :

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


Confirmez la disponibilité immédiate des nouvelles données au sein de la branche ETL :

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


Notez l'isolement des modifications des utilisateurs sur la branche principale :

 SELECT * FROM nessie.SalesData AT BRANCH main;


Fusionnez les modifications de la branche ETL dans la branche principale :

 MERGE BRANCH etl_06092023 INTO main in nessie;


Sélectionnez à nouveau la branche principale pour voir que les modifications ont bien été fusionnées.

 SELECT * FROM nessie.SalesData AT BRANCH main


Cette stratégie de branchement permet aux ingénieurs de données de gérer indépendamment de nombreuses transactions sur plusieurs tables. Lorsqu'ils sont prêts, les ingénieurs de données peuvent fusionner ces transactions en une seule transaction multi-tables complète au sein de la branche principale.

Conclusion

Cet article de blog s'est penché sur la puissance du contrôle de version de type Git dans l'ingénierie des données, en soulignant comment Nessie gère de manière transparente les versions, les branches et les fusions de données. Ce guide étape par étape montre comment Nessie, en collaboration avec Dremio et MinIO, en tant que base de stockage objet, améliore la qualité des données et la collaboration dans les flux de travail d'ingénierie des données.


Faites-nous savoir à quoi ressemble votre data lakehouse [email protected] ou sur notre chaîne Slack .


Apparaît également ici .