Ajuste de desempenho no Apache Spark para engenheiros de dados

Conteúdo

Enquanto trabalhava no problema de ajuste do aplicativo Spark, Passei um tempo considerável tentando entender as visualizações da IU da Web do Spark. Spark Web UI é uma ferramenta muito útil para esta tarefa. Para iniciantes, torna-se muito difícil obter insights sobre um problema apenas a partir dessas visualizações. Embora existam recursos muito bons sobre o desempenho do Spark, a informação foi espalhada. Portanto, Senti a necessidade de documentar e compartilhar minhas aprendizagens.

Público-alvo e conclusões

Esta postagem pressupõe que os leitores tenham uma compreensão básica dos conceitos do Spark.. Esta postagem ajudará os iniciantes a identificar possíveis problemas de desempenho em seus aplicativos executados a partir de uma IU da Web do Spark.. O foco está apenas nas informações que não são óbvias na interface do usuário e nas inferências que podem ser extraídas dessas informações não óbvias. Observe que ele não contém uma lista exaustiva de informações para interpretar a partir da interface do usuário do Spark Web, mas apenas aqueles que achei relevantes para o meu projeto e, porém, geral o suficiente para o público saber.

Interface de usuário da web do Spark

A IU da web do Spark só está disponível quando o aplicativo está em execução. Para analisar execuções anteriores, a servidor de história deve ser habilitado para armazenar logs de eventos que podem então ser usados ​​para preencher a IU da web.

Spark Web UI exibe informações úteis sobre seu aplicativo em guias, a saber

  • Executores
  • Meio Ambiente
  • Trabalho
  • Etapas
  • Armazenar

A postagem restante descreve as intuições de cada uma das guias, na ordem mencionada.

Guia de executores

Dá informações sobre as tarefas executadas por cada executor.

FIG 1: Resumo da guia do executor

42021picture201-1198431

A partir de la figura 1, pode-se entender que existe um controlador e 5 executores, cada um dos quais funciona com 2 núcleos e 3 GB de memória.

A caixa marcada em vermelho muestra la distribución desigual de las tareas en las que un do cacho está exagerando las tareas, enquanto outros são relativamente inativos.

A caixa marcada em azul mostra que o tamanho dos dados de entrada foi 487,3 MB. Agora, este aplicativo foi executado em um tamanho de conjunto de dados de 83 MB. O tamanho dos dados de entrada compreende a leitura do conjunto de dados original e as transferências aleatórias de dados entre os nós. Isso mostra que muitos dados foram misturados (aproximadamente 400+ MB) no aplicativo.

Aba de ambiente

Existem muitos propriedades de faísca controlar e ajustar o aplicativo. Essas propriedades podem ser definidas ao enviar o trabalho ou ao criar o objeto de contexto. A menos que a propriedade seja explicitamente adicionada, não se aplica. Estamos errados ao supor que as propriedades são aplicadas com seus valores padrão, quando não é explicitamente declarado. Todas as propriedades aplicadas podem ser vistas na guia Ambiente. Se a propriedade não for vista lá, significa que a propriedade não foi aplicada de todo.

Aba Trabalhos

Un trabajo está asociado con una cadena de dependencias Resilient Distributed Conjunto de dados organizadas en un gráfico acíclico direto (DIA) que se parece com a Fig. 2. De visualizações DAG, você pode encontrar as etapas executadas e o número de etapas ignoradas. Por padrão, faísca não reutiliza suas etapas calculadas em estágios, a menos que seja persistido ou explicitamente armazenado em cache. Estágios ignorados são estágios em cache marcados em cinza, donde los valores de cálculo se almacenan en la memoria y no se vuelven a calcular después de acceder a HDFS. Uma olhada na tela do DAG é suficiente para saber se os cálculos RDD são realizados repetidamente ou se os estágios em cache são usados.

FIG 2: Exibição DAG de um trabalho

54628picture202-8604941

Guia Estágios

