मिनियो का उपयोग अक्सर AI/ML वर्कलोड, डेटालेक से लेकर लेक हाउस तक डेटा स्टोर करने के लिए किया जाता है, चाहे वह ड्रेमियो, हाइव, हुडी, स्टाररॉक्स या कोई अन्य दर्जन या उससे अधिक बेहतरीन AI/ML टूल समाधान हों। मिनियो प्राथमिक स्टोरेज लेयर के रूप में उपयोग किए जाने पर अधिक कुशल होता है, जो संग्रहीत डेटा के लिए स्वामित्व की कुल लागत को कम करता है, साथ ही आपको मिनियो में डेटा लिखने का अतिरिक्त लाभ मिलता है।
इस ट्यूटोरियल में, हम एक सुसंगत प्रणाली तैनात करेंगे जो मिनियो में संग्रहीत बड़े डेटासेट में वितरित SQL क्वेरी की अनुमति देता है, जिसमें ट्रिनो हाइव मेटास्टोर से मेटाडेटा और रेडिस से टेबल स्कीमा का लाभ उठाता है।
यहां विभिन्न घटक दिए गए हैं और वे हमारी सेटअप प्रक्रिया में क्या करते हैं, हम आगे इस पर चर्चा करेंगे।
शुरू करने से पहले, सुनिश्चित करें कि आपके पास अपने Kubernetes क्लस्टर के प्रबंधन के लिए आवश्यक उपकरण स्थापित हैं:
Kubernetes पर Trino को तैनात करने के लिए आवश्यक संसाधनों तक पहुंचने के लिए, विशिष्ट GitHub रिपॉजिटरी को क्लोन करें और उपयुक्त निर्देशिका पर नेविगेट करें:
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Kubernetes में नामस्थान अनुप्रयोगों के लिए पृथक वातावरण प्रदान करते हैं। ट्रिनो के परिनियोजन को समाहित करने के लिए एक नया नामस्थान बनाएँ:
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
रेडिस ट्रिनो द्वारा उपयोग किए जाने वाले टेबल स्कीमा को संग्रहीत करेगा। इन स्कीमा को कुबेरनेट्स सीक्रेट से सुरक्षित करें। निम्न कमांड एक सामान्य सीक्रेट बनाता है, JSON फ़ाइल से डेटा सोर्स करता है:
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
हेल्म रिपॉजिटरी प्री-पैकेज्ड चार्ट प्रदान करते हैं जो एप्लिकेशन परिनियोजन को सरल बनाते हैं। अपने हेल्म कॉन्फ़िगरेशन में बिटनामी और ट्रिनो रिपॉजिटरी जोड़ें:
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
ट्रिनो नामस्थान के भीतर मिनियो तैयार करें।
kubectl minio init -n trino
डेटा स्टोरेज के लिए मल्टी-टेनेंट आर्किटेक्चर सेट अप करें। नीचे दिया गया उदाहरण चार सर्वर, चार स्टोरेज वॉल्यूम और 4 GiB की क्षमता वाला “टेनेंट-1” नामक एक टेनेंट बनाता है:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
ट्रिनो टेबल मेटाडेटा को संग्रहीत करने के लिए हाइव मेटास्टोर का उपयोग करता है। मेटाडेटा को प्रबंधित करने के लिए PostgreSQL को तैनात करें, फिर हाइव मेटास्टोर को सेट अप करें:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
ट्रिनो नामस्थान के भीतर हाइव मेटास्टोर को तैनात करने के लिए पूर्व-कॉन्फ़िगर किए गए हेल्म चार्ट का उपयोग करें:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
ट्रिनो और मिनिओ बड़े डेटासेट में वितरित SQL क्वेरी के लिए एक शक्तिशाली संयोजन बनाते हैं। सिस्टम को तैनात और कॉन्फ़िगर करने के लिए इन चरणों का पालन करें।
रेडिस एक हाई-स्पीड, इन-मेमोरी डेटा स्टोर है जिसका उपयोग बेहतर क्वेरी प्रदर्शन के लिए ट्रिनो टेबल स्कीमा को होल्ड करने के लिए किया जाता है। इसे हेल्म चार्ट का उपयोग करके ट्रिनो नेमस्पेस में तैनात करें:
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
ट्रिनो को वितरित SQL क्वेरी इंजन के रूप में तैनात करें जो मिनियो और अन्य डेटा स्रोतों से कनेक्ट होगा:
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
ट्रिनो नामस्थान में पॉड्स को सूचीबद्ध करके पुष्टि करें कि सभी घटक सही ढंग से चल रहे हैं:
kubectl get pods -n trino
सुरक्षा समीक्षा और समायोजन
आवश्यकतानुसार सुरक्षा सेटिंग की समीक्षा करें और उसे समायोजित करें। S3 कनेक्शन के लिए SSL प्रमाणपत्र सत्यापन को अक्षम करने के लिए, values.yaml फ़ाइल के अतिरिक्त कैटलॉग अनुभाग को निम्न प्रॉपर्टी से अपडेट करें:
hive.s3.ssl.enabled=false
टेनेंट की MinIO सेवा पर पोर्ट फॉरवर्ड करें, जिससे स्थानीय पहुंच सक्षम हो सके:
kubectl port-forward svc/minio -n trino 9443:443
1. उपनाम बनाएँ: MinIO परिनियोजन से क्रेडेंशियल्स का उपयोग करके टेनेंट के लिए एक उपनाम स्थापित करें:
mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure
2. बकेट बनाएँ: एक नई बकेट बनाएँ जिसका उपयोग ट्रिनो करेगा
mc mb my-minio/tiny --insecure
1. पॉड नाम प्राप्त करें: ट्रिनो समन्वयक पॉड का नाम प्राप्त करें:
export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
2. पोर्ट फॉरवर्ड: स्थानीय पोर्ट 8080 को समन्वयक पॉड पर फॉरवर्ड करें:
kubectl port-forward $POD_NAME 8080:8080
3. एक्सेस यूआई: http://127.0.0.1:8080 पर जाकर अपने ब्राउज़र में ट्रिनो यूआई का उपयोग करें।
ट्रिनो समन्वयक पॉड तक पहुंचें और कमांड लाइन के माध्यम से क्वेरी करना शुरू करें:
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)
बकेट बनाने के बाद, mc कमांड-लाइन टूल से सामग्री को सूचीबद्ध करके पुष्टि करें कि डेटा MinIO में संग्रहीत है। निम्न कमांड का उपयोग करें:
mc ls my-minio/tiny --insecure
यह इतना सरल है!
कॉन्फ़िगरेशन समस्याओं का निवारण करते समय, विशेष रूप से सुरक्षा से संबंधित समस्याओं का, उचित सेटिंग्स सुनिश्चित करने के लिए प्रत्येक घटक के लिए values.yaml फ़ाइलों की गहन समीक्षा करें।
ट्रिनो विभिन्न डेटा परतों में क्वेरीज़ को अनुकूलित करने की अपनी क्षमता के लिए जाना जाता है, चाहे वह विशेष डेटाबेस हो या ऑब्जेक्ट स्टोरेज। इसका उद्देश्य केवल आवश्यक डेटा को पुनः प्राप्त करने के लिए क्वेरीज़ को नीचे धकेलकर डेटा स्थानांतरण को कम करना है। यह ट्रिनो को विभिन्न स्रोतों से डेटासेट को जोड़ने, आगे की प्रक्रिया करने या कुशलतापूर्वक सटीक परिणाम देने में सक्षम बनाता है।
MinIO अपनी उद्योग-अग्रणी स्केलेबिलिटी और प्रदर्शन के कारण ट्रिनो के साथ असाधारण रूप से अच्छी तरह से जुड़ता है। AI/ML और एनालिटिक्स में महत्वपूर्ण कार्यभार संभालने की क्षमता के साथ, MinIO आसानी से ट्रिनो क्वेरीज़ और उससे आगे का समर्थन करता है। हाल के बेंचमार्क में, MinIO ने केवल 32 नोड्स पर GET संचालन के लिए 325 GiB/s (349 GB/s) और PUT संचालन के लिए 165 GiB/s (177 GB/s) की प्रभावशाली गति हासिल की। यह उल्लेखनीय प्रदर्शन सुनिश्चित करता है कि MinIO में संग्रहीत डेटा आसानी से सुलभ रहता है, जिससे ट्रिनो के लिए MinIO एक विश्वसनीय और उच्च प्रदर्शन वाला विकल्प बन जाता है, बिना किसी बाधा के।
यदि आपके पास मिनियो और ट्रिनो पर कोई प्रश्न हैं तो कृपया हमसे संपर्क करें