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.

Descriçã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 serialização Java mais recente e mais eficiente Kryo data serialization, em vez da serialização Java padrão.
  • Prefira usar o YARN, pois ele se 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 de faísca

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.

YARN Spark Memory Management.

Para endereçar mensagens de "falta de memória", tente:

  • Analise os embaralhamentos de gerenciamento do DAG. Reduza com a redução 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 ComplexTypes que encapsulam 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