200

Trino

Mecanismo de Consulta Distribuído

Um mecanismo de consulta distribuído é projetado para executar consultas SQL complexas em grandes volumes de dados espalhados por múltiplas fontes. Ele elimina a necessidade de mover ou duplicar dados, permitindo análises diretamente onde os dados estão armazenados. Isso aumenta a eficiência e a escalabilidade.

Principais características de um mecanismo de consulta distribuído:

  • Execução Paralela: Divide consultas em tarefas menores que são processadas simultaneamente em diferentes nós de um cluster, otimizando o tempo de execução.

  • Conexão com Múltiplas Fontes de Dados: Oferece integração com data lakes, data warehouses e bancos de dados relacionais, permitindo a execução de consultas federadas.

  • SQL como Linguagem Universal: Analistas podem realizar consultas utilizando SQL, sem necessidade de aprender linguagens específicas.

  • Desempenho Otimizado: Utiliza técnicas como pushdown de predicados e armazenamento em memória para reduzir a latência e maximizar a performance.

Dentre os casos de uso comuns de mecanismos de consulta distribuídos, destacam-se:

  • Consultas federadas em várias fontes de dados.

  • Análise em tempo real de grandes volumes de dados.

  • Unificação de data lakes e data warehouses para facilitar governança e auditoria.

Principais Características do Trino

O Trino é um mecanismo de consulta distribuído open-source, projetado para executar consultas SQL em grandes volumes de dados armazenados em fontes diversas, como data lakes, data warehouses e bancos de dados relacionais.

Inicialmente, desenvolvido como Presto por engenheiros do Facebook para atender suas necessidades internas de análise de dados, o Trino surgiu em 2020 após uma divisão com a Presto Foundation. Desde então, tornou-se referência em soluções de alta performance para análise de dados distribuídos.

Principais Características:

  • Velocidade: Desenvolvido para análises de baixa latência, o Trino utiliza execução altamente paralela e distribuída para processar consultas de forma eficiente.

  • Escalabilidade Horizontal: Permite a adição de workers para ampliar a capacidade de processamento, sendo capaz de lidar com workloads em escala de exabytes, como em grandes data lakes e data warehouses.

  • Simplicidade: Compatível com ANSI SQL, facilita a integração com ferramentas de BI como R, Tableau, Power BI, Superset, entre outras.

  • Versatilidade: Suporta análises "ad hoc" interativas, consultas em lote de longa duração e aplicativos de alto volume, garantindo tempos de resposta inferiores a um segundo em cenários críticos.

  • Análise Local: Consulta dados diretamente em fontes como Hadoop, S3, Cassandra e MySQL, eliminando a necessidade de copiar ou mover dados, simplificando processos e reduzindo erros.

  • Consultas Federadas: Habilita a execução de consultas em múltiplas fontes de dados, como HDFS, S3, bancos relacionais e data warehouses.

  • Alta Performance: Sua arquitetura é otimizada para workloads interativos, garantindo latência mínima.

  • Extensibilidade: Oferece suporte para conectores personalizados, possibilitando integração com novas fontes de dados.

  • Confiabilidade: Amplamente utilizado em operações críticas, como relatórios financeiros para mercados públicos, por algumas das maiores organizações globais.

  • Suporte a Diversos Formatos: Compatível com formatos como Parquet, ORC, Avro, JSON e CSV.

  • Comunidade Aberta: Desenvolvido sob a liderança da Trino Software Foundation, uma organização sem fins lucrativos.

Arquitetura do Trino

O Trino é um mecanismo de consulta distribuído que processa dados em paralelo em vários servidores. Os servidores de um Cluster Trino são classificados como Coordinators e Workers.

Arquitetura do Trino
Figure 1. Visão Geral da Arquitetura do Trino

As seções a seguir descrevem os principais componentes da arquitetura do Trino.

Cluster

Um cluster Trino é composto por vários nós, incluindo um Coordinator e zero ou mais Workers. Os usuários se conectam ao Coordinator por meio de ferramentas de consulta SQL. O Coordinator orquestra tarefas entre os Workers e acessa fontes de dados conectadas por meio de catálogos configurados.

Cada consulta é processada como uma operação com estado. O Coordinator distribui a carga de trabalho entre os Workers em paralelo. Cada nó executa uma única instância JVM, com paralelização adicional usando threads.

