Fundamentos de Presto e Amazon Athena que todos em Engenharia de Dados deveriam saber

Bernardo Costa
6 min readMar 23, 2022

--

Enfim chegamos ao ponto que podemos fazer alguns deep dives sobre técnicas e serviços utilizados em Engenharia de Dados. Como comentei no post anterior sobre Faculdade e os principais serviços de Dados na AWS, o Amazon Athena é um modo de ofertar o Presto como serviço, de modo Serverless (SaaS).

Athena — Fonte: myloview

Para começarmos é importante entender esse processo do Software para o Serviço. Ter claro o funcionamento do Presto como Software e do Amazon Athena como Serviço nos ajudará a entender muitas das idiossincrasias do Amazon Athena.

Presto

Intro

Veja a descrição do site do Presto:

Presto is a distributed system that runs on a cluster of machines. It enables analytics on large amounts of data. With Presto, access and query data in place on many data different data sources using ANSI SQL (see image below).

Então vejamos alguns pontos dessa descrição — e já vá pensando como seria implementar um Software como esse:

  • Presto é um sistema distribuído que roda em um cluster de máquinas. Para funcionar de modo pleno, estamos falando de várias máquinas "baratas", trabalhando juntas, parecido com a ideia do Hadoop.
  • Permite realizar análise em grandes volumes de dados. Coordenando várias máquinas para realizar os trabalhos de análise, o Presto permite a análise de grande volume de dados, devido a característica distribuída.
  • Com o Presto podemos acessar e consultar dados em várias fontes de dados diferentes usando SQL ANSI. Sabendo ANSI SQL — ANSI vem de American National Standards Institute — conseguimos interagir com as diversas fontes que o Presto pode conectar. Preferencialmente, gostaríamos de fontes de dados distribuídas, para reduzir o tempo de leitura.

Arquitetura do Presto

De modo resumido, existem dois tipos de componentes do Presto que aparecerão nas instalações, Presto Coordinator e o Presto Worker, veja o diagrama:

Presto Arquitetura — Fonte: prestodb

Presto Coordinator

O Presto Coordinator é o responsável por fazer o planejamento de como as consultas serão executas e gerenciar os Workers nodes, onde a comunicação é feita via REST API. Todas as instalações do Presto precisam de um Coordinator e terão um ou mais Workers. Em produção o ideal é que o Coordinator esteja em uma máquina dedicada do cluster, isso melhora a performance.

O Coordinator fica responsável por pegar o resultado vindo dos Workers e retornar para o Client.

Presto Worker

Os Presto Workers são os responsáveis por processar as consultas indicadas pelo Coordinator. Os Worker recuperam os dados das fontes de dados e conseguem fazer troca de dados entre eles próprios também.

Quando um Worker inicia ele imediatamente trata de procurar um Coordinator na rede para se colocar a disposição para execução das consultas.

Tabelas, Catálogo e Conexão com os dados

Além disso, é importante entender esses três conceitos:

  • Tabelas: são as tabelas de dados, parecido com o formato que são organizadas em um banco de dados tradicional.
  • Catálogo: é o responsável por dizer ao Presto qual o schema e onde esses dados estão disponíveis, via a conexão dos dados. Idealmente, em produção, passamos a responsabilidade do catálogo para um componente externo para desacoplar o catálogo da Engine de consulta, permitindo seu uso também por outros Software/Serviços que tem interesse em usar o catálogo. Nesse caso, o Presto suporta o Hive Metastore, que na AWS é substituído pelo AWS Glue Data Catalog.
  • Conexão com os dados: modo como o Presto irá chegar nos dados mapeados pelo catálogo. Podemos entender como um "driver" de banco de dados tradicional — também é chamado de conector.

E Athena com isso?

Athena — Fonte: stoodi

Quem é Athena? Da deusa grega da sabedoria, guerra, das artes, da inteligência e da justiça, veio a inspiração para criação de um Serviço que no final da linha apoia o aumento da inteligência… utilizando dados!

E se…

  • E se fossemos colocar o Presto disponível como ferramenta principal para consultas ad-hoc, como ficaria do ponto de vista de escala?
  • E se fossemos mesmo fazer isso, onde colocaríamos os dados?
  • E se ficássemos muito tempo sem usar, continuaríamos pagando para ter essa estrutura disponível?
  • E se usássemos o Presto para construir uma estrutura muito resiliente, escalável, a ponto de só pagarmos por processamento quando usássemos?

