MinIO часто используется для хранения данных из рабочих нагрузок AI/ML, озер данных и озерных домов, будь то Dremio, Hive, Hudi, StarRocks или любой другой дюжины или около того замечательных инструментов AI/ML. MinIO более эффективен при использовании в качестве основного уровня хранения, что снижает совокупную стоимость владения хранимыми данными, а также дает дополнительные преимущества записи данных в MinIO, т.е.
В этом руководстве мы развернем целостную систему, которая позволит выполнять распределенные запросы SQL к большим наборам данных, хранящимся в Minio, при этом Trino будет использовать метаданные из Hive Metastore и схемы таблиц из Redis.
Ниже мы рассмотрим различные компоненты и то, что они делают в процессе установки.
Прежде чем начать, убедитесь, что у вас установлены необходимые инструменты для управления кластером Kubernetes:
Чтобы получить доступ к ресурсам, необходимым для развертывания Trino в Kubernetes, клонируйте конкретный репозиторий 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 будет хранить схемы таблиц, используемые Trino. Защитите эти схемы с помощью секрета Kubernetes. Следующая команда создает общий секрет, получая данные из файла JSON:
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Репозитории Helm предоставляют предварительно упакованные диаграммы, которые упрощают развертывание приложений. Добавьте репозитории Bitnami и Trino в вашу конфигурацию Helm:
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
Подготовьте MinIO в пространстве имен Trino.
kubectl minio init -n trino
Настройте мультитенантную архитектуру для хранения данных. В приведенном ниже примере создается арендатор с именем «тенант-1» с четырьмя серверами, четырьмя томами хранения и емкостью 4 ГиБ:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Trino использует Hive Metastore для хранения метаданных таблиц. Разверните PostgreSQL для управления метаданными, затем настройте Hive Metastore:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Используйте предварительно настроенную диаграмму Helm для развертывания Hive Metastore в пространстве имен Trino:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Trino и MinIO создают мощную комбинацию для распределенных запросов SQL к большим наборам данных. Выполните следующие действия, чтобы развернуть и настроить систему.
Redis — это высокоскоростное хранилище данных в памяти, используемое для хранения схем таблиц Trino для повышения производительности запросов. Разверните его в пространстве имен Trino, используя диаграмму Helm:
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
Разверните Trino как распределенный механизм запросов SQL, который будет подключаться к MinIO и другим источникам данных:
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
Убедитесь, что все компоненты работают правильно, перечислив модули в пространстве имен Trino:
kubectl get pods -n trino
Обзор безопасности и корректировки
Просмотрите и при необходимости измените настройки безопасности. Чтобы отключить проверку сертификата SSL для подключений S3, обновите раздел extraCatalogs файла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. Создать корзину: создайте новую корзину, которую будет использовать Trino.
mc mb my-minio/tiny --insecure
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. Доступ к пользовательскому интерфейсу. Используйте пользовательский интерфейс Trino в своем браузере, посетив http://127.0.0.1:8080.
Откройте модуль координатора 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. Используйте следующую команду:
mc ls my-minio/tiny --insecure
Это так просто!
При устранении проблем с конфигурацией, особенно связанных с безопасностью, тщательно просмотрите файлыvalues.yaml для каждого компонента, чтобы убедиться в правильности настроек.
Trino выделяется своей способностью оптимизировать запросы на различных уровнях данных, будь то специализированные базы данных или объектное хранилище. Он направлен на то, чтобы свести к минимуму передачу данных за счет сокращения запросов для получения только необходимых данных. Это позволяет Trino объединять наборы данных из разных источников, выполнять дальнейшую обработку или эффективно возвращать точные результаты.
MinIO исключительно хорошо сочетается с Trino благодаря своей лучшей в отрасли масштабируемости и производительности. Благодаря способности справляться со значительными рабочими нагрузками в области искусственного интеллекта, машинного обучения и аналитики, MinIO легко поддерживает запросы Trino и не только. В недавних тестах MinIO достиг впечатляющих показателей 325 ГиБ/с (349 ГБ/с) для операций GET и 165 ГиБ/с (177 ГБ/с) для операций PUT всего на 32 узлах. Эта замечательная производительность гарантирует, что данные, хранящиеся в MinIO, остаются легкодоступными, что делает MinIO надежным и высокопроизводительным выбором для Trino, не становясь узким местом.
Если у вас есть какие-либо вопросы по MinIO и Trino, обязательно свяжитесь с нами по телефону.