Um Nó (Node) no Trino refere-se a qualquer servidor dentro de um cluster que executa um processo Trino. Ele normalmente corresponde a um único computador, já que apenas um processo Trino é recomendado por máquina.

Coordinator

O Coordinator é o servidor central responsável por analisar instruções, planejar consultas e gerenciar nós Workers. Atuando como o "cérebro" do cluster, ele rastreia as atividades dos Workers, coordena a execução de consultas e se comunica com clientes e Workers por meio da API REST.

Para desenvolvimento ou testes, uma única instância do Trino pode ser configurada para funcionar como Coordinator e Worker.

Worker

Um Worker é um servidor responsável por executar tarefas e processar dados. Os Workers buscam dados de conectores, trocam dados intermediários e se comunicam com o Coordinator via API REST. Quando iniciado, um Worker registra-se no servidor de descoberta do Coordinator para alocação de tarefas.

Cliente

Clientes se conectam ao Trino para enviar consultas SQL e recuperar resultados. Eles podem acessar fontes de dados configuradas por meio de catálogos e incluem ferramentas como interfaces de linha de comando, aplicativos desktop e sistemas baseados na web. Alguns clientes também suportam autoria interativa de consultas, visualizações e relatórios.

Fonte de Dados

O Trino suporta consultas em diversas fontes de dados, incluindo data lakes, bancos de dados relacionais e armazenamentos de chave-valor. O acesso a essas fontes de dados é configurado usando catálogos, que definem os conectores necessários, credenciais e outros parâmetros.

A seguir apresentamos os conceitos fudamentais associados à Fontes de Dados no Trino:

  • Conector: Os conectores permitem que o Trino interaja com fontes de dados específicas, funcionando como drivers de banco de dados. Exemplos incluem conectores para Hive, Iceberg, PostgreSQL, MySQL e Snowflake. Cada catálogo no Trino está associado a um conector.

  • Catálogo: Um catálogo é uma coleção de propriedades de configuração para acessar uma fonte de dados. Catálogos são definidos em arquivos de propriedades armazenados no diretório de configuração do Trino. Um catálogo pode conter esquemas e tabelas, permitindo o acesso a múltiplas fontes de dados em um único cluster.

  • Esquema: Esquemas organizam tabelas e outros objetos dentro de um catálogo. Eles correspondem a conceitos semelhantes em bancos de dados como Hive e MySQL.

  • Tabela: Uma tabela consiste em linhas desordenadas organizadas em colunas nomeadas com tipos específicos. As tabelas são acessadas por nomes totalmente qualificados enraizados em catálogos.

Modelo de Execução de Consultas do Trino

O Trino executa instruções SQL transformando-as em consultas distribuídas executadas no cluster.

Seguem mais detalhes sobre os termos utilizados no modelo de execução de consultas do Trino:

  • Instrução: Uma instrução (statement) refere-se ao texto SQL enviado ao Trino. Ela é convertida em um plano de consulta durante a execução.

  • Consulta: Uma consulta (query) engloba os componentes e a configuração necessários para executar uma instrução. Ela inclui estágios, tarefas, divisões e operadores.

  • Estágio: Estágios (stages) representam seções de um plano de consulta distribuído, organizados hierarquicamente. Cada consulta possui um estágio raiz que agrega as saídas de outros estágios.

  • Tarefa: Tarefas (tasks) executam estágios em paralelo nos Workers. Elas operam em divisões e envolvem vários drivers para processar os dados.

  • Split: Um split (divisão) é um segmento de um conjunto de dados maior, processado por uma tarefa. O Coordinator atribui splits às tarefas com base na disponibilidade.

  • Driver: Drivers são as menores unidades de paralelismo, combinando operadores para processar dados dentro de uma tarefa.

  • Operador: Operadores realizam transformações nos dados, como buscas em tabelas ou filtros, e são combinados dentro dos drivers.

  • Exchanges: Exchanges (trocas) transferem dados entre nós durante a execução da consulta, permitindo comunicação entre estágios por meio de buffers de saída e clientes de troca.

Detalhes do Projeto Trino

O Trino foi desenvolvido em Java, aproveitando a robustez da JVM para processamento distribuído.

Linguagens do Trino
Figure 2. Linguagens predominantes do projeto Trino

Fonte(s): Trino Docs