Zephyrnet Logo

Execute consultas do Trino 2.7 vezes mais rápido com o Amazon EMR 6.15.0 | Amazon Web Services

Data:

Trinado é um mecanismo de consulta SQL distribuído de código aberto projetado para cargas de trabalho analíticas interativas. Na AWS, você pode executar o Trino em Amazon EMR, onde você tem a flexibilidade de executar sua versão preferida do Trino de código aberto em Amazon Elastic Compute Nuvem (Amazon EC2) que você gerencia ou em Amazona atena para uma experiência sem servidor. Ao usar o Trino no Amazon EMR ou Athena, você obtém as mais recentes inovações da comunidade de código aberto junto com otimizações proprietárias desenvolvidas pela AWS.

A partir do Amazon EMR 6.8.0 e do mecanismo Athena versão 2, a AWS vem desenvolvendo planos de consulta e otimizações de comportamento do mecanismo que melhoram o desempenho das consultas no Trino. Nesta postagem, comparamos o Amazon EMR 6.15.0 com o Trino 426 de código aberto e mostramos que as consultas TPC-DS foram executadas até 2.7 vezes mais rápido no Amazon EMR 6.15.0 Trino 426 em comparação com Trino 426 de código aberto. Posteriormente, explicaremos algumas das otimizações de desempenho desenvolvidas pela AWS que contribuem para esses resultados.

Configuração de referência

Em nossos testes, usamos o conjunto de dados de 3 TB armazenado no Amazon S3 em formato Parquet compactado e os metadados para bancos de dados e tabelas são armazenados no Cola AWS Catálogo de dados. Este benchmark usa esquema de dados TPC-DS e relacionamentos de tabela não modificados. As tabelas de fatos são particionadas na coluna de data e continham de 200 a 2100 partições. As estatísticas de tabela e coluna não estavam presentes em nenhuma das tabelas. Usamos consultas TPC-DS do Trino de código aberto Repositório Github sem modificação. As consultas de benchmark foram executadas sequencialmente em dois clusters diferentes do Amazon EMR 6.15.0: um com Amazon EMR Trino 426 e outro com Trino 426 de código aberto. Ambos os clusters usaram 1 coordenador r5.4xlarge e 20 instâncias de trabalho r5.4xlarge.

Resultados observados

Nossos benchmarks mostram desempenho consistentemente melhor com o Trino no Amazon EMR 6.15.0 em comparação com o Trino de código aberto. O tempo total de execução de consultas do Trino no Amazon EMR foi 2.7 vezes mais rápido em comparação com o código aberto. O gráfico a seguir mostra as melhorias de desempenho medidas pelo tempo total de execução da consulta (em segundos) para as consultas de benchmark.

Muitas das consultas TPC-DS demonstraram ganhos de desempenho cinco vezes mais rápidos em comparação com o Trino de código aberto. Algumas consultas apresentaram desempenho ainda melhor, como a consulta 72 que melhorou 160 vezes. O gráfico a seguir mostra as 10 principais consultas TPC-DS com a maior melhoria no tempo de execução. Para uma representação sucinta e para evitar distorções nas melhorias de desempenho no gráfico, excluímos q72.

Melhorias de desempenho

Agora que entendemos os ganhos de desempenho com o Trino no Amazon EMR, vamos nos aprofundar em algumas das principais inovações desenvolvidas pela engenharia da AWS que contribuem para essas melhorias.

A escolha de uma melhor ordem e tipo de junção é fundamental para um melhor desempenho da consulta, pois pode afetar a quantidade de dados lidos de uma tabela específica, a quantidade de dados transferidos para os estágios intermediários através da rede e a quantidade de memória necessária para construir uma tabela hash para facilitar uma junção. As decisões de ordem de junção e algoritmo de junção são normalmente uma função executada por otimizadores baseados em custos, que usam estatísticas para melhorar os planos de consulta, decidindo como tabelas e subconsultas são unidas.

No entanto, as estatísticas de tabela muitas vezes não estão disponíveis, estão desatualizadas ou são muito caras para serem coletadas em tabelas grandes. Quando as estatísticas não estão disponíveis, o Amazon EMR e o Athena usam metadados de arquivo S3 para otimizar planos de consulta. Os metadados do arquivo S3 são usados ​​para inferir pequenas subconsultas e tabelas na consulta enquanto determina a ordem ou o tipo de junção. Por exemplo, considere a seguinte consulta:

SELECT ss_promo_sk FROM store_sales ss, store_returns sr, call_center cc WHERE 
ss.ss_cdemo_sk = sr.sr_cdemo_sk AND ss.ss_customer_sk = cc.cc_call_center_sk 
AND cc_sq_ft > 0

A ordem de junção sintática é store_sales junta store_returns junta call_center. Com o tipo de junção do Amazon EMR e as regras de otimização de seleção de pedido, a ordem de junção ideal é determinada mesmo que essas tabelas não tenham estatísticas. Para a consulta anterior se call_center é considerada uma tabela pequena após estimar o tamanho aproximado por meio de metadados do arquivo S3, as regras de otimização de junção do EMR unirão store_sales com call_center primeiro e converta a junção em uma junção de transmissão, acelerando a consulta e reduzindo o consumo de memória. A reordenação de junção minimiza o tamanho intermediário do resultado, o que ajuda a reduzir ainda mais o tempo geral de execução da consulta.

Com o Amazon EMR 6.10.0 e versões posteriores, as otimizações de junção baseadas em metadados de arquivos do S3 são ativadas por padrão. Se você estiver usando o Amazon EMR 6.8.0 ou 6.9.0, poderá ativar essas otimizações definindo as propriedades da sessão dos clientes Trino ou adicionando as propriedades a seguir à classificação trino-config ao criar seu cluster. Referir-se Configurar aplicativos para obter detalhes sobre como substituir as configurações padrão de um aplicativo.

Configuração para seleção do tipo de junção:

session property: rule_based_join_type_selection=true
config property: rule-based-join-type-selection=true

Configuração para reordenação de junção:

session property: rule_based_join_reorder=true
config property: rule-based-join-reorder=true

Conclusão

Com o Amazon EMR 6.8.0 e versões posteriores, você pode executar consultas no Trino de forma significativamente mais rápida do que no Trino de código aberto. Conforme mostrado nesta postagem do blog, nosso benchmark TPC-DS mostrou uma melhoria de 2.7 vezes no tempo total de execução de consultas com Trino no Amazon EMR 6.15.0. As otimizações discutidas nesta postagem, e muitas outras, também estão disponíveis ao executar consultas Trino no Athena, onde melhorias de desempenho semelhantes são observadas. Para saber mais, consulte o Execute consultas três vezes mais rápido com até 3% de economia de custos no mais recente mecanismo Amazon Athena.

Em nossa missão de inovar em nome dos clientes, o Amazon EMR e o Athena lançam frequentemente melhorias de desempenho e confiabilidade em suas versões mais recentes. Verifica a Amazon EMR e Amazona atena páginas de lançamento para aprender sobre novos recursos e melhorias.


Sobre os autores

Bhargavi Sagi é engenheiro de desenvolvimento de software no Amazon Athena. Ela ingressou na AWS em 2020 e tem trabalhado em diferentes áreas do Amazon EMR e do mecanismo Athena V3, incluindo atualização de mecanismo, confiabilidade e desempenho de mecanismo.

Sushil Kumar Shivashankar é o gerente de engenharia da equipe EMR Trino e Athena Query Engine. Ele tem se concentrado no espaço de análise de big data desde 2014.

local_img

Inteligência mais recente

local_img