paint-brush
So stellen Sie MinIO und Trino mit Kubernetes bereitvon@minio
4,766 Lesungen
4,766 Lesungen

So stellen Sie MinIO und Trino mit Kubernetes bereit

von MinIO6m2024/05/23
Read on Terminal Reader

Zu lang; Lesen

Mit der Fähigkeit, erhebliche Arbeitslasten in den Bereichen KI/ML und Analytik zu bewältigen, unterstützt MinIO mühelos Trino-Abfragen und mehr.
featured image - So stellen Sie MinIO und Trino mit Kubernetes bereit
MinIO HackerNoon profile picture
0-item
1-item



Trino (ehemals Presto) ist eine SQL-Abfrage-Engine – keine SQL-Datenbank. Trino hat auf die Speicherkomponente der SQL-Datenbank verzichtet, um sich nur auf eine Sache zu konzentrieren – ultraschnelle SQL-Abfragen. Trino ist nur eine Abfrage-Engine und speichert keine Daten. Stattdessen interagiert Trino mit verschiedenen Datenbanken oder direkt mit dem Objektspeicher. Trino parst und analysiert die von Ihnen übergebene SQL-Abfrage, erstellt und optimiert einen Abfrageausführungsplan, der die Datenquellen enthält, und plant dann Worker-Knoten, die in der Lage sind, die zugrunde liegenden Datenbanken, mit denen sie verbunden sind, intelligent abzufragen.


MinIO wird häufig verwendet, um Daten von AI/ML-Workloads, Datalakes bis hin zu Lake Houses zu speichern, sei es Dremio, Hive, Hudi, StarRocks oder eine der anderen Dutzend großartigen AI/ML-Tool-Lösungen. MinIO ist effizienter, wenn es als primäre Speicherschicht verwendet wird, was die Gesamtbetriebskosten für die gespeicherten Daten senkt. Außerdem erhalten Sie die zusätzlichen Vorteile des Schreibens von Daten in MinIO, die unveränderlich , versioniert und geschützt durch Löschcodierung . Durch das Speichern der Daten im MinIO-Objektspeicher werden diese außerdem für andere Cloud-native Anwendungen für maschinelles Lernen und Analysen verfügbar.


In diesem Tutorial stellen wir ein zusammenhängendes System bereit, das verteilte SQL-Abfragen über große, in Minio gespeicherte Datensätze ermöglicht, wobei Trino Metadaten von Hive Metastore und Tabellenschemata von Redis nutzt.

Komponenten

Hier sind die verschiedenen Komponenten und was sie in unserem Einrichtungsprozess tun, den wir als Nächstes durchgehen werden.


  • Minio: Minio kann zum Speichern großer Datensätze verwendet werden, wie sie normalerweise von Trino analysiert werden.
  • Hive Metastore : Hive Metastore ist ein Dienst, der Metadaten für Hive-Tabellen (wie Tabellenschemata) speichert. Trino kann Hive Metastore verwenden, um das Schema von Tabellen bei der Abfrage von Datensätzen zu bestimmen.
  • PostgreSQL für Hive Metastore: Dies ist das Datenbank-Backend für den Hive Metastore. Hier werden die Metadaten tatsächlich gespeichert.
  • Redis: In diesem Setup dient Redis zum Speichern von Tabellenschemata für Trino.
  • Trino: Trino (früher bekannt als Presto) ist eine leistungsstarke, verteilte SQL-Abfrage-Engine. Sie ermöglicht die Abfrage von Daten aus verschiedenen Datenquellen wie SQL-Datenbanken, NoSQL-Datenbanken und sogar Objektspeichern wie Minio.

Voraussetzungen

Stellen Sie vor dem Start sicher, dass Sie die erforderlichen Tools zur Verwaltung Ihres Kubernetes-Clusters installiert haben:


  • kubectl : Das primäre Befehlszeilentool zur Verwaltung von Kubernetes-Clustern. Sie können damit Clusterressourcen prüfen, bearbeiten und verwalten.
  • helm : Ein Paketmanager für Kubernetes. Mit Helm können Sie Anwendungen in Ihrem Cluster mithilfe vordefinierter Diagramme bereitstellen, aktualisieren und verwalten.

Repository-Klonen

Um auf die für die Bereitstellung von Trino auf Kubernetes erforderlichen Ressourcen zuzugreifen, klonen Sie das entsprechende GitHub-Repository und navigieren Sie zum entsprechenden Verzeichnis:


 git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes

Kubernetes-Namespace-Erstellung

Namespaces in Kubernetes bieten isolierte Umgebungen für Anwendungen. Erstellen Sie einen neuen Namespace für Trino, um dessen Bereitstellung zu kapseln:


 kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -

Geheimnis der Redis-Tabellendefinition

Redis speichert die von Trino verwendeten Tabellenschemata. Sichern Sie diese Schemata mit einem Kubernetes-Geheimnis. Der folgende Befehl erstellt ein generisches Geheimnis, das Daten aus einer JSON-Datei bezieht:


 kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true


Helm-Repositorys hinzufügen

Helm-Repositorys bieten vorgefertigte Diagramme, die die Anwendungsbereitstellung vereinfachen. Fügen Sie die Bitnami- und Trino-Repositorys zu Ihrer Helm-Konfiguration hinzu:


 helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true

Stellen Sie MinIO zur Datenspeicherung bereit

MinIO initialisieren

Bereiten Sie MinIO im Trino-Namespace vor.


 kubectl minio init -n trino

MinIO-Mandanten erstellen

