Partilhar via


Otimize aplicativos Apache Spark no HDInsight

Este artigo fornece uma visão geral das estratégias para otimizar aplicativos Apache Spark no Azure HDInsight.

Descrição geral

Você pode enfrentar os seguintes cenários comuns

  • O mesmo trabalho de faísca é mais lento do que antes no mesmo cluster HDInsight
  • O trabalho de faísca é mais lento no cluster HDInsight do que no local ou em outro provedor de serviços terceirizado
  • O trabalho de faísca é mais lento em um cluster HDI do que em outro cluster HDI

O desempenho de seus trabalhos do Apache Spark depende de vários fatores. Esses fatores de desempenho incluem:

  • Como os seus dados são armazenados
  • Como o cluster é configurado
  • As operações que são usadas ao processar os dados.
  • Serviço de fios insalubres
  • Restrições de memória devido a executores de tamanho inadequado e OutOfMemoryError
  • Demasiadas tarefas ou poucas tarefas
  • A distorção de dados causou algumas tarefas pesadas ou tarefas lentas
  • Tarefas mais lentas em nós defeituosos

Passo 1: Verificar se o serviço YARN está em bom estado de funcionamento

  1. Ir para Ambari UI:
  • Verifique se o ResourceManager ou o NodeManager alerta
  • Verifique o status do ResourceManager e do NodeManager no YARN > RESUMO: Todo o NodeManager deve estar em Iniciado e apenas o Ative ResourceManager deve estar em Iniciado
  1. Verifique se a interface do usuário do Yarn está acessível através de https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster

  2. Verifique se há exceções ou erros no login do ResourceManager /var/log/hadoop-yarn/yarn/hadoop-yarn-resourcemanager-*.log

Veja mais informações em Yarn Common Issues

Etapa 2: Comparar os recursos do novo aplicativo com os recursos disponíveis do yarn

  1. Vá para Ambari UI > YARN > SUMMARY, verifique CLUSTER MEMORY em ServiceMetrics

  2. Verifique as métricas da fila de fios em detalhes:

  • Vá para a interface do usuário do Yarn, verifique as métricas do agendador do Yarn através de https://YOURCLUSTERNAME.azurehdinsight.net/yarnui/hn/cluster/scheduler
  • Como alternativa, você pode verificar as métricas do agendador de fios por meio da API Yarn Rest. Por exemplo, curl -u "xxxx" -sS -G "https://YOURCLUSTERNAME.azurehdinsight.net/ws/v1/cluster/scheduler". Para ESP, você deve usar o usuário administrador de domínio.
  1. Calcular recursos totais para seu novo aplicativo
  • Todos os recursos dos executores: spark.executor.instances * (spark.executor.memory + spark.yarn.executor.memoryOverhead) and spark.executor.instances * spark.executor.cores. Veja mais informações em configuração de executores de faísca
  • ApplicationMaster
    • No modo de cluster, use spark.driver.memory e spark.driver.cores
    • No modo cliente, use spark.yarn.am.memory+spark.yarn.am.memoryOverhead e spark.yarn.am.cores

Nota

yarn.scheduler.minimum-allocation-mb <= spark.executor.memory+spark.yarn.executor.memoryOverhead <= yarn.scheduler.maximum-allocation-mb

  1. Compare os recursos totais do seu novo aplicativo com os recursos disponíveis do yarn em sua fila especificada

Etapa 3: Acompanhe seu aplicativo de faísca

  1. Monitore seu aplicativo spark em execução por meio da interface do usuário do Spark

  2. Monitore seu aplicativo spark completo ou incompleto por meio da interface do usuário do Spark History Server

Precisamos identificar os sintomas abaixo por meio da interface do usuário do Spark ou do Spark History:

  • Qual estágio é lento
  • São v-cores de CPU executores totais totalmente utilizados na Linha do Tempo de Evento na guia Palco
  • Se utilizar o SQL do Apache Spark, qual é o plano físico no separador SQL?
  • O DAG é demasiado longo numa fase?
  • Observe as métricas das tarefas (tamanho de entrada, tamanho de gravação aleatória, tempo de GC) na guia Palco

Veja mais informações em Monitorando seus aplicativos Spark

Etapa 4: Otimize seu aplicativo de faísca

Há muitas otimizações que podem ajudá-lo a superar esses desafios, como o armazenamento em cache e permitir a distorção de dados.

Em cada um dos artigos a seguir, você pode encontrar informações sobre diferentes aspetos da otimização do Spark.

Otimizar partições SQL do Spark

  • spark.sql.shuffle.partitions é 200 por padrão. Podemos ajustar com base nas necessidades de negócios ao embaralhar dados para junções ou agregações.
  • spark.sql.files.maxPartitionBytes é 1G por padrão no IDH. O número máximo de bytes para empacotar em uma única partição ao ler arquivos. Essa configuração só é eficaz ao usar fontes baseadas em arquivos, como Parquet, JSON e ORC.
  • AQE no Spark 3.0. Consulte Execução adaptável de consultas

Próximos passos