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