paint-brush
Cách triển khai MinIO và Trino với Kubernetestừ tác giả@minio
4,760 lượt đọc
4,760 lượt đọc

Cách triển khai MinIO và Trino với Kubernetes

từ tác giả MinIO6m2024/05/23
Read on Terminal Reader

dài quá đọc không nổi

Với khả năng xử lý khối lượng công việc đáng kể trên AI/ML và phân tích, MinIO dễ dàng hỗ trợ các truy vấn Trino và hơn thế nữa.
featured image - Cách triển khai MinIO và Trino với Kubernetes
MinIO HackerNoon profile picture
0-item
1-item



trino (trước đây là Presto) là một công cụ truy vấn SQL - không phải cơ sở dữ liệu SQL. Trino đã tránh thành phần lưu trữ của cơ sở dữ liệu SQL để chỉ tập trung vào một thứ - truy vấn SQL cực nhanh. Trino chỉ là một công cụ truy vấn và không lưu trữ dữ liệu. Thay vào đó, Trino tương tác với nhiều cơ sở dữ liệu khác nhau hoặc trực tiếp trên bộ lưu trữ đối tượng. Trino phân tích và phân tích truy vấn SQL mà bạn chuyển vào, tạo và tối ưu hóa kế hoạch thực hiện truy vấn bao gồm các nguồn dữ liệu, sau đó lên lịch cho các nút công nhân có khả năng truy vấn cơ sở dữ liệu cơ bản mà chúng kết nối một cách thông minh.


MinIO thường được sử dụng để lưu trữ dữ liệu từ Khối lượng công việc AI/ML, Datalakes đến các hồ chứa cho dù đó là Dremio, Hive, Hudi, StarRocks hay bất kỳ giải pháp công cụ AI/ML tuyệt vời nào khác. MinIO hiệu quả hơn khi được sử dụng làm lớp lưu trữ chính, giúp giảm tổng chi phí sở hữu đối với dữ liệu được lưu trữ, đồng thời bạn còn nhận được các lợi ích bổ sung khi ghi dữ liệu vào MinIO. bất biến , đã được phiên bản và được bảo vệ bởi xóa mã hóa . Ngoài ra, việc lưu dữ liệu vào bộ lưu trữ đối tượng MinIO giúp dữ liệu có sẵn cho các ứng dụng phân tích và học máy gốc trên nền tảng đám mây khác.


Trong hướng dẫn này, chúng tôi sẽ triển khai một hệ thống gắn kết cho phép truy vấn SQL phân tán trên các tập dữ liệu lớn được lưu trữ trong Minio, với Trino tận dụng siêu dữ liệu từ Hive Metastore và các lược đồ bảng từ Redis.

Các thành phần

Dưới đây là các thành phần khác nhau và chức năng của chúng trong quá trình thiết lập mà chúng ta sẽ tìm hiểu tiếp theo.


  • Minio: Minio có thể được sử dụng để lưu trữ các tập dữ liệu lớn, giống như các tập dữ liệu thường được Trino phân tích.
  • Hive Metastore : Hive Metastore là dịch vụ lưu trữ siêu dữ liệu cho các bảng Hive (như lược đồ bảng). Trino có thể sử dụng Hive Metastore để xác định lược đồ của các bảng khi truy vấn tập dữ liệu.
  • PostgreSQL for Hive Metastore: Đây là phần phụ trợ cơ sở dữ liệu cho Hive Metastore. Đó là nơi siêu dữ liệu thực sự được lưu trữ.
  • Redis: Trong thiết lập này, Redis để lưu trữ các lược đồ bảng cho Trino.
  • Trino: Trino (trước đây gọi là Presto) là một công cụ truy vấn SQL phân tán, hiệu suất cao. Nó cho phép truy vấn dữ liệu trên nhiều nguồn dữ liệu khác nhau như cơ sở dữ liệu SQL, cơ sở dữ liệu NoSQL và thậm chí cả bộ lưu trữ đối tượng như Minio.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt các công cụ cần thiết để quản lý cụm Kubernetes của mình:


  • kubectl : Công cụ dòng lệnh chính để quản lý cụm Kubernetes. Bạn có thể sử dụng nó để kiểm tra, thao tác và quản lý tài nguyên cụm.
  • helm : Trình quản lý gói cho Kubernetes. Helm cho phép bạn triển khai, nâng cấp và quản lý các ứng dụng trong cụm của mình bằng các biểu đồ được xác định trước.

Nhân bản kho lưu trữ

Để truy cập các tài nguyên cần thiết để triển khai Trino trên Kubernetes, hãy sao chép kho GitHub cụ thể và điều hướng đến thư mục thích hợp:


 git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes

Tạo không gian tên Kubernetes

Không gian tên trong Kubernetes cung cấp môi trường biệt lập cho các ứng dụng. Tạo một không gian tên mới cho Trino để gói gọn quá trình triển khai của nó:


 kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -

Bí mật định nghĩa bảng Redis

Redis sẽ lưu trữ các lược đồ bảng được Trino sử dụng. Bảo mật các lược đồ này bằng Bí mật Kubernetes. Lệnh sau tạo một bí mật chung, tìm nguồn dữ liệu từ tệp JSON:


 kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true


Thêm kho lưu trữ Helm

Kho lưu trữ Helm cung cấp các biểu đồ đóng gói sẵn giúp đơn giản hóa việc triển khai ứng dụng. Thêm kho lưu trữ Bitnami và Trino vào cấu hình Helm của bạn:


 helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true

Triển khai MinIO để lưu trữ dữ liệu

Khởi tạo MinIO