Fornece uma visão mais profunda do aplicativo em execução no nível da tarefa. Um estágio representa um segmento de trabalho executado em paralelo por tarefas individuais. Existe um mapeamento 1-1 entre tarefas e partições de dados, quer dizer, 1 tarefa por partição de dados. Pode-se mergulhar em um trabalho, em estágios específicos e até cada tarefa em um estágio da IU da web do Spark.

O estágio fornece uma boa visão geral das execuções: DAG exibe, cronogramas de eventos, métricas resumidas / agregação de suas tarefas.

Eu prefiro olhar os cronogramas dos eventos para analisar as tarefas. Eles dão uma representação pictórica dos detalhes do tempo investido na execução do palco. Num relance, poderíamos fazer inferências rápidas sobre o quão bem o estágio foi executado e como poderíamos melhorar ainda mais o tempo de execução.

FIG 3 – Amostra da linha do tempo do evento

90162picture203-7870562

Por exemplo, as inferências tiradas da figura 3 Poderiam ser:

  1. Os dados são divididos em 15 partições. Portanto, Eles estão correndo 15 tarefas (representado com 15 linhas verdes).
  2. Tarefas executadas em 3 nós, cada um com 2 executores
  3. O estágio é concluído apenas quando a tarefa de execução mais longa termina. Outros executores permanecem inativos até que a tarefa mais longa seja concluída.
  4. Poucas tarefas de longa duração, enquanto poucas tarefas são executadas por um período muito curto, indicando que os dados não estão bem particionados.
  5. Não foi gasto muito tempo para atrasar o agendador ou a serialização nesta fase, qual é bom.

FIG. 4 – Linha do tempo do evento de um estágio com muitas partições de dados.

56490picture204-6220746

Observando a figura 4, podemos inferir que os dados não estão bem distribuídos e particionados desnecessariamente. Da métrica de avaliação, pode ser confirmado que o agendamento da tarefa demorou mais do que o tempo de execução real. Quanto maior a porcentagem de verde na linha do tempo, mais eficiente será o cálculo do estágio.

É desejável ter menos estágios no trabalho. Sempre que os dados são misturados, um novo estágio é criado. Embaralhar é caro e, portanto, tente reduzir o número de estágios de que seu programa precisa.

Tamanho dos dados de entrada

Outra informação importante é observar o tamanho da entrada dos dados que foram embaralhados. Um dos objetivos é também reduzir o tamanho desses dados aleatórios.

FIG. 5 – Visão geral da guia Estágios.

40949picture205-6387210

A figura 5 acima mostra os estágios em que os dados se movem em MB. Isso sugere que o código pode ser melhorado para reduzir o tamanho dos dados que foram trocados entre os estágios. Por exemplo, Digamos que se um filtro foi aplicado em alguns dados para um evento 'x’ dados, então no RDD resultante, a coluna "evento" torna-se redundante, pois tecnicamente todas as linhas são do evento 'x'. Esta coluna pode ser removida de futuros RDDs criados a partir desses dados filtrados para salvar informações adicionais transferidas durante as operações de embaralhamento.

Ficha de almacenamiento

Mostra apenas RDDs que foram preservados, quer dizer, que usam persistir () o esconder (). Para torná-lo mais legível, você pode nomear o RDD enquanto o armazena usando setName (). Apenas os RDDs que você deseja manter devem ser exibidos na guia Armazenamento e podem ser facilmente reconhecíveis com os nomes personalizados fornecidos.

Resumo

Este artigo ajuda a fornecer informações para identificar problemas de interface do usuário da web do Spark, como o tamanho dos dados que foram embaralhados, o tempo de execução das etapas, Recálculo de RDD devido à falta de cache. Se alguém entende seus dados e sua aplicação, então, a distribuição de dados ideal e o número desejado de partições podem ser medidos inferindo a partir da IU em execução. A sobrecarga de um nó em relação a outros no cluster é outra área de melhoria que pode ser vista nesta interface de usuário. o resolução de algunos de estos problemas se discute más en el Artigo de ajuste de desempenho do Apache Spark.

A mídia mostrada neste artigo não é propriedade da DataPeaker e é usada a critério do autor.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.