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.
Bileşenler
İşte farklı bileşenler ve bir sonraki adımda ele alacağımız kurulum sürecimizde bunların yaptıkları.
- Minio: Minio, genellikle Trino tarafından analiz edilenler gibi büyük veri kümelerini depolamak için kullanılabilir.
- Hive Metastore : Hive Metastore, Hive tabloları için meta verileri (tablo şeması gibi) depolayan bir hizmettir. Trino, veri kümelerini sorgularken tabloların şemasını belirlemek için Hive Metastore'u kullanabilir.
- Hive Metastore için PostgreSQL: Bu, Hive Metastore'un veritabanı arka ucudur. Meta verilerin gerçekte depolandığı yerdir.
- Redis: Bu kurulumda, Trino'ya yönelik tablo şemalarını depolamak için Redis.
- Trino: Trino (eski adıyla Presto), yüksek performanslı, dağıtılmış bir SQL sorgu motorudur. SQL veritabanları, NoSQL veritabanları ve hatta Minio gibi nesne depolama gibi çeşitli veri kaynaklarında verilerin sorgulanmasına olanak tanır.
Önkoşullar
Başlamadan önce Kubernetes kümenizi yönetmek için gerekli araçların kurulu olduğundan emin olun:
- kubectl : Kubernetes kümelerini yönetmek için birincil komut satırı aracı. Küme kaynaklarını incelemek, değiştirmek ve yönetmek için kullanabilirsiniz.
- helm : Kubernetes için bir paket yöneticisi. Helm, önceden tanımlanmış grafikleri kullanarak kümenizdeki uygulamaları dağıtmanıza, yükseltmenize ve yönetmenize olanak tanır.
Depo Klonlama
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 Ad Alanı Oluşturma
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 Tablo Tanımı Gizli Anahtarı
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
Dümen Depoları Ekle
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
Veri Depolama için MinIO'yu Dağıtın
MinIO'yu başlat
MinIO'yu Trino ad alanı içinde hazırlayın.
kubectl minio init -n trino
MinIO Kiracısını Oluşturun
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
Hive Metastore'u Ayarlama
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:
PostgreSQL'i yükleyin
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Hive Metastore'u dağıtma
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
MinIO ve Trino'yu Kubernetes ile dağıtma
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.
Tablo Şemalarını Depolamak için Redis'i Dağıtın
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 dağıt
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
Dağıtımı Doğrulayın
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
Test yapmak
MinIO Kiracı Hizmetine Bağlantı Noktası İletme
Yerel erişimi etkinleştirerek kiracının MinIO hizmetine bağlantı noktası iletin:
kubectl port-forward svc/minio -n trino 9443:443
Trino için Takma Ad ve Paket Oluşturun
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
Bağlantı Noktası Yönlendirme aracılığıyla Trino kullanıcı arayüzüne erişin
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'yu CLI aracılığıyla sorgulama
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)
MinIO Paketindeki Verileri Doğrulayın
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!
Son düşünceler
Ö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.