Usar o History Server estendido do Apache Spark para depurar e diagnosticar aplicações do Apache Spark

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

Acesse o servidor de histórico do 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 web do usuário (UI) do Apache Spark no notebook de indicador de progresso ou na página de detalhes da aplicação Apache Spark.

Abrir a interface web do Spark a partir do notebook de indicador de progresso

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

Captura de tela mostrando como abrir a interface web do Spark a partir do notebook do indicador de progresso.

Como abrir 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 por meio 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 como abrir a interface web do Spark na página de detalhes do aplicativo do Apache Spark.

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

Captura de tela mostrando que o botão exibe a Spark UI no estado de execução.

Para um aplicativo Apache Spark com status encerrado, o status encerrado pode ser Interrompido, Com falha, 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 interface do usuário do Spark é exibida.

Captura de tela mostrando o botão exibindo a interface do usuário do Spark no estado encerrado.

Carregamento baseado em instantâneos para logs de eventos extensos

Um novo método de carregamento com base em snapshots foi introduzido no Spark History Server, otimizado para cenários com grandes logs de eventos.

Com esse aprimoramento, a interface do usuário do Spark revela progressivamente os dados disponíveis em vez de aguardar a conclusão da reprodução completa. Quando o tamanho do log de eventos é de 6 GB ou maior, uma mensagem de carregamento é exibida para indicar que o tempo de carregamento adicional (normalmente alguns minutos) pode ser necessário.

Assim que um instantâneo parcial estiver disponível, a interface do usuário será renderizada usando esses dados. Uma barra de mensagens na parte superior indica que os dados ainda estão sendo processados em segundo plano. Depois que a reprodução completa for concluída, a barra de mensagens será removida automaticamente e a exibição completa será exibida.

Com essa experiência, você pode:

  • Consulte uma mensagem de carregamento clara para logs de eventos grandes (≥ 6 GB), para que você saiba que o sistema está processando ativamente em vez de não responder
  • Navegue por um instantâneo parcial no início por meio de uma faixa de visualização claramente rotulada, permitindo que você investigue trabalhos e estágios sem aguardar a reprodução completa
  • Atualize a página mais tarde para carregar o conjunto de dados completo após a conclusão do processamento

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

Captura de tela mostrando que o botão exibe o carregamento baseado em instantâneo para logs de eventos grandes.

Explorar o Servidor de Histórico do Apache Spark

O Servidor de Histórico do Apache Spark fornece uma interface do usuário baseada na Web que reconstrói os detalhes de execução do aplicativo Spark dos logs de eventos. Ele permite que os usuários analisem aplicativos concluídos ou em execução além do ciclo de vida do runtime.

A interface do usuário do Servidor de Histórico consiste em várias guias, cada uma oferecendo uma perspectiva diferente para entender o comportamento do aplicativo, o desempenho e a utilização de recursos.

Tarefas

A guia Trabalhos fornece uma visão geral de alto nível de todos os trabalhos em um aplicativo Spark.

Você pode usar essa exibição para:

  • Monitore o status do trabalho (em execução, bem-sucedido ou com falha)
  • Comparar durações do trabalho
  • Identificar rapidamente trabalhos com falha ou de execução lenta

Aba Estágios

A guia Estágios mostra informações detalhadas de execução para cada estágio.

Você pode usar essa exibição para:

  • Analisar o desempenho por etapa
  • Revisar a distribuição de tarefas e as métricas de shuffle
  • Identificar gargalos, como dados distorcidos ou operações caras

Captura de tela mostrando a guia estágio.

Limite do número de estágios

Para consideração de desempenho, por padrão, o grafo só estará disponível quando o aplicativo Spark tiver 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 um desempenho ruim da página e da API, pois o conteúdo pode ser muito grande para o navegador buscar e renderizar.

Guia de Armazenamento

A guia Armazenamento mostra informações sobre dados armazenados em cache.

Você pode usar essa exibição para:

  • Entender o uso de memória e disco para conjuntos de dados armazenados em cache
  • Verificar se o cache é eficaz

Aba Ambiente

A guia Ambiente lista a configuração de runtime e os detalhes do ambiente.

Você pode usar essa exibição para:

  • Inspecionar as configurações do Spark
  • Verificar as variáveis de ambiente e as dependências
  • Solucionar problemas relacionados à configuração

Aba Executores

A guia Executores exibe a utilização de recursos entre executores.

Você pode usar essa exibição para:

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

Aba Gráfico

A aba Grafo exibe a execução de um trabalho do Spark como um grafo acíclico direcionado (DAG), representando as relações entre os estágios.

