Otimize o tempo de execução do Amazon EMR para o Apache Spark com EMR S3A


Com o tempo de execução do Amazon EMR 7.10, Amazon emr Introduziu o EMR S3A, uma implementação aprimorada do conector do sistema de arquivos de código aberto S3A. Este conector aprimorado agora é definido automaticamente como o conector do sistema de arquivos S3 padrão para as opções de implantação da Amazon EMR, incluindo Amazon EMR no EC2Assim, Amazon EMR Sem servidorAssim, Amazon emr na Amazon Ekse Amazon Emr em postos avançados da AWSMantendo a compatibilidade completa da API com o Apache Spark de código aberto.

No tempo de execução do Amazon EMR 7.10 para o Apache Spark, o conector EMR S3A exibe desempenho comparável aos EMRFs para leitura de cargas de trabalho, conforme demonstrado pelo benchmark de consulta TPC-DS. Os ganhos de desempenho mais significativos do conector são evidentes nas operações de gravação, com uma melhoria de 7% nas substituições de partição estática e uma melhoria de 215% para substituição de partição dinâmica quando comparada aos EMRFs. Nesta postagem, mostramos as vantagens aprimoradas de leitura e desempenho do uso do Amazon EMR 7.10.0 Runtime para o Apache Spark com o EMR S3A em comparação com o EMRFS e o conector do sistema de arquivos de código aberto S3A.

Leia a comparação de desempenho da carga de trabalho

Para avaliar o desempenho de leitura, usamos um ambiente de teste com base na versão de execução do Amazon EMR 7.10.0 Working Spark 3.5.5 e Hadoop 3.4.1. Nossa infraestrutura de teste apresentou um Nuvem de computação elástica da Amazon (Amazon EC2) Cluster composto por nove instâncias R5D.4XLARGE. O nó primário possui 16 VCPU e 128 GB de memória, e os oito nós principais têm um complete de 128 VCPU e 1024 GB de memória.

A avaliação de desempenho foi realizada usando uma metodologia abrangente de teste projetada para fornecer resultados precisos e significativos. Para os dados de origem, escolhemos o fator de escala de 3 TB, que contém 17,7 bilhões de registros, aproximadamente 924 GB de dados compactados particionados no formato de arquivo parquet. As instruções de configuração e detalhes técnicos podem ser encontrados no Repositório do GitHub. Utilizamos o catálogo de dados na memória da Spark para armazenar metadados para bancos de dados e tabelas TPC-DS.

Para produzir uma comparação justa e precisa entre as implementações EMR S3A vs. EMRFs e de código aberto S3A, implementamos uma abordagem de teste trifásico:

  • Fase 1: desempenho da linha de base:
    • Estabeleceu uma linha de base usando a configuração padrão do Amazon EMR com o conector S3A da EMR
    • Criou um ponto de referência para comparações subsequentes
  • Fase 2: Análise EMRFS:
    • Manteve o sistema de arquivos padrão como EMRFS
    • Preservou outras definições de configuração
  • Fase 3: Teste de código aberto S3A:
    • Modificado apenas o hadoop-aws.jar Arquivo substituindo -o pelo código aberto Hadoop S3A 3.4.1 versão
    • Mantidos configurações idênticas em outros componentes

Este ambiente de teste controlado foi essential para nossa avaliação pelos seguintes motivos:

  • Poderíamos isolar o impacto do desempenho especificamente para a implementação do conector S3A
  • Removeu variáveis ​​em potencial que poderiam distorcer os resultados
  • Ele forneceu medições precisas de melhorias de desempenho entre a implementação S3A da Amazon e a alternativa de código aberto

Execução e resultados de teste

Durante o processo de teste, mantivemos a consistência nas condições e configurações de teste, garantindo que quaisquer diferenças de desempenho observadas possam ser atribuídas diretamente às variações de implementação do conector S3A. Um complete de 104 consultas SparkSQL foram executadas em 10 iterações sequencialmente, e uma média do tempo de execução de cada consulta nessas 10 iterações foi usada para comparação. A média do tempo de execução das 10 iterações no Amazon EMR 7.10 Runtime para o Apache Spark com EMR S3A foi de 1116,87 segundos, que é 1,08 vezes mais rápido que o código aberto S3A e comparável aos EMRFs. A figura a seguir ilustra o tempo de execução complete em segundos.

Otimize o tempo de execução do Amazon EMR para o Apache Spark com EMR S3A

A tabela a seguir resume as métricas.

