Partilhar via


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

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

Descrição Geral

Consoante a carga de trabalho do cluster do Spark, pode determinar que uma configuração do Spark não predefinida resultaria numa execução de tarefas do Spark mais otimizada. Faça testes de referência com cargas de trabalho de exemplo para validar quaisquer configurações de cluster não predefinidas.

Eis alguns parâmetros comuns que pode ajustar:

Parâmetro Descrição
--num-executors Define o número adequado de executores.
--executor-cores Define o número de núcleos para cada executor. Normalmente, deve ter executores de tamanho médio, uma vez que outros processos consomem alguma da memória disponível.
--executor-memory Define o tamanho da memória para cada executor, que controla o tamanho da área dinâmica para dados 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 da libertação da memória Java (GC).

  • Fatores para reduzir o tamanho do executor:

    1. Reduza o tamanho da área dinâmica para dados abaixo dos 32 GB para manter a sobrecarga de GC em < 10%.
    2. Reduza o número de núcleos para manter a sobrecarga de GC em < 10%.
  • Fatores para aumentar o tamanho do executor:

    1. Reduza a sobrecarga de comunicação entre executores.
    2. Reduza o número de ligações abertas entre executores (N2) em clusters maiores (>100 executores).
    3. Aumente o tamanho da área dinâmica para dados para acomodar tarefas que consomem muita memória.
    4. Opcional: reduzir a sobrecarga de memória por executor.
    5. Opcional: aumente a utilização e a simultaneidade ao subscrever a CPU.

Regra geral, ao selecionar o tamanho do executor:

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

Ao executar consultas simultâneas, considere:

  1. Comece com 30 GB por executor e todos os núcleos do computador.
  2. Crie várias aplicações paralelas do Spark ao subscrever a CPU (cerca de 30% de melhoria de latência).
  3. Distribuir consultas por aplicações paralelas.
  4. Modifique o tamanho com base nas execuções de avaliação e nos fatores anteriores, como a sobrecarga do GC.

Para obter mais informações sobre como utilizar o Ambari para configurar executores, veja Definições do Apache Spark – Executores do Spark.

Monitorize o desempenho de consultas para valores atípicos ou outros problemas de desempenho ao observar a vista de linha cronológica. Também gráfico SQL, estatísticas de tarefas, etc. Para obter informações sobre como depurar tarefas do Spark com o YARN e o servidor do Histórico do Spark, veja Depurar tarefas do Apache Spark em execução no Azure HDInsight. Para obter sugestões sobre como utilizar o Servidor de Linha Cronológica do YARN, veja Aceder aos registos de aplicações do Apache Hadoop YARN.

Tarefas mais lentas em alguns executores ou nós

Por vezes, um ou alguns dos executores são mais lentos do que os outros e as tarefas demoram muito mais tempo a ser executadas. Esta lentidão ocorre frequentemente em clusters maiores (> 30 nós). Neste caso, divida o trabalho num número maior de tarefas para que o agendador possa compensar tarefas lentas. Por exemplo, tenha pelo menos o dobro das tarefas que o número de núcleos de executor na aplicação. Também pode ativar a execução especulativa de tarefas com conf: spark.speculation = true.

Passos seguintes