paint-brush
Construire des architectures de données modernes et efficaces avec Iceberg, Tabular et MinIOpar@minio
7,617 lectures
7,617 lectures

Construire des architectures de données modernes et efficaces avec Iceberg, Tabular et MinIO

par MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

Les lacs de données modernes constituent une plateforme centrale pour tous vos besoins en données. Cependant, la création et la gestion d’un lac de données efficace peuvent s’avérer complexes.
featured image - Construire des architectures de données modernes et efficaces avec Iceberg, Tabular et MinIO
MinIO HackerNoon profile picture
0-item
1-item


Le paysage des données moderne exige un nouveau type d’infrastructure, une infrastructure qui intègre de manière transparente les données structurées et non structurées, qui évolue sans effort et qui permet des charges de travail d’IA/ML efficaces. C'est ici que lacs de données modernes entrez, fournissant une plate-forme centrale pour tous vos besoins en données. Cependant, la création et la gestion d’un lac de données efficace peuvent s’avérer complexes.


Cet article de blog approfondit trois outils puissants qui peuvent optimiser votre approche actuelle : Apache Iceberg , Tabulaire, et MinIO. Les étapes ci-dessous vous expliqueront comment ces services se combinent de manière transparente pour créer une architecture de lac de données robuste et native du cloud, spécifiquement optimisée pour les charges de travail IA/ML.

Qu’est-ce que le tableau ?

Tabular est une plate-forme de données créée par les créateurs originaux d'Apache Iceberg. Il est conçu pour fournir une plate-forme de stockage indépendante et universelle qui se connecte à n'importe quelle couche de calcul, éliminant ainsi la dépendance vis-à-vis du fournisseur de données. Cette fonctionnalité est essentielle à la pile de données moderne, elle permet aux utilisateurs de choisir les meilleurs outils de calcul et de stockage sans être obligés d'utiliser l'ensemble d'outils obsolètes et/ou incompatibles d'un fournisseur particulier.


Dans un architecture de MinIO et Iceberg et peut être amélioré par Tabular. Tabular peut être utilisé pour gérer et interroger les données Iceberg stockées dans MinIO, permettant le stockage et la gestion de données structurées de manière évolutive, hautes performances et nativement cloud. Ces composants natifs de Kubernetes fonctionnent ensemble de manière fluide avec très peu de frictions et s'appuient sur les capacités de chacun pour fonctionner à grande échelle.

Pourquoi S3FileIO au lieu du file-io de Hadoop ?

Cette implémentation exploite S3FileIO d'Iceberg. S3FileIO est considéré comme meilleur que file-io de Hadoop pour plusieurs raisons. dont nous avons déjà parlé autre part :


  1. Optimisé pour le stockage cloud : S3FileIO d'Iceberg est conçu pour fonctionner avec le stockage cloud natif.


  2. Débit amélioré et limitation minimisée : Iceberg utilise un ObjectStoreLocationProvider pour distribuer des fichiers sur plusieurs préfixes dans un compartiment MinIO, ce qui permet de minimiser la limitation et de maximiser le débit pour les opérations d'E/S liées à S3.


  3. Cohérence stricte : Iceberg a été mis à jour pour tirer pleinement parti d'une cohérence stricte en éliminant les contrôles de cohérence redondants qui pourraient avoir un impact sur les performances.


  4. Téléchargement progressif en plusieurs parties : S3FileIO d'Iceberg implémente un téléchargement progressif en plusieurs parties algorithme, qui télécharge des parties de fichiers de données en parallèle dès que chaque partie est prête, réduisant ainsi l'utilisation du disque local et augmentant la vitesse de téléchargement.


  5. Vérification de la somme de contrôle : Iceberg permet validations de somme de contrôle pour les écritures de l'API S3 pour garantir l'intégrité des objets téléchargés, ce qui peut être activé en définissant la propriété de catalogue appropriée.


  6. Balises personnalisées : Iceberg prend en charge l'ajout balises personnalisées aux objets lors des opérations d'écriture et de suppression avec l'API S3, ce qui peut être utile pour le suivi et la gestion des coûts.


  7. Évitement de la mise en cache négative : l'interface FileIO d'Iceberg ne nécessite pas de garanties aussi strictes qu'un système de fichiers compatible Hadoop, ce qui lui permet de éviter la mise en cache négative cela pourrait autrement dégrader les performances.


En revanche, le S3A FileSystem de Hadoop, utilisé avant S3FileIO, n'offre pas le même niveau d'optimisation pour le stockage cloud. Tout cela pour dire : n'entravez pas votre infrastructure de lac de données tournée vers l'avenir avec les pièges du passé.

Conditions préalables

