Compartilhar via


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

Este artigo discute 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, o gerenciamento de recursos de memória é um aspecto fundamental da otimização da execução de trabalhos do Spark. Há várias técnicas que podem ser aplicadas para usar a memória do cluster de maneira eficiente.

  • Preferir partições de dados menores e considerar o tamanho, os tipos e a distribuição de dados na sua estratégia de particionamento.
  • Considere a mais recente e mais eficiente Kryo data serialization ao invés da serialização Java padrão.
  • Prefira usar YARN, pois ele separa spark-submit por lote.
  • Monitorar e sintonizar as definições da configuração do Spark.

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

Considerações de memória do Spark

Se você estiver usando o YARN do Apache Hadoop, o YARN controlará a memória usada por todos os contêineres em cada nó do Spark. O diagrama a seguir mostra os objetos de chave e os respectivos relacionamentos.

Gerenciamento de memória do YARN Spark.

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

  • Revisar as ordens aleatórias de armazenamento do DAG. Reduzir com a redução do lado do mapa, fazer a pré-partição (ou bucket) dos dados de origem, maximizar as ordens aleatórias simples e reduzir a quantidade de dados enviados.
  • Prefira ReduceByKey com seu limite de memória fixo a GroupByKey, que fornece agregações, janelas e outras funções, mas que tem limite de memória ilimitado.
  • Preferir 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.
  • Criar ComplexTypes que encapsulam ações, como "Top N", várias agregações ou operações de janelas.

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

Próximas etapas