Use o servidor de histórico estendido do Apache Spark para depurar e diagnosticar aplicativos Apache Spark

Este artigo fornece orientação sobre como usar o servidor de histórico estendido do Apache Spark para depurar e diagnosticar aplicativos Apache Spark concluídos e em execução.

Aceder ao servidor do histórico Apache Spark

O servidor de histórico do Apache Spark é a interface do usuário da web para aplicativos Spark concluídos e em execução. Você pode abrir a interface do usuário da web (UI) do Apache Spark no bloco de anotações do indicador de progresso ou na página de detalhes do aplicativo Apache Spark.

Abra a interface do usuário da Web do Spark no bloco de anotações do indicador de progresso

Quando um trabalho do Apache Spark é acionado, o botão para abrir a interface do usuário da web do Spark está dentro da opção Mais ação no indicador de progresso. Selecione Spark web UI e aguarde alguns segundos e, em seguida, a página Spark UI é exibida.

Captura de tela mostrando a abertura da interface do usuário da Web do Spark a partir do bloco de anotações do indicador de progresso.

Abra a interface do usuário da Web do Spark na página de detalhes do aplicativo Apache Spark

A interface do usuário da Web do Spark também pode ser aberta através da página de detalhes do aplicativo Apache Spark. Selecione Monitor no lado esquerdo da página e, em seguida, selecione um aplicativo Apache Spark. A página de detalhes do aplicativo é exibida.

Captura de tela mostrando a abertura da interface do usuário da Web do Spark na página de detalhes do aplicativo Apache Spark.

Para um aplicativo Apache Spark cujo status está em execução, o botão mostra a interface do usuário do Spark. Selecione Spark UI e a página Spark UI será exibida.

A captura de ecrã mostra o botão que exibe o Spark UI no estado em execução.

Para um aplicativo Apache Spark cujo status é encerrado, o status final pode ser Parado, Falhado, Cancelado ou Concluído. O botão mostra o servidor de histórico do Spark. Selecione Servidor de histórico do Spark e a página da interface do usuário do Spark será exibida.

A captura de ecrã mostra o botão que exibe a interface do utilizador do Spark no estado terminado.

Carregamento baseado em instantâneos para registos de eventos de grande dimensão

Foi introduzido um novo método de carregamento baseado em snapshots para o Spark History Server, otimizado para grandes cenários de registo de eventos.

Com esta melhoria, a interface do Spark revela progressivamente os dados disponíveis em vez de esperar que a repetição completa termine. Quando o tamanho do registo de eventos é de 6 GB ou maior, é exibida uma mensagem de carregamento para indicar que pode ser necessário tempo adicional de carregamento (normalmente alguns minutos).

Assim que um snapshot parcial está disponível, a interface é renderizada usando esses dados. Uma barra de mensagens no topo indica que os dados ainda estão a ser processados em segundo plano. Quando a repetição completa termina, a barra de mensagens é automaticamente removida e a visualização completa é exibida.

Com esta experiência, pode:

  • Veja uma mensagem de carregamento clara para registos de eventos grandes (≥ 6 GB), para saber que o sistema está a processar ativamente e não a responder
  • Consulte antecipadamente uma captura parcial através de uma faixa de pré-visualização claramente identificada, permitindo-lhe analisar tarefas e fases sem esperar pela reprodução completa
  • Atualize a página mais tarde para carregar o conjunto de dados completo assim que o processamento estiver concluído

Quando os dados do Histórico do Spark estão totalmente carregados, a barra de mensagens de carregamento parcial desaparece e a experiência completa fica disponível.

Uma captura de ecrã que mostra o botão mostra o carregamento baseado em snapshots para registos de eventos grandes.

Explore o Servidor de História do Apache Spark

O Apache Spark History Server fornece uma interface de utilizador (UI) baseada na web que reconstrói os detalhes da execução da aplicação Spark a partir dos registos de eventos. Permite aos utilizadores analisar aplicações completas ou em execução para além do seu ciclo de vida em tempo de execução.