MétricaOSS S3AEMRFSEMR S3A
Tempo de execução média em segundos1208.261129.641116.87
Média geométrica em consultas em segundos7.637.096.99
Custo complete *$ 6,53$ 6,40$ 6,15

*As estimativas de custo detalhadas são discutidas mais adiante nesta postagem.

O gráfico a seguir demonstra a melhoria do desempenho por quadro do EMR S3A em relação ao código aberto S3A no Amazon EMR 7.10 Runtime para o Apache Spark. A extensão da aceleração varia de uma consulta para outra, com o mais rápido até 1,51 vezes mais rápido para o terceiro trimestre, com o Amazon EMR S3A superando o código aberto S3A. O eixo horizontal organiza as consultas de benchmark TPC-DS 3TB em ordem decrescente com base na melhoria do desempenho observada na Amazon EMR, e o eixo vertical mostra a magnitude dessa aceleração como uma proporção.

Leia a comparação de custos

Nossa referência em produções de tempo de execução complete e médias geométricas para medir o desempenho do tempo de execução do Spark. A métrica de custo pode nos fornecer informações adicionais. As estimativas de custo são calculadas usando as seguintes fórmulas. Eles levam em consideração o Amazon EC2, Amazon Elastic Block Retailer (Amazon EBS) e os custos da Amazon EMR, mas não incluem Amazon Easy Storage Service (Amazon S3) Obtenha e coloque custos.

  • Custo do Amazon EC2 (inclua custo SSD) = número de instâncias * r5d.4xlarge Taxa horária * tempo de execução do trabalho em horas
    • r5d.4xlarge Taxa horária = $ 1,152 por hora
  • ROOT Amazon EBS Custo = Número de instâncias * Amazon EBS por GB-Hourly Taxa * Tamanho do quantity EBS raiz * Tempo de execução do trabalho em horas
  • Amazon emr custo = número de instâncias * r5d.4xlarge Amazon EMR Custo * Time de execução em horas
    • r5d.4xlarge Amazon emr custo = $ 0,27 por hora
  • Custo complete = Amazon EC2 Custo + raiz Amazon EBS Custo + Amazon EMR Custo

A tabela a seguir resume esses custos.

MétricaEMRFSEMR S3AOSS S3A
Tempo de execução em horas0,50,480,51
Número de instâncias do EC2999
Amazon EBS Tamanho0 GB0 GB0 GB
Custo da Amazon EC2US $ 5,18$ 4,98US $ 5,29
Amazon EBS Custo$ 0,00$ 0,00$ 0,00
Custo da Amazon EMR$ 1,22$ 1,17$ 1,24
Custo complete$ 6,40$ 6,15$ 6,53
Economia de custosLinha de baseO EMR S3A é 1,04 vezes melhor que o EMRFSEMR S3A é 1,06 vezes melhor que o OSS S3A

Escreva comparação de desempenho da carga de trabalho

Realizamos testes de referência para avaliar o desempenho de gravação do tempo de execução do Amazon EMR 7.10 para o Apache Spark.

Substituição estática de tabela/partição

Avaliamos a tabela estática/partição substituem o desempenho de gravação do sistema de arquivos diferente, executando o seguinte INSERT OVERWRITE Spark SQL Question. O SELECT * FROM vary(...) Cláusula gerou dados no momento da execução. Isso produziu aproximadamente 15 GB de dados em exatamente 100 arquivos parquet no Amazon S3.

SET rows=4e9; -- 4 Billion
SET partitions=100;
INSERT OVERWRITE DIRECTORY 's3://${bucket}/perf-test/${trial_id}'
USING PARQUET SELECT * FROM vary(0, ${rows}, 1, ${partitions});

O ambiente de teste foi configurado da seguinte maneira:

  • Cluster EMR com EMR-7.10.0 Rótulo de liberação
  • Instância única de M5D.2xlarge (grupo primário)
  • Instâncias de oito M5d.2xlarge (grupo central)
  • S3 Bucket na mesma região da AWS que o cluster EMR
  • O trial_id A propriedade usou um gerador UUID para evitar conflitos entre as execuções de teste

Resultados

Depois de executar 10 ensaios para cada sistema de arquivos, capturamos e resumimos a consulta RunTimes no gráfico a seguir. Enquanto o EMR S3A teve uma média de apenas 26,4 segundos, os EMRFs e o código aberto S3A tiveram uma média de 28,4 segundos e 31,4 segundos – 1,07 vezes e 1,19 vezes a melhoria, respectivamente.

Substituição de partição dinâmica

