Partilhar via


Otimização do uso de memória para Apache Spark

Este artigo descreve como otimizar o gerenciamento de memória do cluster Apache Spark para obter o melhor desempenho no Azure HDInsight.

Visão geral

O Spark opera colocando dados na memória. Portanto, gerenciar recursos de memória é um aspeto fundamental para otimizar a execução de trabalhos do Spark. Há várias técnicas que você pode aplicar para usar a memória do cluster de forma eficiente.

  • Prefira partições de dados menores e leve em conta o tamanho, os tipos e a distribuição dos dados em sua estratégia de particionamento.
  • Considere a Kryo data serializationmais recente e eficiente , em vez da serialização Java padrão.
  • Prefira usar YARN, pois separa spark-submit por lote.
  • Monitore e ajuste as definições de configuração do Spark.

Para sua referência, a estrutura de memória do Spark e alguns parâmetros de memória do executor chave são mostrados na próxima imagem.

Considerações sobre memória no Spark

Se você estiver usando o Apache Hadoop YARN, o YARN controlará a memória usada por todos os contêineres em cada nó do Spark. O diagrama a seguir mostra os objetos principais e suas relações.

Gerenciamento de memória YARN Spark.

Para lidar com mensagens de 'falta de memória', tente:

  • Analise os embaralhamentos de gerenciamento do DAG. Reduza reduzindo do lado do mapa, pré-particione (ou bucketize) os dados de origem, maximize os embaralhamentos únicos e reduza a quantidade de dados enviados.
  • Prefira ReduceByKey com seu limite de memória fixa para GroupByKey, que fornece agregações, janelas e outras funções, mas tem um limite de memória ilimitada.
  • Prefira TreeReduce, que faz mais trabalho nos executores ou partições, para Reduce, que faz todo o trabalho no driver.
  • Use DataFrames em vez dos objetos RDD de nível inferior.
  • Crie tipos complexos que encapsulem ações, como "Top N", várias agregações ou operações de janela.

Para obter etapas adicionais de solução de problemas, consulte exceções OutOfMemoryError para Apache Spark no Azure HDInsight.

Próximos passos