A interface do History Server é composta por vários separadores, cada um oferecendo uma perspetiva diferente sobre o comportamento da aplicação, o desempenho e a utilização de recursos.

Guia Trabalhos

O separador Empregos fornece uma visão geral de todos os empregos dentro de uma aplicação Spark.

Pode usar esta vista para:

  • Monitorizar o estado da tarefa (em execução, concluída com êxito ou com falha)
  • Compare a duração das tarefas
  • Identifique rapidamente tarefas com falhas ou de execução lenta

Etapas

O separador Stages mostra informações detalhadas de execução para cada fase.

Pode usar esta vista para:

  • Analisar o desempenho ao nível da etapa
  • Reveja a distribuição de tarefas e as métricas de shuffle
  • Identificar gargalos como dados enviesados ou operações dispendiosas

Captura de ecrã que mostra o separador Fase.

Limite de número de estágios

Para consideração de desempenho, por padrão, o gráfico só está disponível quando o aplicativo Spark tem menos de 500 estágios. Se houver muitos estágios, ele falhará com um erro como este:

The number of stages in this application exceeds limit (500), graph page is disabled in this case.

Como solução alternativa, antes de iniciar um aplicativo Spark, aplique esta configuração do Spark para aumentar o limite:

spark.ui.enhancement.maxGraphStages 1000

Mas observe que isso pode causar mau desempenho da página e da API, porque o conteúdo pode ser muito grande para o navegador buscar e renderizar.

Guia Armazenamento

O separador Armazenamento mostra informações sobre dados em cache.

Pode usar esta vista para:

  • Compreender a utilização de memória e disco para conjuntos de dados em cache
  • Verifique se a cache é eficaz

Ambiente

O separador Ambiente lista a configuração em tempo de execução e os detalhes do ambiente.

Pode usar esta vista para:

  • Inspecionar as definições de configuração do Spark
  • Verificar variáveis e dependências do ambiente
  • Resolução de problemas relacionados com a configuração

separador Executores

O separador Executors mostra a utilização de recursos entre executores.

Pode usar esta vista para:

  • Monitorizar a utilização da CPU e da memória
  • Analisar a distribuição de tarefas entre executores
  • Identificar falhas ou desequilíbrios do executor

Separador de grafos

O separador Graph visualiza a execução de um trabalho do Spark como um grafo acíclico dirigido (DAG), representando as relações entre etapas.

Pode usar esta vista para:

  • Compreenda como um trabalho é dividido em fases e as suas dependências
  • Identificar caminhos críticos que determinam a duração total do trabalho
  • Detetar fases falhadas ou tentar novamente
  • Repete a execução do trabalho para observar como as tarefas evoluem ao longo do tempo

Este separador é particularmente útil para compreender o fluxo de execução e identificar gargalos de desempenho de alto nível.

Captura de ecrã a mostrar o gráfico.

Separador de diagnóstico

O separador Diagnóstico oferece funcionalidades avançadas de análise, incluindo:

  • Deteção de desvio de dados
  • Análise de desvio temporal
  • Análise de uso do executor

Verifique a Inclinação de Dados, Inclinação de Tempo e Análise de Uso do Executor selecionando as abas, respectivamente.

Screenshot novamente mostrando a guia de diagnóstico de desvio de dados do sparkUI.

Este separador ajuda a identificar gargalos de desempenho e ineficiências na execução do trabalho.

Distorção de Dados

