MinIO, Dremio, Hive, Hudi, StarRocks veya diğer bir düzine kadar harika AI/ML araç çözümlerinden herhangi biri olsun, AI/ML İş Yüklerinden, Datalakes'ten göl evlerine kadar verileri depolamak için sıklıkla kullanılır. MinIO, birincil depolama katmanı olarak kullanıldığında daha verimli olur, bu da depolanan verilerin toplam sahip olma maliyetini azaltır, ayrıca MinIO'ya veri yazmanın ek avantajlarından da yararlanırsınız;
Bu öğreticide, Trino'nun Hive Metastore'dan meta verilerden ve Redis'ten tablo şemalarından yararlandığı, Minio'da depolanan büyük veri kümeleri genelinde dağıtılmış SQL sorgulamasına olanak tanıyan uyumlu bir sistem dağıtacağız.
İşte farklı bileşenler ve bir sonraki adımda ele alacağımız kurulum sürecimizde bunların yaptıkları.
Başlamadan önce Kubernetes kümenizi yönetmek için gerekli araçların kurulu olduğundan emin olun:
Trino'yu Kubernetes'te dağıtmak için gereken kaynaklara erişmek için belirli GitHub deposunu kopyalayın ve uygun dizine gidin:
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Kubernetes'teki ad alanları uygulamalar için yalıtılmış ortamlar sağlar. Trino'nun dağıtımını kapsaması için yeni bir ad alanı oluşturun:
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
Redis, Trino tarafından kullanılan tablo şemalarını saklayacak. Bu şemaları bir Kubernetes Secret ile güvence altına alın. Aşağıdaki komut, verileri bir JSON dosyasından alarak genel bir sır oluşturur:
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Helm depoları, uygulama dağıtımını kolaylaştıran önceden paketlenmiş grafikler sağlar. Bitnami ve Trino depolarını Helm yapılandırmanıza ekleyin:
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
MinIO'yu Trino ad alanı içinde hazırlayın.
kubectl minio init -n trino
Veri depolama için çok kiracılı bir mimari kurun. Aşağıdaki örnek, dört sunucuya, dört depolama birimine ve 4 GiB kapasiteye sahip "kiracı-1" adlı bir kiracı oluşturur:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Trino, tablo meta verilerini depolamak için Hive Metastore'u kullanıyor. Meta verileri yönetmek için PostgreSQL'i dağıtın, ardından Hive Metastore'u ayarlayın:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Hive Metastore'u Trino ad alanı içinde dağıtmak için önceden yapılandırılmış bir Helm grafiği kullanın:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Trino ve MinIO, büyük veri kümelerinde dağıtılmış SQL sorgulaması için güçlü bir kombinasyon oluşturur. Sistemi dağıtmak ve yapılandırmak için aşağıdaki adımları izleyin.
Redis, gelişmiş sorgu performansı için Trino tablo şemalarını tutmak için kullanılan yüksek hızlı, bellek içi bir veri deposudur. Helm grafiği kullanarak Trino ad alanına dağıtın:
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
Trino'yu MinIO'ya ve diğer veri kaynaklarına bağlanacak dağıtılmış SQL sorgu motoru olarak dağıtın:
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
Trino ad alanındaki bölmeleri listeleyerek tüm bileşenlerin doğru şekilde çalıştığını doğrulayın:
kubectl get pods -n trino
Güvenlik İncelemesi ve Düzenlemeler
Güvenlik ayarlarını gözden geçirin ve gerektiği gibi ayarlayın. S3 bağlantıları için SSL sertifikası doğrulamasını devre dışı bırakmak üzere, value.yaml dosyasının ek Kataloglar bölümünü aşağıdaki özellikle güncelleyin:
hive.s3.ssl.enabled=false
Yerel erişimi etkinleştirerek kiracının MinIO hizmetine bağlantı noktası iletin:
kubectl port-forward svc/minio -n trino 9443:443
1. Takma Ad Oluşturun: MinIO dağıtımındaki kimlik bilgilerini kullanarak kiracı için bir takma ad oluşturun:
mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure
2. Kova Oluştur: Trino'nun kullanacağı yeni bir kova oluşturun
mc mb my-minio/tiny --insecure
1. Bölme Adını Alın: Trino koordinatör bölmesinin adını alın:
export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
2. Bağlantı Noktası İletme: Yerel bağlantı noktası 8080'i koordinatör bölmesine iletin:
kubectl port-forward $POD_NAME 8080:8080
3. Erişim Kullanıcı Arayüzü: Tarayıcınızda http://127.0.0.1:8080 adresini ziyaret ederek Trino Kullanıcı Arayüzünü kullanın.
Trino koordinatör bölmesine erişin ve komut satırı aracılığıyla sorgulamaya başlayın:
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)
Kovayı oluşturduktan sonra mc komut satırı aracıyla içerikleri listeleyerek verilerin MinIO'da saklandığını doğrulayın. Aşağıdaki komutu kullanın:
mc ls my-minio/tiny --insecure
Bu kadar basit!
Özellikle güvenlikle ilgili olanlar olmak üzere yapılandırma sorunlarını giderirken, ayarların doğru yapıldığından emin olmak için her bir bileşenin value.yaml dosyalarını kapsamlı bir şekilde inceleyin.
Trino, ister özel veritabanları ister nesne depolama olsun, çeşitli veri katmanlarındaki sorguları optimize etme yeteneğiyle öne çıkıyor. Yalnızca gereken temel verileri almak için sorguları aşağı iterek veri aktarımını en aza indirmeyi amaçlamaktadır. Bu, Trino'nun farklı kaynaklardan gelen veri kümelerini birleştirmesine, daha fazla işlem yapmasına veya kesin sonuçları verimli bir şekilde döndürmesine olanak tanır.
MinIO, endüstri lideri ölçeklenebilirliği ve performansı nedeniyle Trino ile son derece iyi bir şekilde eşleşir. AI/ML ve analitik genelinde önemli iş yüklerini yönetebilme becerisine sahip MinIO, Trino sorgularını ve ötesini zahmetsizce destekler. Son kıyaslamalarda MinIO, yalnızca 32 düğümde GET işlemleri için etkileyici 325 GiB/s (349 GB/s) ve PUT işlemleri için 165 GiB/s (177 GB/s) elde etti. Bu olağanüstü performans, MinIO'da depolanan verilerin kolayca erişilebilir kalmasını sağlar ve MinIO'yu, darboğaz olmadan Trino için güvenilir ve yüksek performanslı bir seçim haline getirir.
MinIO ve Trino hakkında sorularınız varsa bizimle iletişime geçmeyi unutmayın.