MinIO é frequentemente usado para armazenar dados de cargas de trabalho de IA/ML, Datalakes e lakehouses, sejam Dremio, Hive, Hudi, StarRocks ou qualquer uma das outras dezenas de excelentes soluções de ferramentas de AI/ML. O MinIO é mais eficiente quando usado como camada de armazenamento primária, o que diminui o custo total de propriedade dos dados armazenados, além de você obter os benefícios adicionais de gravar dados no MinIO que é
Neste tutorial, implantaremos um sistema coeso que permite consultas SQL distribuídas em grandes conjuntos de dados armazenados no Minio, com Trino aproveitando metadados do Hive Metastore e esquemas de tabela do Redis.
Aqui estão os diferentes componentes e o que eles fazem em nosso processo de configuração que veremos a seguir.
Antes de começar, certifique-se de ter as ferramentas necessárias instaladas para gerenciar seu cluster Kubernetes:
Para acessar os recursos necessários para implantar o Trino no Kubernetes, clone o repositório GitHub específico e navegue até o diretório apropriado:
git clone https://github.com/minio/blog-assets.git cd blog-assets/trino-on-kubernetes
Namespaces no Kubernetes fornecem ambientes isolados para aplicativos. Crie um novo namespace para o Trino encapsular sua implantação:
kubectl create namespace trino --dry-run=client -o yaml | kubectl apply -f -
O Redis armazenará esquemas de tabela usados pelo Trino. Proteja esses esquemas com um segredo do Kubernetes. O comando a seguir cria um segredo genérico, obtendo dados de um arquivo JSON:
kubectl create secret generic redis-table-definition --from-file=redis/test.json -n trino || true
Os repositórios Helm fornecem gráficos pré-empacotados que simplificam a implantação de aplicativos. Adicione os repositórios Bitnami e Trino à configuração do Helm:
helm repo add bitnami https://charts.bitnami.com/bitnami || true helm repo add trino https://trinodb.github.io/charts/ || true
Prepare MinIO dentro do namespace Trino.
kubectl minio init -n trino
Configure uma arquitetura multilocatário para armazenamento de dados. O exemplo abaixo cria um locatário denominado “tenant-1” com quatro servidores, quatro volumes de armazenamento e capacidade de 4 GiB:
kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi -n trino
Trino utiliza Hive Metastore para armazenar metadados de tabelas. Implante o PostgreSQL para gerenciar os metadados e configure o Hive Metastore:
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Use um gráfico Helm pré-configurado para implantar o Hive Metastore no namespace Trino:
helm upgrade --install my-hive-metastore -n trino -f hive-metastore/values.yaml ./charts/hive-metastore
Trino e MinIO criam uma combinação poderosa para consultas SQL distribuídas em grandes conjuntos de dados. Siga estas etapas para implementar e configurar o sistema.
Redis é um armazenamento de dados na memória de alta velocidade usado para armazenar esquemas de tabela Trino para melhorar o desempenho da consulta. Implante-o no namespace Trino usando um gráfico Helm:
helm upgrade --install my-redis bitnami/redis -n trino -f redis/values.yaml
Implante o Trino como o mecanismo de consulta SQL distribuído que se conectará ao MinIO e outras fontes de dados:
helm upgrade --install my-trino trino/trino --version 0.7.0 --namespace trino -f trino/values.yaml
Confirme se todos os componentes estão funcionando corretamente listando os pods no namespace Trino:
kubectl get pods -n trino
Revisão e ajustes de segurança
Revise e ajuste as configurações de segurança conforme necessário. Para desabilitar a validação de certificado SSL para conexões S3, atualize a seção advancedCatalogs do arquivovalues.yaml com a seguinte propriedade:
hive.s3.ssl.enabled=false
Encaminhamento de porta para o serviço MinIO do locatário, permitindo acesso local:
kubectl port-forward svc/minio -n trino 9443:443
1. Criar Alias: Estabeleça um alias para o locatário usando as credenciais da implantação do MinIO:
mc alias set my-minio https://localhost:9443/ minio_access_key minio_secret_key --insecure
2. Criar Bucket: Crie um novo bucket que Trino usará
mc mb my-minio/tiny --insecure
1. Obter nome do pod: recupere o nome do pod coordenador Trino:
export POD_NAME=$(kubectl get pods --namespace trino -l "app=trino,release=my-trino,component=coordinator" -o jsonpath="{.items[0].metadata.name}")
2. Port Forward: Encaminha a porta local 8080 para o pod coordenador:
kubectl port-forward $POD_NAME 8080:8080
3. Acesse a UI: Use a UI do Trino em seu navegador visitando http://127.0.0.1:8080.
Acesse o pod do coordenador Trino e comece a consultar pela linha de comando:
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)
Depois de criar o bucket, confirme se os dados estão armazenados no MinIO listando o conteúdo com a ferramenta de linha de comando mc. Use o seguinte comando:
mc ls my-minio/tiny --insecure
É simples assim!
Ao solucionar problemas de configuração, especialmente aqueles relacionados à segurança, revise minuciosamente os arquivos values.yaml de cada componente para garantir as configurações adequadas.
Trino se destaca pela capacidade de otimizar consultas em diversas camadas de dados, sejam bancos de dados especializados ou armazenamento de objetos. Seu objetivo é minimizar a transferência de dados, empurrando consultas para recuperar apenas os dados essenciais necessários. Isso permite que o Trino junte conjuntos de dados de diferentes fontes, execute processamento adicional ou retorne resultados precisos com eficiência.
MinIO combina excepcionalmente bem com Trino devido à sua escalabilidade e desempenho líderes do setor. Com a capacidade de lidar com cargas de trabalho significativas em IA/ML e análises, o MinIO oferece suporte sem esforço a consultas Trino e muito mais. Em benchmarks recentes, o MinIO alcançou impressionantes 325 GiB/s (349 GB/s) para operações GET e 165 GiB/s (177 GB/s) para operações PUT em apenas 32 nós. Esse desempenho notável garante que os dados armazenados no MinIO permaneçam prontamente acessíveis, tornando o MinIO uma escolha confiável e de alto desempenho para o Trino sem se tornar um gargalo.
Se você tiver alguma dúvida sobre MinIO e Trino, entre em contato conosco pelo telefone