Quando seleciona a aba Distorção de Dados, as tarefas distorcidas correspondentes são exibidas com base nos parâmetros especificados.

  • Especificar parâmetros - A primeira seção exibe os parâmetros, que são usados para detetar a inclinação de dados. A regra padrão é: os dados da tarefa lidos são três vezes superiores à média dos dados da tarefa lidos e os dados da tarefa lidos têm mais de 10 MB. Se quiser definir sua própria regra para tarefas distorcidas, você pode escolher seus parâmetros. As seções Skewed Stage e Skew Char são atualizadas conforme apropriado.

  • Palco enviesado - A segunda seção exibe palcos, que têm tarefas enviesadas que cumprem os critérios especificados anteriormente. Se houver mais de uma tarefa distorcida em um estágio, a tabela de estágio distorcida exibirá apenas a tarefa mais distorcida (por exemplo, os maiores dados para a distorção de dados).

    Captura de ecrã a mostrar o separador de distorção de dados de diagnóstico do Spark UI.

  • Gráfico de inclinação - Quando uma linha na tabela de estágio de inclinação é selecionada, o gráfico de inclinação exibe mais detalhes de distribuição de tarefas com base na leitura de dados e no tempo de execução. As tarefas distorcidas são marcadas em vermelho e as tarefas normais são marcadas em azul. O gráfico exibe até 100 tarefas de exemplo e os detalhes da tarefa são exibidos no painel inferior direito.

    Captura de tela mostrando o gráfico de inclinação de faísca ui para o estágio 10.

Desvio Temporal

A Guia Distorção Temporal exibe tarefas distorcidas com base no seu tempo de execução.

  • Especificar parâmetros - A primeira seção exibe os parâmetros, que são usados para detetar distorção de tempo. O critério padrão para detetar distorção de tempo é: o tempo de execução da tarefa é maior que três vezes o tempo médio de execução e o tempo de execução da tarefa é maior que 30 segundos. Você pode alterar os parâmetros com base em suas necessidades. O Palco Distorcido e Gráfico de Distorção exibem as informações de estágios e tarefas correspondentes, assim como a aba Distorção de Dados descrita anteriormente.

  • Selecione Distorção de tempo e, em seguida, o resultado filtrado é exibido na seção Estágio Distorcido de acordo com os parâmetros definidos na seção Especificar Parâmetros. Selecione um item na secção Palco Enviesado, em seguida, o gráfico correspondente é criado na secção 3, e os detalhes da tarefa são exibidos no painel inferior direito.

    Screenshot mostrando a seção de diagnosis time skew do Spark UI.

Análise de uso do executor

Esse recurso foi preterido no Fabric agora. Se você ainda quiser usar isso como uma solução alternativa, acesse a página adicionando explicitamente "/executorusage" atrás do caminho "/diagnostic" no URL, desta forma:

Captura de tela mostrando como modificar a url.

Separador SQL/DataFrame

Para cargas de trabalho que utilizam Spark SQL, o separador SQL fornece insights ao nível da consulta.

Pode usar esta vista para:

  • Analisar planos de execução de consultas
  • Duração e desempenho da consulta de revisão

Nota

A disponibilidade de certos separadores depende do tipo de carga de trabalho e das funcionalidades do Spark ativadas.

Spark Executor Rolling Logs: Acesso Facilitado para Tarefas Grandes e Longas

À medida que os aplicativos Spark continuam a crescer em escala e duração, o gerenciamento e a análise eficientes de logs se tornaram cada vez mais críticos. Para atender a essas necessidades em evolução, introduzimos aprimoramentos no Spark History Server (para aplicativos concluídos) e na interface do usuário do Spark (para aplicativos em execução), permitindo logs contínuos do executor para o Spark 3.4 e superior.

Com esse aprimoramento, quando um log do executor excede 16 MB ou o trabalho do Spark é executado por mais de uma hora, o sistema divide automaticamente os logs em segmentos por hora. Isso facilita a navegação, visualização e download de logs sem lidar com arquivos extremamente grandes.

Agora pode:

  • Visualize logs por hora para identificar rapidamente janelas de execução específicas
  • Acesse os logs ativos mais recentes enquanto o trabalho ainda está em execução.
  • Faça o download de logs horários individuais ou todos os logs juntos, conforme necessário

Esse recurso permite que os usuários localizem e analisem logs de um determinado ponto de tempo com facilidade, evitando o incômodo de baixar ou abrir um único arquivo de log maciço.

Abaixo está um exemplo da visualização dos logs contínuos do Executor:

Captura de tela mostrando logs em rotação do executor Spark.