paint-brush
MinIO ve Trino'nun Kubernetes ile Dağıtılmasıile@minio
4,960 okumalar
4,960 okumalar

MinIO ve Trino'nun Kubernetes ile Dağıtılması

ile MinIO6m2024/05/23
Read on Terminal Reader

Çok uzun; Okumak

AI/ML ve analitik genelinde önemli iş yüklerini yönetebilme becerisine sahip MinIO, Trino sorgularını ve ötesini zahmetsizce destekler.
featured image - MinIO ve Trino'nun Kubernetes ile Dağıtılması
MinIO HackerNoon profile picture
0-item
1-item



Trino (eski adıyla Presto) bir SQL veritabanı değil, bir SQL sorgu motorudur. Trino, yalnızca tek bir şeye odaklanmak için SQL veritabanının depolama bileşeninden kaçındı: ultra hızlı SQL sorgulama. Trino yalnızca bir sorgu motorudur ve veri saklamaz. Bunun yerine Trino, çeşitli veritabanlarıyla veya doğrudan nesne depolama alanıyla etkileşime girer. Trino, ilettiğiniz SQL sorgusunu ayrıştırır ve analiz eder, veri kaynaklarını içeren bir sorgu yürütme planı oluşturur ve optimize eder ve ardından bağlandıkları temel veritabanlarını akıllıca sorgulayabilen çalışan düğümlerini planlar.


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; değişmez , versiyonlanmış ve tarafından korunuyor silme kodlaması . Ayrıca verilerin MinIO nesne depolama alanına kaydedilmesi, verilerin diğer bulut yerel makine öğrenimi ve analiz uygulamaları tarafından da kullanılabilir olmasını sağlar.


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. Gevşek !