paint-brush
Как развернуть MinIO и Trino с помощью Kubernetesк@minio
4,760 чтения
4,760 чтения

Как развернуть MinIO и Trino с помощью Kubernetes

к MinIO6m2024/05/23
Read on Terminal Reader

Слишком долго; Читать

Благодаря способности справляться со значительными рабочими нагрузками в области искусственного интеллекта, машинного обучения и аналитики, MinIO легко поддерживает запросы Trino и не только.
featured image - Как развернуть MinIO и Trino с помощью Kubernetes
MinIO HackerNoon profile picture
0-item
1-item



Трино (ранее Presto) — это механизм запросов SQL, а не база данных SQL. Trino отказался от компонента хранения базы данных SQL, сосредоточившись только на одном — сверхбыстрых запросах SQL. Trino — это просто механизм запросов, который не хранит данные. Вместо этого Trino взаимодействует с различными базами данных или непосредственно с объектными хранилищами. Trino анализирует и анализирует передаваемый вами SQL-запрос, создает и оптимизирует план выполнения запроса, включающий источники данных, а затем планирует рабочие узлы, которые могут интеллектуально запрашивать базовые базы данных, к которым они подключаются.


MinIO часто используется для хранения данных из рабочих нагрузок AI/ML, озер данных и озерных домов, будь то Dremio, Hive, Hudi, StarRocks или любой другой дюжины или около того замечательных инструментов AI/ML. MinIO более эффективен при использовании в качестве основного уровня хранения, что снижает совокупную стоимость владения хранимыми данными, а также дает дополнительные преимущества записи данных в 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, обязательно свяжитесь с нами по телефону. Слабый !