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.
Componentes
Aqui estão os diferentes componentes e o que eles fazem em nosso processo de configuração que veremos a seguir.
- Minio: Minio pode ser usado para armazenar grandes conjuntos de dados, como os normalmente analisados pelo Trino.
- Hive Metastore : Hive Metastore é um serviço que armazena metadados para tabelas Hive (como esquema de tabela). Trino pode usar o Hive Metastore para determinar o esquema das tabelas ao consultar conjuntos de dados.
- PostgreSQL para Hive Metastore: Este é o back-end do banco de dados para o Hive Metastore. É onde os metadados são realmente armazenados.
- Redis: nesta configuração, Redis para armazenar esquemas de tabela para Trino.
- Trino: Trino (anteriormente conhecido como Presto) é um mecanismo de consulta SQL distribuído e de alto desempenho. Ele permite consultar dados em várias fontes de dados, como bancos de dados SQL, bancos de dados NoSQL e até mesmo armazenamento de objetos como o Minio.
Pré-requisitos
Antes de começar, certifique-se de ter as ferramentas necessárias instaladas para gerenciar seu cluster Kubernetes:
- kubectl : a principal ferramenta de linha de comando para gerenciar clusters Kubernetes. Você pode usá-lo para inspecionar, manipular e administrar recursos de cluster.
- helm : Um gerenciador de pacotes para Kubernetes. Helm permite implantar, atualizar e gerenciar aplicativos em seu cluster usando gráficos predefinidos.
Clonagem de repositório
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
Criação de namespace 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 -
Segredo de definição da tabela Redis
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
Adicionar repositórios Helm
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
Implante MinIO para armazenamento de dados
Inicializar MinIO
Prepare MinIO dentro do namespace Trino.
kubectl minio init -n trino
Criar locatário MinIO
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
Configurar o metastore do Hive
Trino utiliza Hive Metastore para armazenar metadados de tabelas. Implante o PostgreSQL para gerenciar os metadados e configure o Hive Metastore:
Instale o PostgreSQL
helm upgrade --install hive-metastore-postgresql bitnami/postgresql -n trino -f hive-metastore-postgresql/values.yaml
Implantar metastore do Hive
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
Implantando MinIO e Trino com Kubernetes
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.
Implantar Redis para armazenar esquemas de tabela
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
Implantar Trino
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
Verifique a implantação
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
Teste
Encaminhamento de porta para serviço de locatário MinIO
Encaminhamento de porta para o serviço MinIO do locatário, permitindo acesso local:
kubectl port-forward svc/minio -n trino 9443:443
Crie um alias e um bucket para Trino
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
Acesse a UI do Trino via Port Forward
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.
Consultar Trino via CLI
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)
Confirme os dados no intervalo MinIO
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!
Pensamentos finais
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