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.
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.
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.
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:
Để 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
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 -
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
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
Chuẩn bị MinIO trong không gian tên Trino.
kubectl minio init -n trino
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
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:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
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
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.
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 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 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
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
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
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 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)
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!
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