MinIO est fréquemment utilisé pour stocker des données provenant de charges de travail IA/ML, de Datalakes ou de maisons de lac, qu'il s'agisse de Dremio, Hive, Hudi, StarRocks ou de l'une des douzaines d'autres excellentes solutions d'outils IA/ML. MinIO est plus efficace lorsqu'il est utilisé comme couche de stockage principale, ce qui réduit le coût total de possession des données stockées, et vous bénéficiez également des avantages supplémentaires de l'écriture de données sur MinIO qui sont
Dans ce didacticiel, nous allons déployer un système cohérent qui permet des requêtes SQL distribuées sur de grands ensembles de données stockés dans Minio, Trino exploitant les métadonnées de Hive Metastore et les schémas de table de Redis.
Composants
Voici les différents composants et ce qu'ils font dans notre processus de configuration que nous aborderons ensuite.
- Minio : Minio peut être utilisé pour stocker de grands ensembles de données, comme ceux généralement analysés par Trino.
- Hive Metastore : Hive Metastore est un service qui stocke les métadonnées des tables Hive (comme le schéma de table). Trino peut utiliser Hive Metastore pour déterminer le schéma des tables lors de l'interrogation d'ensembles de données.
- PostgreSQL pour Hive Metastore : il s'agit du backend de base de données pour Hive Metastore. C'est là que les métadonnées sont réellement stockées.
- Redis : dans cette configuration, Redis pour stocker les schémas de table pour Trino.
- Trino : Trino (anciennement connu sous le nom de Presto) est un moteur de requête SQL distribué hautes performances. Il permet d'interroger des données sur diverses sources de données telles que les bases de données SQL, les bases de données NoSQL et même le stockage d'objets comme Minio.
Conditions préalables
Avant de commencer, assurez-vous d'avoir installé les outils nécessaires à la gestion de votre cluster Kubernetes :
- kubectl : le principal outil de ligne de commande pour gérer les clusters Kubernetes. Vous pouvez l'utiliser pour inspecter, manipuler et administrer les ressources du cluster.
- helm : Un gestionnaire de paquets pour Kubernetes. Helm vous permet de déployer, mettre à niveau et gérer des applications au sein de votre cluster à l'aide de graphiques prédéfinis.
Clonage de référentiel
Pour accéder aux ressources nécessaires au déploiement de Trino sur Kubernetes, clonez le référentiel GitHub spécifique et accédez au répertoire approprié :
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Création d'espace de noms Kubernetes
Les espaces de noms dans Kubernetes fournissent des environnements isolés pour les applications. Créez un nouvel espace de noms pour Trino afin d'encapsuler son déploiement :
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
Secret de définition de table Redis
Redis stockera les schémas de table utilisés par Trino. Sécurisez ces schémas avec un secret Kubernetes. La commande suivante crée un secret générique, en récupérant les données à partir d'un fichier JSON :
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Ajouter des référentiels Helm
Les référentiels Helm fournissent des graphiques pré-packagés qui simplifient le déploiement des applications. Ajoutez les référentiels Bitnami et Trino à votre configuration Helm :
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
Déployer MinIO pour le stockage de données
Initialiser MinIO
Préparez MinIO dans l’espace de noms Trino.
kubectl minio init -n trino
Créer un locataire MinIO
Mettre en place une architecture multi-tenant pour le stockage des données. L'exemple ci-dessous crée un locataire nommé « tenant-1 » avec quatre serveurs, quatre volumes de stockage et une capacité de 4 Gio :
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Configurer le métastore Hive
Trino utilise Hive Metastore pour stocker les métadonnées des tables. Déployez PostgreSQL pour gérer les métadonnées, puis configurez le Hive Metastore :
Installer PostgreSQL
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Déployer le métastore Hive
Utilisez un graphique Helm préconfiguré pour déployer Hive Metastore dans l'espace de noms Trino :
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Déployer MinIO et Trino avec Kubernetes
Trino et MinIO créent une combinaison puissante pour les requêtes SQL distribuées sur de grands ensembles de données. Suivez ces étapes pour déployer et configurer le système.
Déployer Redis pour stocker des schémas de table
Redis est un magasin de données en mémoire à haut débit utilisé pour contenir les schémas de table Trino pour améliorer les performances des requêtes. Déployez-le dans l'espace de noms Trino à l'aide d'un graphique Helm :
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
Déployer Trino
Déployez Trino en tant que moteur de requête SQL distribué qui se connectera à MinIO et à d'autres sources de données :
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
Vérifier le déploiement
Confirmez que tous les composants fonctionnent correctement en répertoriant les pods dans l'espace de noms Trino :
kubectl get pods -n trino
Examen de sécurité et ajustements
Vérifiez et ajustez les paramètres de sécurité si nécessaire. Pour désactiver la validation du certificat SSL pour les connexions S3, mettez à jour la section supplémentaireCatalogs du fichier Values.yaml avec la propriété suivante :
hive.s3.ssl.enabled=false
Essai
Transfert de port vers le service locataire MinIO
Port forward vers le service MinIO du locataire, permettant un accès local :
kubectl port-forward svc/minio -n trino 9443:443
Créer un alias et un bucket pour Trino
1. Créer un alias : établissez un alias pour le locataire à l'aide des informations d'identification du déploiement MinIO :
mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure
2. Créer un bucket : créez un nouveau bucket que Trino utilisera
mc mb my-minio/tiny --insecure
Accédez à l'interface utilisateur de Trino via la redirection de port
1. Obtenir le nom du pod : récupérez le nom du pod coordinateur Trino :
export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
2. Redirection de port : redirigez le port local 8080 vers le pod coordinateur :
kubectl port-forward $POD_NAME 8080:8080
3. Accédez à l'interface utilisateur : utilisez l'interface utilisateur Trino dans votre navigateur en visitant http://127.0.0.1:8080.
Interroger Trino via CLI
Accédez au pod du coordinateur Trino et lancez l'interrogation via la ligne de commande :
kubectl exec -it deploy/my-trino-coordinator -n trino -- trino
SHOW CATALOGS;
SHOW SCHEMAS IN minio;
Schema -------------------- default information_schema
CREATE SCHEMA minio.tiny WITH (location = 's3a://tiny/');
CREATE TABLE minio.tiny.customer WITH ( format = 'ORC', external_location = 's3a://tiny/customer/' ) AS SELECT * FROM tpch.tiny.customer;
SELECT * FROM minio.tiny.customer LIMIT 50;
SHOW SCHEMAS IN minio;
Schema -------------------- default information_schema tiny (3 rows)
Confirmer les données dans le compartiment MinIO
Après avoir créé le compartiment, confirmez que les données sont stockées dans MinIO en répertoriant le contenu avec l'outil de ligne de commande mc. Utilisez la commande suivante :
mc ls my-minio/tiny --insecure
C'est aussi simple que ça!
Dernières pensées
Lors du dépannage des problèmes de configuration, en particulier ceux concernant la sécurité, examinez attentivement les fichiers values.yaml de chaque composant afin de garantir les paramètres appropriés.
Trino se distingue par sa capacité à optimiser les requêtes sur différentes couches de données, qu'il s'agisse de bases de données spécialisées ou de stockage d'objets. Il vise à minimiser le transfert de données en poussant les requêtes vers le bas pour récupérer uniquement les données essentielles requises. Cela permet à Trino de joindre des ensembles de données provenant de différentes sources, d'effectuer un traitement ultérieur ou de renvoyer efficacement des résultats précis.
MinIO se combine exceptionnellement bien avec Trino en raison de son évolutivité et de ses performances de pointe. Avec la capacité de gérer des charges de travail importantes en matière d'IA/ML et d'analyse, MinIO prend en charge sans effort les requêtes Trino et au-delà. Lors de tests de référence récents, MinIO a atteint un débit impressionnant de 325 Gio/s (349 Go/s) pour les opérations GET et de 165 Gio/s (177 Go/s) pour les opérations PUT sur seulement 32 nœuds. Ces performances remarquables garantissent que les données stockées dans MinIO restent facilement accessibles, faisant de MinIO un choix fiable et performant pour Trino sans devenir un goulot d'étranglement.
Si vous avez des questions sur MinIO et Trino, n'hésitez pas à nous contacter au