Você pode usar essa exibição para:

  • Entender como um trabalho é dividido em estágios e suas dependências
  • Identificar caminhos críticos que determinam a duração geral do trabalho
  • Detectar etapas com falha ou reexecutadas
  • Reproduzir a execução do trabalho para observar como as tarefas progridem ao longo do tempo

Essa guia é particularmente útil para entender o fluxo de execução e identificar gargalos de desempenho de alto nível.

Captura de tela mostrando o grafo.

Aba Diagnóstico

A guia Diagnóstico fornece recursos de análise avançada, incluindo:

  • Detecção de distorção de dados
  • Análise de distorção de tempo
  • Análise de uso do executor

Verifique Desbalanceamento de dados, Desbalanceamento de tempo e Análise de utilização do executor ao selecionar as respectivas guias.

Captura de tela mostrando a guia de distorção de dados de diagnóstico sparkUI novamente.

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

Distorção de dados

Quando você seleciona a guia 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 detectar a Distorção de dados. A regra padrão é: o volume de dados lidos pela tarefa é superior a três vezes a média de dados lidos por tarefa, e o volume de dados lidos pela tarefa é superior a 10 MB. Se quiser definir sua regra para tarefas com distorção, você poderá escolher seus parâmetros. As seções Skewed Stage e Skew Char são atualizadas em conformidade.

  • Estágio Distorcido: a segunda seção exibe as fases que têm tarefas distorcidas que atendem aos critérios especificados acima. Se houver mais de uma tarefa distorcida em uma fase, a tabela de fase distorcida exibirá apenas a tarefa mais distorcida (por exemplo, com os maiores dados para distorção de dados).

    Captura de tela mostrando a aba de diagnóstico de desbalanceamento de dados da interface do usuário do Spark.

  • Gráfico de Distorção: quando uma linha na tabela da fase com distorção é selecionada, o gráfico de distorção exibe mais detalhes de distribuições da tarefa com base na leitura de dados e no tempo de execução. As tarefas distorcidas são marcadas em vermelho e as 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 da interface do usuário do Spark para o estágio 10.

Distorção de tempo

A guia Distorção de Tempo exibe tarefas distorcidas com base no tempo de execução da tarefa.

  • Especificar Parâmetros: a primeira seção exibe os parâmetros, que são usados para detectar a distorção de tempo. Os critérios padrão para detectar a distorção de tempo são: o tempo de execução da tarefa é maior do 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 Estágio Distorcido e o Gráfico de Distorção exibem as informações sobre as fases e as tarefas correspondentes, assim como a guia Distorção de Dados acima.

  • Selecione Distorção de Tempo e o resultado filtrado será exibido na seção Fase Distorcida de acordo com os parâmetros definidos na seção Especificar Parâmetros. Selecione um item na seção Fase inclinada; então, o gráfico correspondente será traçado na seção 3, e os detalhes da tarefa serão exibidos no painel inferior direito.

    Captura de tela mostrando a seção de distorção de tempo de diagnóstico da interface do usuário do Spark.

Análise de uso do executor

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

Captura de tela mostrando como modificar a URL.

Guia SQL/DataFrame

Para cargas de trabalho que usam o Spark SQL, a guia SQL fornece insights no nível da consulta.

Você pode usar essa exibição para:

  • Analisar planos de execução de consulta
  • Examinar a duração e o desempenho da consulta

Observação

A disponibilidade de determinadas guias depende do tipo de carga de trabalho e dos recursos do Spark habilitados.

Logs Rotativos do Executor do Spark: Acesso Facilitado para Trabalhos Grandes e Longos

À medida que os aplicativos Spark continuam a crescer em escala e duração, o gerenciamento e a análise de log eficientes tornaram-se cada vez mais críticos. Para atender a essas necessidades em evolução, introduzimos aprimoramentos no Servidor de Histórico do Spark (para aplicativos concluídos) e na interface do usuário do Spark (para aplicativos em execução), habilitando logs rotativos do executor para Spark 3.4 e posteriores.

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, a exibição e o download de logs sem lidar com arquivos extremamente grandes.

Agora você pode:

  • Exibir logs por hora para identificar rapidamente janelas de execução específicas
  • Acesse os logs ativos mais recentes enquanto o trabalho ainda estiver em execução.
  • Baixar logs individuais por hora ou todos os logs juntos, conforme necessário

Esse recurso capacita os usuários a localizar e analisar logs de um determinado ponto de tempo com facilidade, evitando o incômodo de baixar ou abrir um arquivo de log único maciço.

Veja abaixo um exemplo da exibição Logs Contínuos do Executor:

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