Também avaliamos o desempenho de gravação executando o seguinte INSERT OVERWRITE Dynamic Partition Spark SQL Question, que se junta a TPC-DS 3TB Parquet Information da tabela web_sales e date_dim As tabelas, que inserem aproximadamente 2.100 partições, onde cada partição contém um arquivo parquet com um tamanho combinado de aproximadamente 31,2 GB na Amazon S3.

SET spark.sql.sources.partitionOverwriteMode=DYNAMIC;
INSERT OVERWRITE TABLE  PARTITION(wsdt_year,wsdt_month, wsdt_day) 
SELECT ws_order_number,ws_quantity,ws_list_price,ws_sales_price,
ws_net_paid_inc_ship_tax,ws_net_profit,dt.d_year as wsdt_year,dt.d_moy 
as wsdt_month,dt.d_dom as wsdt_day FROM web_sales, date_dim dt 
WHERE ws_sold_date_sk = d_date_sk;

O ambiente de teste foi configurado da seguinte maneira:

  • Cluster EMR com EMR-7.10.0 Rótulo de liberação
  • Única instância R5D.4xlarge (grupo mestre)
  • Cinco instâncias r5d.4xlarge (grupo central)
  • Aproximadamente 2.100 partições com um arquivo parquet cada
  • Tamanho combinado de aproximadamente 31,2 GB na Amazon S3

Resultados

Depois de executar 10 ensaios para cada sistema de arquivos, capturamos e resumimos a consulta RunTimes no gráfico a seguir. Enquanto o EMR S3A teve uma média de apenas 90,9 segundos, os EMRFs e o código aberto S3A tiveram uma média de 286,4 segundos e 1.438,5 segundos – uma melhoria de 3,15 vezes e 15,82 vezes, respectivamente.

Resumo

A Amazon EMR aprimora consistentemente seu Apache Spark Runtime e o S3A Connector, fornecendo melhorias contínuas de desempenho que ajudam os clientes de huge information a executar cargas de trabalho de análise de análise de maneira mais econômica. Além dos ganhos de desempenho, a mudança estratégica para o S3A introduz vantagens críticas, incluindo padronização aprimorada, portabilidade cruzada aprimorada e suporte robusto orientado à comunidade-tudo ao manter ou superar os benchmarks de desempenho estabelecidos pela implementação anterior do EMRFS.

Recomendamos que você permaneça atualizado com o último lançamento do Amazon EMR para aproveitar os mais recentes benefícios de desempenho e recursos. Inscreva -se no AWS Large Information Weblog’s RSS Feed Para saber mais sobre o tempo de execução do Amazon EMR para o Apache Spark, as melhores práticas de configuração e os conselhos de ajuste.


Sobre os autores

Giovanni Matteo Fumarola

Giovanni Matteo Fumarola

Giovanni é o gerente sênior do Amazon Emr Spark e Iceberg Group. Ele é um comissário do Apache Hadoop e membro do PMC. Ele se concentra no espaço de análise de huge information desde 2013.

Sushil Kumar Shivashankar

Sushil Kumar Shivashankar

Sushil é o gerente de engenharia da equipe Amazon Emr Hadoop e Flink na Amazon Internet Providers. Com foco na análise de huge information desde 2014, ele lidera o desenvolvimento, otimizações e estratégias de crescimento para os negócios do Hadoop e Flink na Amazon EMR.

Narayanan Venkateswaran

Narayanan Venkateswaran

Narayanan é um engenheiro sênior de desenvolvimento de software program no Amazon EMR Group. Ele trabalha no desenvolvimento de componentes do Hadoop na Amazon EMR. Ele tem mais de 20 anos de experiência profissional no setor em várias empresas, incluindo Microsystems Solar, Microsoft, Amazon e Oracle. Narayanan também possui um doutorado em bancos de dados, com foco na escalabilidade horizontal em lojas relacionais.

Syed Shameerur Rahman

Syed Shameerur Rahman

Syed é um engenheiro de desenvolvimento de software program na Amazon EMR. Ele está interessado em computação altamente escalável e distribuída. Ele é um colaborador ativo de projetos de código aberto como Apache Hive, Apache Tez, Apache Orc e Apache Hadoop, e contribuiu com recursos e otimizações importantes. Durante seu tempo livre, ele gosta de explorar novos lugares e experimentar novos alimentos.

Rajarshi Sarkar

Rajarshi Sarkar

Rajarshi é engenheiro de desenvolvimento de software program na Amazon EMR. Ele trabalha em características de ponta da Amazon EMR e também está envolvido em projetos de código aberto, como Apache Hive, Iceberg, Trino e Hadoop. Na hora livre, ele gosta de viajar, assistir filmes e sair com os amigos.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *