MinIO часто используется для хранения данных из рабочих нагрузок AI/ML, озер данных и озерных домов, будь то Dremio, Hive, Hudi, StarRocks или любой другой дюжины или около того замечательных инструментов AI/ML. MinIO более эффективен при использовании в качестве основного уровня хранения, что снижает совокупную стоимость владения хранимыми данными, а также дает дополнительные преимущества записи данных в MinIO, т.е.
В этом руководстве мы развернем целостную систему, которая позволит выполнять распределенные запросы SQL к большим наборам данных, хранящимся в Minio, при этом Trino будет использовать метаданные из Hive Metastore и схемы таблиц из Redis.
Компоненты
Ниже мы рассмотрим различные компоненты и то, что они делают в процессе установки.
- Minio: Minio можно использовать для хранения больших наборов данных, подобных тем, которые обычно анализируются Trino.
- Hive Metastore : Hive Metastore — это служба, которая хранит метаданные для таблиц Hive (например, схему таблицы). Trino может использовать Hive Metastore для определения схемы таблиц при запросе наборов данных.
- PostgreSQL для Hive Metastore: это серверная часть базы данных для Hive Metastore. Здесь фактически хранятся метаданные.
- Redis: в этой настройке Redis предназначен для хранения схем таблиц для Trino.
- Trino: Trino (ранее известный как Presto) — это высокопроизводительный распределенный механизм запросов SQL. Он позволяет запрашивать данные из различных источников данных, таких как базы данных SQL, базы данных NoSQL и даже объектные хранилища, такие как Minio.
Предварительные условия
Прежде чем начать, убедитесь, что у вас установлены необходимые инструменты для управления кластером Kubernetes:
- kubectl : основной инструмент командной строки для управления кластерами Kubernetes. Вы можете использовать его для проверки, управления и администрирования ресурсов кластера.
- helm : менеджер пакетов для Kubernetes. Helm позволяет вам развертывать, обновлять приложения и управлять ими в вашем кластере, используя предварительно определенные диаграммы.
Клонирование репозитория
Чтобы получить доступ к ресурсам, необходимым для развертывания Trino в Kubernetes, клонируйте конкретный репозиторий GitHub и перейдите в соответствующий каталог:
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Создание пространства имен Kubernetes
Пространства имен в Kubernetes предоставляют изолированные среды для приложений. Создайте новое пространство имен для Trino, чтобы инкапсулировать его развертывание:
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
Секрет определения таблицы Redis
Redis будет хранить схемы таблиц, используемые Trino. Защитите эти схемы с помощью секрета Kubernetes. Следующая команда создает общий секрет, получая данные из файла JSON:
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Добавить репозитории Helm
Репозитории 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 для хранения данных
Инициализировать MinIO
Подготовьте MinIO в пространстве имен Trino.
kubectl minio init -n trino
Создать арендатора MinIO
Настройте мультитенантную архитектуру для хранения данных. В приведенном ниже примере создается арендатор с именем «тенант-1» с четырьмя серверами, четырьмя томами хранения и емкостью 4 ГиБ:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Настройка метахранилища Hive
Trino использует Hive Metastore для хранения метаданных таблиц. Разверните PostgreSQL для управления метаданными, затем настройте Hive Metastore:
Установить PostgreSQL
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Развертывание Hive Metastore
Используйте предварительно настроенную диаграмму Helm для развертывания Hive Metastore в пространстве имен Trino:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Развертывание MinIO и Trino с помощью Kubernetes
Trino и MinIO создают мощную комбинацию для распределенных запросов SQL к большим наборам данных. Выполните следующие действия, чтобы развернуть и настроить систему.
Развертывание Redis для хранения схем таблиц
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
Переадресация порта на службу 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 через переадресацию портов
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 через CLI
Откройте модуль координатора 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
После создания сегмента подтвердите, что данные хранятся в 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, обязательно свяжитесь с нами по телефону.