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.
Voici les différents composants et ce qu'ils font dans notre processus de configuration que nous aborderons ensuite.
Avant de commencer, assurez-vous d'avoir installé les outils nécessaires à la gestion de votre cluster Kubernetes :
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
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 -
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
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
Préparez MinIO dans l’espace de noms Trino.
kubectl minio init -n trino
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
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 :
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
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
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.
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é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
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
Port forward vers le service MinIO du locataire, permettant un accès local :
kubectl port-forward svc/minio -n trino 9443:443
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
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.
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)
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!
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