paint-brush
Como implantar MinIO e Trino com Kubernetespor@minio
4,960 leituras
4,960 leituras

Como implantar MinIO e Trino com Kubernetes

por MinIO6m2024/05/23
Read on Terminal Reader

Muito longo; Para ler

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.
featured image - Como implantar MinIO e Trino com Kubernetes
MinIO HackerNoon profile picture
0-item
1-item



Trino (anteriormente Presto) é um mecanismo de consulta SQL - não um banco de dados SQL. Trino evitou o componente de armazenamento do banco de dados SQL para se concentrar em apenas uma coisa: consultas SQL ultrarrápidas. Trino é apenas um mecanismo de consulta e não armazena dados. Em vez disso, o Trino interage com vários bancos de dados ou diretamente no armazenamento de objetos. Trino analisa e analisa a consulta SQL que você passa, cria e otimiza um plano de execução de consulta que inclui as fontes de dados e, em seguida, agenda nós de trabalho que são capazes de consultar de forma inteligente os bancos de dados subjacentes aos quais se conectam.


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 é imutável , versionado e protegido por codificação de apagamento . Além disso, salvar dados no armazenamento de objetos MinIO os disponibiliza para outros aplicativos de análise e aprendizado de máquina nativos da nuvem.


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 Folga !