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.
Hier sind die verschiedenen Komponenten und was sie in unserem Einrichtungsprozess tun, den wir als Nächstes durchgehen werden.
Stellen Sie vor dem Start sicher, dass Sie die erforderlichen Tools zur Verwaltung Ihres Kubernetes-Clusters installiert haben:
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
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 -
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 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
Bereiten Sie MinIO im Trino-Namespace vor.
kubectl minio init -n trino
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
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:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
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
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.
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
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
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
Portweiterleitung zum MinIO-Dienst des Mandanten, um lokalen Zugriff zu ermöglichen:
kubectl port-forward svc/minio -n trino 9443:443
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
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.
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)
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!
Ü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