Pegamos tudo que é componente de Presto e isolamos. O Serviço deve criar uma "caixa" com tudo isso dentro. Chamaremos essa caixa de Serviço de consulta distribuída em SQL:

Criando serviço de consulta distribuída em SQL

Essa caixa é o Amazon Athena.

Amazon Athena entrando para ser o serviço de consulta distribuída em SQL

Porém, o Amazon Athena é otimizado para funcionar com serviços AWS, especialmente com Amazon S3 como sistema de armazenamento de objetos. Para o caso de outros tipos de armazenamento, que o Presto padrão tem conectores, é necessário o uso de uma função AWS Lambda para simular esse conector, modelo que a AWS chama de Federated Query. O Catálogo idealmente fica no AWS Glue Data Catalog. Chegamos então nesse diagrama:

Diagrama do Amazon Athena

Modelo de cobrança (referente à Mar/2022)

  • Amazon Athena: 5 USD por TB de dados escaneados durante a consulta. Se você precisar ler 1 TB para ter 1 linha de resposta, pagará 5 USD, não interessa. Para otimizar isso é necessário o uso de partições de dados, filtros nas colunas particionadas, além de projetar apenas as colunas necessárias, aliado a um formato de arquivo colunar como o Apache Parquet. Otimizamos também o custo compactando os arquivos.
  • AWS Glue Data Catalog: gratuito para o primeiro milhão de objetos armazenados e também gratuito para 1 milhão de solicitações por mês. Depois, para ambos, custa 1 USD por milhão.
  • Federated Query: 5 USD por TB escaneado na fonte, mais o custo da função AWS Lambda.
  • Amazon S3: 0,023 USD por GB.

Para mais detalhes sobre cobrança, vejam os links da referência

É Importante deixar claro que não existe cobrança fixa adicional. Se não usar, não paga. Diferente de um banco de dados tradicional onde temos que ter a máquina disponível 24/7 para conseguir realizar as consultas quando desejarmos.

Aqui, não pagamos nada para ter essa possibilidade de realizar consultas a qualquer momento, pagando apenas pelo uso de recursos que aquela consulta utilizou, pay-as-you-go.

Prós e contras: Amazon Athena e Cluster com Presto

Cluster com Presto - prós

  • Custo fixo, sem muita surpresa no final do mês.
  • Possibilidade de usar sempre a última versão do Presto.
  • Possibilidade de levar para onde quiser (containers, docker, k8s, etc.).
  • Consultas superiores a 30 minutos.
  • Open source, comunidade, etc.
  • Se já tem um cluster Hadoop (como o Amazon EMR) que precisa ficar 24/7 ligado, pode utilizar o Presto lá dentro para otimizar recursos.

Cluster com Presto - contras

  • Custo fixo, mesmo se não usar.
  • Custo de infraestrutura.
  • Custo de manutenção da infraestrutura.
  • Demora mais para colocar no ar.
  • Preocupação com escalabilidade.
  • Preocupação com resiliência.

Amazon Athena prós

  • Não tem custo fixo, paga apenas pelo que usar.
  • Não tem preocupação com infraestrutura.
  • Não tem custo com infraestrutura.
  • Muito rápido de configurar e começar a usar.
  • Não tem preocupação com escalabilidade.
  • Não tem preocupação com resiliência.
  • Dados ficam em uma estrutura open source, tornando fácil a migração e uso por outros Softwares/Serviços.

Amazon Athena contras

  • Custo pode subir de modo descontrolado, caso não tenha controle.
  • vendor lock-in na Engine de busca.
  • Consultas não podem passar de 30 minutos.

Próximos Passos

No próximo artigo iremos ver boas práticas de como implementar e utilizar o Amazon Athena e poder usufruir dos prós do "Presto as a Service".

Mas e vocês, tem usado Amazon Athena ou o Presto no seu dia a dia? Quais dúvidas vocês gostariam que fossem esclarecidas no próximo artigo?

Me Siga

Livros:

Referências:

  1. Presto: https://prestodb.io/
  2. Amazon Athena princing: https://aws.amazon.com/pt/athena/pricing/
  3. AWS Glue Data Catalog pricing: https://aws.amazon.com/pt/glue/pricing/
  4. Amazon S3 princing: https://aws.amazon.com/pt/s3/pricing/

--

--

Bernardo Costa

Head de Dados, Engenheiro de Computação de formação e padeiro nas horas vagas.