paint-brush
Comment déployer MinIO et Trino avec Kubernetespar@minio
4,766 lectures
4,766 lectures

Comment déployer MinIO et Trino avec Kubernetes

par MinIO6m2024/05/23
Read on Terminal Reader

Trop long; Pour lire

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à.
featured image - Comment déployer MinIO et Trino avec Kubernetes
MinIO HackerNoon profile picture
0-item
1-item



Trino (anciennement Presto) est un moteur de requête SQL et non une base de données SQL. Trino a évité le composant de stockage de la base de données SQL pour se concentrer sur une seule chose : les requêtes SQL ultra-rapides. Trino n'est qu'un moteur de requête et ne stocke pas de données. Au lieu de cela, Trino interagit avec diverses bases de données ou directement sur le stockage d'objets. Trino analyse la requête SQL que vous transmettez, crée et optimise un plan d'exécution de requête qui inclut les sources de données, puis planifie les nœuds de travail capables d'interroger intelligemment les bases de données sous-jacentes auxquelles ils se connectent.


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 immuable , versionné et protégé par codage d'effacement . De plus, l'enregistrement des données sur le stockage objet MinIO les rend disponibles pour d'autres applications d'apprentissage automatique et d'analyse natives du cloud.


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 Mou !