Chuẩn bị MinIO trong không gian tên Trino.


 kubectl minio init -n trino

Tạo đối tượng thuê MinIO

Thiết lập kiến trúc nhiều người thuê để lưu trữ dữ liệu. Ví dụ bên dưới tạo một đối tượng thuê có tên là “tenant-1” với bốn máy chủ, bốn ổ lưu trữ và dung lượng 4 GiB:


 kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino

Thiết lập Hive Metastore

Trino sử dụng Hive Metastore để lưu trữ siêu dữ liệu bảng. Triển khai PostgreSQL để quản lý siêu dữ liệu, sau đó thiết lập Hive Metastore:

Cài đặt PostgreSQL


 helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml

Triển khai Hive Metastore

Sử dụng biểu đồ Helm được cấu hình sẵn để triển khai Hive Metastore trong không gian tên Trino:


 helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore

Triển khai MinIO và Trino với Kubernetes

Trino và MinIO tạo ra sự kết hợp mạnh mẽ để truy vấn SQL phân tán trên các tập dữ liệu lớn. Thực hiện theo các bước sau để triển khai và cấu hình hệ thống.

Triển khai Redis để lưu trữ các lược đồ bảng

Redis là kho lưu trữ dữ liệu trong bộ nhớ, tốc độ cao, dùng để chứa các lược đồ bảng Trino nhằm nâng cao hiệu suất truy vấn. Triển khai nó trong không gian tên Trino bằng biểu đồ Helm:


 helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml


Triển khai Trino

Triển khai Trino làm công cụ truy vấn SQL phân tán sẽ kết nối với MinIO và các nguồn dữ liệu khác:


 helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml

Xác minh triển khai

Xác nhận rằng tất cả các thành phần đang chạy chính xác bằng cách liệt kê các nhóm trong không gian tên Trino:


 kubectl get pods -n trino


Đánh giá và điều chỉnh bảo mật


Xem xét và điều chỉnh cài đặt bảo mật nếu cần. Để tắt xác thực chứng chỉ SSL cho các kết nối S3, hãy cập nhật phần AddedCatalogs của tệp value.yaml với thuộc tính sau:


 hive.s3.ssl.enabled=false

Kiểm tra

Chuyển tiếp cổng tới dịch vụ người thuê MinIO

Chuyển tiếp tới dịch vụ MinIO của đối tượng thuê, cho phép truy cập cục bộ:


 kubectl port-forward svc/minio -n trino 9443:443

Tạo bí danh và nhóm cho Trino

1. Tạo bí danh: Thiết lập bí danh cho đối tượng thuê bằng thông tin đăng nhập từ quá trình triển khai MinIO:


 mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure


2. Create Bucket: Tạo một Bucket mới mà Trino sẽ sử dụng


 mc mb my-minio/tiny --insecure

Truy cập Trino UI qua Port Forward

1. Lấy tên Pod: Lấy tên của nhóm điều phối viên Trino:


 export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")


2. Chuyển tiếp cổng: Chuyển tiếp cổng cục bộ 8080 tới nhóm điều phối:


 kubectl port-forward $POD_NAME 8080:8080


3. Truy cập UI: Sử dụng Trino UI trong trình duyệt của bạn bằng cách truy cập http://127.0.0.1:8080.



Truy vấn Trino qua CLI

Truy cập nhóm điều phối Trino và bắt đầu truy vấn thông qua dòng lệnh:


 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)


Xác nhận dữ liệu trong nhóm MinIO

Sau khi tạo nhóm, hãy xác nhận rằng dữ liệu được lưu trữ trong MinIO bằng cách liệt kê nội dung bằng công cụ dòng lệnh mc. Sử dụng lệnh sau:


 mc ls my-minio/tiny --insecure


Nó đơn giản như vậy!

suy nghĩ cuối cùng

Khi khắc phục sự cố cấu hình, đặc biệt là các vấn đề liên quan đến bảo mật, hãy xem xét kỹ lưỡng các tệp value.yaml cho từng thành phần để đảm bảo cài đặt phù hợp.


Trino nổi bật nhờ khả năng tối ưu hóa các truy vấn trên nhiều lớp dữ liệu khác nhau, cho dù là cơ sở dữ liệu chuyên dụng hay lưu trữ đối tượng. Nó nhằm mục đích giảm thiểu việc truyền dữ liệu bằng cách đẩy các truy vấn xuống để chỉ lấy những dữ liệu cần thiết. Điều này cho phép Trino kết hợp các tập dữ liệu từ các nguồn khác nhau, thực hiện xử lý thêm hoặc trả về kết quả chính xác một cách hiệu quả.


MinIO kết hợp đặc biệt tốt với Trino nhờ khả năng mở rộng và hiệu suất dẫn đầu ngành. Với khả năng xử lý khối lượng công việc đáng kể trên AI/ML và phân tích, MinIO dễ dàng hỗ trợ các truy vấn Trino và hơn thế nữa. Trong các điểm chuẩn gần đây, MinIO đã đạt được tốc độ ấn tượng 325 GiB/s (349 GB/s) cho các hoạt động GET và 165 GiB/s (177 GB/s) cho các hoạt động PUT chỉ trên 32 nút. Hiệu suất vượt trội này đảm bảo rằng dữ liệu được lưu trữ trong MinIO vẫn có thể truy cập dễ dàng, khiến MinIO trở thành sự lựa chọn đáng tin cậy và hiệu suất cao cho Trino mà không trở thành nút thắt cổ chai.


Nếu bạn có bất kỳ câu hỏi nào về MinIO và Trino, hãy liên hệ với chúng tôi trên chùng xuống !