Partilhar via


Otimização da configuração de cluster para Apache Spark

Este artigo descreve como otimizar a configuração do cluster Apache Spark para obter o melhor desempenho no Azure HDInsight.

Visão geral

Dependendo da carga de trabalho do cluster do Spark, você pode determinar que uma configuração não padrão do Spark resultaria em uma execução de trabalho do Spark mais otimizada. Faça testes de benchmark com cargas de trabalho de exemplo para validar quaisquer configurações de cluster não padrão.

Aqui estão alguns parâmetros comuns que você pode ajustar:

Parâmetro Descrição
--num-executores Define o número apropriado de executores.
--executor-cores Define o número de núcleos para cada executor. Normalmente, você deve ter executores de médio porte, pois outros processos consomem parte da memória disponível.
--memória executora Define a quantidade de memória para cada executor, que determina o tamanho do heap no YARN. Deixe alguma memória para a sobrecarga de execução.

Selecione o tamanho correto do executor

Ao decidir a configuração do executor, considere a sobrecarga de coleta de lixo (GC) Java.

  • Fatores para reduzir o tamanho do executor:

    1. Reduza o tamanho da pilha abaixo de 32 GB para manter a sobrecarga < do GC em 10%.
    2. Reduza o número de núcleos para manter a sobrecarga < do GC em 10%.
  • Fatores para aumentar o tamanho do executor:

    1. Reduza a sobrecarga de comunicação entre os executores.
    2. Reduza o número de conexões abertas entre executores (N2) em clusters maiores (>100 executores).
    3. Aumente o tamanho da pilha para acomodar tarefas que consomem muita memória.
    4. Opcional: reduza a sobrecarga de memória por executor.
    5. Opcional: aumente o uso e a simultaneidade sobreinscrevendo a CPU.

Como regra geral, ao selecionar o tamanho do executor:

  1. Comece com 30 GB por executor e distribua os núcleos de máquina disponíveis.
  2. Aumente o número de núcleos executores para clusters maiores (> 100 executores).
  3. Modifique o tamanho com base tanto nas execuções de avaliação como nos fatores prévios, tais como a sobrecarga de GC.

Ao executar consultas simultâneas, considere:

  1. Comece com 30 GB por executor e todos os núcleos da máquina.
  2. Crie múltiplas aplicações paralelas Spark ao fazer subscrição excessiva da CPU (cerca de 30% de melhoria na latência).
  3. Distribua consultas entre aplicativos paralelos.
  4. Modifique o tamanho com base tanto nas execuções de teste como nos fatores anteriores, como a sobrecarga de GC.

Para obter mais informações sobre como usar o Ambari para configurar executores, consulte Configurações do Apache Spark - Executores do Spark.

Monitore o desempenho da consulta em busca de discrepâncias ou outros problemas de desempenho, observando a exibição da linha do tempo. Também gráfico SQL, estatísticas de trabalho e assim por diante. Para obter informações sobre como depurar trabalhos do Spark usando o YARN e o servidor do Histórico do Spark, consulte Depurar trabalhos do Apache Spark em execução no Azure HDInsight. Para obter dicas sobre como usar o YARN Timeline Server, consulte Access Apache Hadoop YARN application logs.

Tarefas mais lentas em alguns executores ou nós

Às vezes, um ou alguns dos executores são mais lentos do que os outros, e as tarefas levam muito mais tempo para serem executadas. Esta lentidão acontece frequentemente em aglomerados maiores (> 30 nós). Neste caso, divida o trabalho em um número maior de tarefas para que o agendador possa compensar tarefas lentas. Por exemplo, tenha pelo menos o dobro de tarefas do que o número de núcleos de executor no aplicativo. Você também pode habilitar a execução especulativa de tarefas com conf: spark.speculation = true.

Próximos passos