Avant de commencer, assurez-vous que votre système répond aux exigences suivantes :

Si vous partez de zéro, vous pouvez installer les deux à l'aide du Bureau Docker installateur pour votre plate-forme spécifique. C'est souvent plus simple que de télécharger Docker et Docker Compose séparément. Vérifiez si Docker est installé en exécutant la commande suivante :


 docker-compose --version


Commencer

Pour commencer, clonez ou copiez le fichier YAML dans Tabular's dépôt git . Vous avez juste besoin du YAML pour ce tutoriel. N'hésitez pas à explorer le reste du référentiel ultérieurement.


Le décomposer

Le fichier YAML fourni est un fichier de configuration Docker Compose. Il définit un ensemble de services et leurs configurations pour une application Docker multi-conteneurs. Dans ce cas, il existe deux services : Spark-Iceberg et MinIO. Décomposons chaque section :


1. Service Spark-Iceberg :


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



image : Spécifie l'image Docker à utiliser pour le service spark-iceberg. Dans ce cas, il utilise l'image tabulario/spark-iceberg:latest.

depend_on : Spécifie que le service spark-iceberg dépend des services rest et minio.

containers_name : attribue un nom spécifique (spark-iceberg) au conteneur.

environnement : définit les variables d'environnement pour le conteneur, y compris les informations d'identification Spark et AWS.

volumes : monte les répertoires locaux (./warehouse et ./notebooks) en tant que volumes à l'intérieur du conteneur.

ports : mappe les ports du conteneur sur les ports hôtes pour accéder à l'interface utilisateur Spark et à d'autres services.


2. Service Mini :


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


image : Spécifie l’image Docker pour le service MinIO.

nom_conteneur : attribue un nom spécifique (MinIO) au conteneur.

environnement : définit les variables d'environnement pour la configuration de MinIO, y compris les informations d'identification de l'utilisateur root.

ports : mappe les ports du conteneur sur les ports hôtes pour accéder à l’interface utilisateur MinIO.

command : Spécifie la commande pour démarrer le serveur MinIO avec des paramètres spécifiques.


Un autre aspect du service MinIO est MC , l'outil de ligne de commande de MinIO.


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


depend_on : Spécifie que le service mc dépend du service MinIO.

image : Spécifie l'image Docker pour le service mc.

nom_conteneur : attribue un nom spécifique (mc) au conteneur.

environnement : définit les variables d'environnement pour configurer le client MinIO.

point d'entrée : définit la commande de point d'entrée pour le conteneur, y compris les étapes de configuration pour le client MinIO.


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



Cette séquence de commandes effectue essentiellement les tâches suivantes :


  • Supprime le répertoire d'entrepôt existant et son contenu du serveur MinIO.

  • Crée un nouveau bucket nommé Warehouse.

  • Définit la stratégie d'accès du bucket d'entrepôt sur publique.


Ce fichier Docker Compose orchestre un environnement multi-conteneurs avec des services pour Spark, PostgreSQL, MinIO. Il configure les dépendances, les variables d'environnement et les commandes nécessaires à l'exécution des services ensemble. Les services fonctionnent en tandem pour créer un environnement de développement pour le traitement des données en utilisant Spark et Iceberg avec MinIO comme backend de stockage d'objets.

Démarrage

Dans une fenêtre de terminal, accédez au répertoire tabular-spark-setup du référentiel et exécutez la commande suivante :


 docker-compose up


Connectez-vous à MinIO à http://127.0.0.1:9001 avec les informations d'identification admin:password pour voir que le compartiment d'entrepôt a été créé.



Une fois que tous les conteneurs sont opérationnels, vous pouvez accéder à votre serveur Jupyter Notebook en accédant à http://localhost:8888



Exécutez l'un des exemples de blocs-notes et revenez à MinIO à l' http://127.0.0.1:9001 pour voir votre entrepôt rempli de données.


Construire votre lac de données moderne

Ce didacticiel sur la création d'un datalake moderne avec Iceberg, Tabular et MinIO n'est que le début. Ce trio puissant ouvre les portes sur un monde de possibilités. Avec ces outils, vous pouvez intégrer et analyser en toute transparence toutes vos données, structurées et non structurées, pour découvrir des modèles cachés et prendre des décisions basées sur les données qui alimentent l'innovation. Tirez parti de l’efficacité et de la flexibilité de cette architecture en production pour accélérer vos initiatives d’IA/ML et libérer le véritable potentiel de vos modèles d’apprentissage automatique, accélérant ainsi votre chemin vers des découvertes révolutionnaires. Contactez-nous à [email protected] ou sur notre Mou canal si vous avez des questions pendant la construction.