Richten Sie eine Multi-Tenant-Architektur für die Datenspeicherung ein. Das folgende Beispiel erstellt einen Tenant namens „tenant-1“ mit vier Servern, vier Speichervolumes und einer Kapazität von 4 GiB:


 kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino

Einrichten des Hive-Metastore

Trino verwendet Hive Metastore zum Speichern von Tabellenmetadaten. Setzen Sie PostgreSQL ein, um die Metadaten zu verwalten, und richten Sie dann den Hive Metastore ein:

Installieren Sie PostgreSQL


 helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml

Bereitstellen von Hive Metastore

Verwenden Sie ein vorkonfiguriertes Helm-Diagramm, um Hive Metastore im Trino-Namespace bereitzustellen:


 helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore

Bereitstellen von MinIO und Trino mit Kubernetes

Trino und MinIO bilden eine leistungsstarke Kombination für verteilte SQL-Abfragen über große Datensätze. Befolgen Sie diese Schritte, um das System bereitzustellen und zu konfigurieren.

Bereitstellen von Redis zum Speichern von Tabellenschemata

Redis ist ein schneller In-Memory-Datenspeicher, der zur Speicherung von Trino-Tabellenschemata für eine verbesserte Abfrageleistung verwendet wird. Stellen Sie ihn mithilfe eines Helm-Diagramms im Trino-Namespace bereit:


 helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml


Trino einsetzen

Stellen Sie Trino als verteilte SQL-Abfrage-Engine bereit, die eine Verbindung mit MinIO und anderen Datenquellen herstellt:


 helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml

Bereitstellung überprüfen

Bestätigen Sie, dass alle Komponenten ordnungsgemäß ausgeführt werden, indem Sie die Pods im Trino-Namespace auflisten:


 kubectl get pods -n trino


Sicherheitsüberprüfung und Anpassungen


Überprüfen Sie die Sicherheitseinstellungen und passen Sie sie nach Bedarf an. Um die SSL-Zertifikatsüberprüfung für S3-Verbindungen zu deaktivieren, aktualisieren Sie den Abschnitt additionalCatalogs der Datei values.yaml mit der folgenden Eigenschaft:


 hive.s3.ssl.enabled=false

Testen

Portweiterleitung zum MinIO-Mandantendienst

Portweiterleitung zum MinIO-Dienst des Mandanten, um lokalen Zugriff zu ermöglichen:


 kubectl port-forward svc/minio -n trino 9443:443

Alias und Bucket für Trino erstellen

1. Alias erstellen: Richten Sie mit den Anmeldeinformationen aus der MinIO-Bereitstellung einen Alias für den Mandanten ein:


 mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure


2. Bucket erstellen: Erstellen Sie einen neuen Bucket, den Trino verwenden wird


 mc mb my-minio/tiny --insecure

Zugriff auf die Trino-Benutzeroberfläche über die Portweiterleitung

1. Pod-Namen abrufen: Rufen Sie den Namen des Trino-Koordinator-Pods ab:


 export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")


2. Portweiterleitung: Leiten Sie den lokalen Port 8080 an den Koordinator-Pod weiter:


 kubectl port-forward $POD_NAME 8080:8080


3. Auf die Benutzeroberfläche zugreifen: Verwenden Sie die Trino-Benutzeroberfläche in Ihrem Browser, indem Sie http://127.0.0.1:8080 aufrufen.



Trino über die CLI abfragen

Greifen Sie auf den Trino-Koordinator-Pod zu und starten Sie die Abfrage über die Befehlszeile:


 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)


Daten im MinIO-Bucket bestätigen

Bestätigen Sie nach dem Erstellen des Buckets, dass die Daten in MinIO gespeichert sind, indem Sie den Inhalt mit dem Befehlszeilentool mc auflisten. Verwenden Sie den folgenden Befehl:


 mc ls my-minio/tiny --insecure


So einfach ist das!

Abschließende Gedanken

Überprüfen Sie bei der Behebung von Konfigurationsproblemen, insbesondere solchen, die die Sicherheit betreffen, die values.yaml-Dateien für jede Komponente gründlich, um sicherzustellen, dass die richtigen Einstellungen vorgenommen wurden.


Trino zeichnet sich durch seine Fähigkeit aus, Abfragen über verschiedene Datenebenen hinweg zu optimieren, seien es spezialisierte Datenbanken oder Objektspeicher. Ziel ist es, den Datentransfer zu minimieren, indem Abfragen so verschoben werden, dass nur die wesentlichen benötigten Daten abgerufen werden. Dadurch kann Trino Datensätze aus verschiedenen Quellen zusammenführen, weitere Verarbeitungen durchführen oder präzise Ergebnisse effizient zurückgeben.


MinIO lässt sich aufgrund seiner branchenführenden Skalierbarkeit und Leistung hervorragend mit Trino kombinieren. Mit der Fähigkeit, erhebliche Arbeitslasten in den Bereichen KI/ML und Analytik zu bewältigen, unterstützt MinIO mühelos Trino-Abfragen und mehr. In aktuellen Benchmarks erreichte MinIO beeindruckende 325 GiB/s (349 GB/s) für GET-Operationen und 165 GiB/s (177 GB/s) für PUT-Operationen über nur 32 Knoten. Diese bemerkenswerte Leistung stellt sicher, dass in MinIO gespeicherte Daten leicht zugänglich bleiben, was MinIO zu einer zuverlässigen und leistungsstarken Wahl für Trino macht, ohne zum Engpass zu werden.


Wenn Sie Fragen zu MinIO und Trino haben, kontaktieren Sie uns bitte unter Locker !