MinIO প্রায়শই এআই/এমএল ওয়ার্কলোড, ডাটালেক থেকে লেক হাউসে ডেটা সঞ্চয় করতে ব্যবহার করা হয় তা সে Dremio, Hive, Hudi, StarRocks বা অন্য ডজনের মধ্যে যেকোনও বা আরও দুর্দান্ত AI/ML টুলস সলিউশন। প্রাথমিক সঞ্চয়স্থান স্তর হিসাবে ব্যবহৃত হলে MinIO আরও দক্ষ, যা সংরক্ষিত ডেটার জন্য মালিকানার মোট খরচ হ্রাস করে, এছাড়াও আপনি MinIO-তে ডেটা লেখার অতিরিক্ত সুবিধাগুলি পান
এই টিউটোরিয়ালে, আমরা একটি সমন্বিত সিস্টেম স্থাপন করব যা মিনিওতে সংরক্ষিত বৃহৎ ডেটাসেটগুলিতে বিতরণ করা SQL কোয়েরি করার অনুমতি দেয়, ট্রিনো হাইভ মেটাস্টোর থেকে মেটাডেটা এবং রেডিস থেকে টেবিল স্কিমা ব্যবহার করে।
উপাদান
এখানে বিভিন্ন উপাদান রয়েছে এবং সেগুলি আমাদের সেটআপ প্রক্রিয়াতে কী করে আমরা পরবর্তীতে যাবো।
- Minio: Minio বড় ডেটাসেট সংরক্ষণ করতে ব্যবহার করা যেতে পারে, যেমন সাধারণত Trino দ্বারা বিশ্লেষণ করা হয়।
- Hive Metastore : Hive Metastore হল একটি পরিষেবা যা Hive টেবিলের জন্য মেটাডেটা সংরক্ষণ করে (যেমন টেবিল স্কিমা)। Trino ডেটাসেট অনুসন্ধান করার সময় টেবিলের স্কিমা নির্ধারণ করতে Hive Metastore ব্যবহার করতে পারে।
- হাইভ মেটাস্টোরের জন্য পোস্টগ্রেএসকিউএল: এটি হাইভ মেটাস্টোরের জন্য ডাটাবেস ব্যাকএন্ড। এটা যেখানে মেটাডেটা আসলে সংরক্ষিত হয়.
- Redis: এই সেটআপে, Trino-এর জন্য টেবিল স্কিমা সংরক্ষণের জন্য Redis।
- Trino: Trino (পূর্বে Presto নামে পরিচিত) একটি উচ্চ-কর্মক্ষমতা, বিতরণ করা SQL কোয়েরি ইঞ্জিন। এটি SQL ডাটাবেস, NoSQL ডাটাবেস, এমনকি Minio-এর মতো অবজেক্ট স্টোরেজের মতো বিভিন্ন ডেটা উত্স জুড়ে ডেটা অনুসন্ধানের অনুমতি দেয়।
পূর্বশর্ত
শুরু করার আগে, নিশ্চিত করুন যে আপনার Kubernetes ক্লাস্টার পরিচালনার জন্য আপনার প্রয়োজনীয় সরঞ্জাম ইনস্টল করা আছে:
- kubectl : Kubernetes ক্লাস্টার পরিচালনার জন্য প্রাথমিক কমান্ড-লাইন টুল। আপনি ক্লাস্টার সংস্থানগুলি পরিদর্শন, ম্যানিপুলেট এবং পরিচালনা করতে এটি ব্যবহার করতে পারেন।
- হেলম : কুবারনেটসের জন্য একটি প্যাকেজ ম্যানেজার। হেলম আপনাকে পূর্ব-নির্ধারিত চার্ট ব্যবহার করে আপনার ক্লাস্টারের মধ্যে অ্যাপ্লিকেশনগুলি স্থাপন, আপগ্রেড এবং পরিচালনা করার অনুমতি দেয়।
সংগ্রহস্থল ক্লোনিং
Kubernetes এ Trino স্থাপনের জন্য প্রয়োজনীয় সংস্থানগুলি অ্যাক্সেস করতে, নির্দিষ্ট GitHub সংগ্রহস্থল ক্লোন করুন এবং উপযুক্ত ডিরেক্টরিতে নেভিগেট করুন:
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
কুবারনেটস নেমস্পেস সৃষ্টি
Kubernetes-এ নামস্থান অ্যাপ্লিকেশনের জন্য বিচ্ছিন্ন পরিবেশ প্রদান করে। Trino এর ডিপ্লয়মেন্ট এনক্যাপসুলেট করার জন্য একটি নতুন নামস্থান তৈরি করুন:
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
Redis টেবিল সংজ্ঞা গোপন
Redis Trino দ্বারা ব্যবহৃত টেবিল স্কিমা সংরক্ষণ করবে। কুবারনেটস সিক্রেট দিয়ে এই স্কিমাগুলি সুরক্ষিত করুন। নিম্নলিখিত কমান্ডটি একটি জেনেরিক গোপন তৈরি করে, একটি 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
ডেটা স্টোরেজের জন্য MinIO স্থাপন করুন
MinIO আরম্ভ করুন
Trino নামস্থানের মধ্যে MinIO প্রস্তুত করুন।
kubectl minio init -n trino
MinIO ভাড়াটে তৈরি করুন
ডেটা স্টোরেজের জন্য একটি মাল্টি-টেন্যান্ট আর্কিটেকচার সেট আপ করুন। নীচের উদাহরণটি চারটি সার্ভার, চারটি স্টোরেজ ভলিউম এবং 4 GiB ক্ষমতা সহ "টেন্যান্ট-1" নামে একটি ভাড়াটে তৈরি করেছে:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
হাইভ মেটাস্টোর সেট আপ করুন
Trino টেবিলের মেটাডেটা সঞ্চয় করতে Hive Metastore ব্যবহার করে। মেটাডেটা পরিচালনা করতে PostgreSQL স্থাপন করুন, তারপর Hive Metastore সেট আপ করুন:
PostgreSQL ইনস্টল করুন
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
হাইভ মেটাস্টোর স্থাপন করুন
Trino নামস্থানের মধ্যে Hive Metastore স্থাপন করতে একটি পূর্ব-কনফিগার করা হেলম চার্ট ব্যবহার করুন:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Kubernetes এর সাথে MinIO এবং Trino স্থাপন করা হচ্ছে
Trino এবং MinIO বড় ডেটাসেট জুড়ে বিতরণ করা SQL কোয়েরির জন্য একটি শক্তিশালী সমন্বয় তৈরি করে। সিস্টেম স্থাপন এবং কনফিগার করতে এই পদক্ষেপগুলি অনুসরণ করুন।
টেবিল স্কিমা স্টোর করতে Redis স্থাপন করুন
রেডিস হল একটি উচ্চ-গতির, ইন-মেমরি ডেটা স্টোর যা বর্ধিত ক্যোয়ারী কর্মক্ষমতার জন্য Trino টেবিল স্কিমা ধরে রাখতে ব্যবহৃত হয়। একটি হেলম চার্ট ব্যবহার করে Trino নামস্থানে এটি স্থাপন করুন:
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
Trino স্থাপন করুন
বিতরণ করা SQL ক্যোয়ারী ইঞ্জিন হিসাবে Trino স্থাপন করুন যা MinIO এবং অন্যান্য ডেটা উত্সের সাথে সংযোগ করবে:
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
স্থাপনা যাচাই করুন
Trino নামস্থানে পড তালিকাবদ্ধ করে সমস্ত উপাদান সঠিকভাবে চলছে তা নিশ্চিত করুন:
kubectl get pods -n trino
নিরাপত্তা পর্যালোচনা এবং সমন্বয়
প্রয়োজন অনুযায়ী নিরাপত্তা সেটিংস পর্যালোচনা এবং সামঞ্জস্য করুন। S3 সংযোগের জন্য SSL শংসাপত্রের বৈধতা নিষ্ক্রিয় করতে, নিম্নলিখিত বৈশিষ্ট্য সহ values.yaml ফাইলের অতিরিক্ত ক্যাটালগ বিভাগটি আপডেট করুন:
hive.s3.ssl.enabled=false
পরীক্ষামূলক
MinIO ভাড়াটে পরিষেবাতে পোর্ট ফরোয়ার্ড
স্থানীয় অ্যাক্সেস সক্ষম করে ভাড়াটেদের MinIO পরিষেবাতে পোর্ট ফরওয়ার্ড করুন:
kubectl port-forward svc/minio -n trino 9443:443
Trino এর জন্য উপনাম এবং বালতি তৈরি করুন
1. উপনাম তৈরি করুন: MinIO স্থাপনার শংসাপত্রগুলি ব্যবহার করে ভাড়াটেদের জন্য একটি উপনাম স্থাপন করুন:
mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure
2. বালতি তৈরি করুন: একটি নতুন বালতি তৈরি করুন যা Trino ব্যবহার করবে
mc mb my-minio/tiny --insecure
পোর্ট ফরওয়ার্ডের মাধ্যমে Trino UI অ্যাক্সেস করুন
1. পডের নাম প্রাপ্ত করুন: Trino সমন্বয়কারী পডের নাম পুনরুদ্ধার করুন:
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. UI অ্যাক্সেস করুন: http://127.0.0.1:8080-এ গিয়ে আপনার ব্রাউজারে Trino UI ব্যবহার করুন।
CLI এর মাধ্যমে Trino জিজ্ঞাসা করুন
Trino সমন্বয়কারী পড অ্যাক্সেস করুন এবং কমান্ড লাইনের মাধ্যমে অনুসন্ধান শুরু করুন:
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 বালতিতে ডেটা নিশ্চিত করুন
বালতি তৈরি করার পরে, mc কমান্ড-লাইন টুলের সাথে বিষয়বস্তু তালিকাভুক্ত করে MinIO-তে ডেটা সংরক্ষণ করা হয়েছে তা নিশ্চিত করুন। নিম্নলিখিত কমান্ড ব্যবহার করুন:
mc ls my-minio/tiny --insecure
এটা ঐটার মতই সহজ!
সর্বশেষ ভাবনা
কনফিগারেশন সংক্রান্ত সমস্যাগুলির সমাধান করার সময়, বিশেষ করে নিরাপত্তা সংক্রান্ত সমস্যাগুলি, যথাযথ সেটিংস নিশ্চিত করতে প্রতিটি উপাদানের জন্য values.yaml ফাইলগুলি পুঙ্খানুপুঙ্খভাবে পর্যালোচনা করুন।
বিশেষায়িত ডাটাবেস বা অবজেক্ট স্টোরেজ যাই হোক না কেন, বিভিন্ন ডেটা স্তর জুড়ে প্রশ্নগুলি অপ্টিমাইজ করার ক্ষমতার জন্য Trino আলাদা। এটি শুধুমাত্র প্রয়োজনীয় ডেটা পুনরুদ্ধার করার জন্য কোয়েরিগুলিকে নিচে ঠেলে ডেটা স্থানান্তর হ্রাস করার লক্ষ্য রাখে। এটি Trino কে বিভিন্ন উত্স থেকে ডেটাসেটে যোগদান করতে, আরও প্রক্রিয়াকরণ করতে, বা দক্ষতার সাথে সুনির্দিষ্ট ফলাফল ফেরত দিতে সক্ষম করে।
MinIO তার শিল্প-নেতৃস্থানীয় স্কেলেবিলিটি এবং কর্মক্ষমতার কারণে Trino-এর সাথে ব্যতিক্রমীভাবে যুক্ত। AI/ML এবং বিশ্লেষণ জুড়ে উল্লেখযোগ্য কাজের চাপ সামলানোর ক্ষমতা সহ, MinIO অনায়াসে Trino কোয়েরি এবং এর বাইরেও সমর্থন করে। সাম্প্রতিক বেঞ্চমার্কে, MinIO GET অপারেশনের জন্য একটি চিত্তাকর্ষক 325 GiB/s (349 GB/s) এবং PUT অপারেশনের জন্য 165 GiB/s (177 GB/s) মাত্র 32টি নোড জুড়ে অর্জন করেছে। এই অসাধারণ পারফরম্যান্স নিশ্চিত করে যে MinIO-তে সংরক্ষিত ডেটা সহজে অ্যাক্সেসযোগ্য থাকে, MinIO কে Trino-এর জন্য একটি নির্ভরযোগ্য এবং উচ্চ-কার্যকারি পছন্দ করে তোলে।
MinIO এবং Trino সম্পর্কে আপনার কোন প্রশ্ন থাকলে আমাদের সাথে যোগাযোগ করতে ভুলবেন না