Compartilhar via


Depuração com a UI do Spark

Este artigo descreve algumas opções de depuração disponíveis para seu aplicativo Apache Spark:

  • Interface do usuário do Spark
  • Logs de driver
  • Logs do executor

Consulte Diagnosticar problemas de custo e desempenho usando a interface do usuário do Spark para ver como diagnosticar problemas de custo e desempenho usando a interface do usuário do Spark.

Interface do usuário do Spark

Depois de iniciar um trabalho, a interface do usuário do Spark mostrará informações sobre o que está acontecendo em seu aplicativo. Para acessar a interface do usuário do Spark, selecione sua computação na página De computação e clique na guia interface do usuário do Spark :

Interface do usuário do Spark

Guia Streaming

Na interface do usuário do Spark, você verá uma guia Streaming se um trabalho de streaming estiver em execução na computação. Se não houver nenhum trabalho de streaming em execução nesta computação, essa guia não estará visível. Você pode pular para os logs do Driver para aprender como verificar exceções que possam ter ocorrido durante o início do trabalho de streaming.

Esta página permite que você verifique se seu aplicativo de streaming está recebendo eventos de entrada de sua origem. Por exemplo, você pode ver que o trabalho recebe 1000 eventos/segundo.

Observação

Para TextFileStream, como os arquivos são de entrada, o número de eventos de entrada é sempre 0. Nesses casos, você pode examinar a seção Lotes Concluídos no notebook para descobrir como encontrar mais informações.

Se você tiver um aplicativo que receba vários fluxos de entrada, poderá clicar no link Taxa de Entrada que mostrará o # de eventos recebidos para cada receptor.

Tempo de processamento

Ao rolar para baixo, localize o grafo para Tempo de Processamento. Esse é um dos principais grafos para entender o desempenho do trabalho de streaming. Como regra geral, é bom processar cada lote dentro de 80% do tempo de processamento em lotes.

Se o tempo médio de processamento for mais próximo ou maior do que o intervalo de lotes, o aplicativo de streaming começará a ser colocado na fila, resultando em uma lista de pendências, o que poderá acabar com o trabalho de streaming.

Lotes concluídos

No final da página, você verá uma lista de todos os lotes concluídos. A página exibe detalhes sobre os últimos 1000 lotes concluídos. Na tabela, você pode obter o # de eventos processados para cada lote e seu tempo de processamento. Se você quiser saber mais sobre o que aconteceu em um dos lotes, clique no link do lote para acessar a página de detalhes do Lote .

Página de detalhes do lote

A página de detalhes do Lote tem todos os detalhes sobre um lote. Duas coisas importantes são:

  • Entrada: contém detalhes sobre a entrada para o lote. Nesse caso, contém detalhes sobre o tópico do Apache Kafka, a partição e os deslocamentos lidos pelo Streaming Estruturado do Spark para esse lote. No caso de TextFileStream, você verá uma lista de nomes de arquivo que foi lida para este lote. Essa é a melhor maneira de começar a depurar um aplicativo de streaming que lê arquivos de texto.
  • Processamento: você pode clicar no link para a ID do trabalho que tem todos os detalhes sobre o processamento feito durante este lote.

Página de detalhes do trabalho

A página de detalhes do trabalho mostra uma visualização de DAG. Isso é útil para entender a ordem das operações e dependências para cada lote. Por exemplo, isso pode mostrar que uma entrada de leitura em lote de um fluxo direto do Kafka foi seguida por uma operação de flat map e, em seguida, por uma operação de map, e que o fluxo resultante foi então usado para atualizar um estado global usando updateStateByKey.

As caixas cinza representam estágios ignorados. O Spark é inteligente o suficiente para ignorar alguns estágios se eles não precisarem ser recomputados. Se os dados estiverem em ponto de verificação ou armazenados em cache, o Spark ignorará a recompilação desses estágios. No exemplo de streaming anterior, esses estágios correspondem à dependência de lotes anteriores devido a updateStateBykey. Como o Streaming Estruturado do Spark verifica internamente o fluxo e lê do ponto de verificação em vez de depender dos lotes anteriores, eles são mostrados como estágios esmaecidos.

Na parte inferior da página, você também encontrará a lista de trabalhos que foram executados para este lote. Você pode clicar nos links na descrição para detalhar ainda mais a execução do nível da tarefa.

Página de detalhes da tarefa

Esse é o nível mais granular de depuração possível na interface do usuário do Spark para um aplicativo do Spark. Esta página tem todas as tarefas que foram executadas para este lote. Se você estiver investigando problemas de desempenho do seu aplicativo de streaming, esta página fornece informações como o número de tarefas executadas e em quais executores foram executadas, além de informações de shuffle.

Dica

Verifique se as tarefas são executadas em vários executores (nós) no seu sistema de computação para ter paralelismo suficiente durante o processamento. Se você tiver um único receptor, às vezes apenas um executor poderá estar fazendo todo o trabalho, embora tenha mais de um executor em sua computação.

Despejo de thread

Um dump de thread mostra um instantâneo dos estados das threads de uma JVM.

Despejos de thread são úteis na depuração de uma tarefa específica em suspensão ou com execução lenta. Para visualizar um thread dump de uma tarefa específica na interface do Spark:

  1. Clique na guia Trabalhos.
  2. Na tabela Trabalhos , localize o trabalho de destino que corresponde ao despejo de thread que você deseja ver e clique no link na coluna Descrição .
  3. Na tabela Estágios do trabalho, localize o estágio de destino que corresponde ao despejo de thread que você deseja ver e clique no link na coluna Descrição .
  4. Na lista tarefas do estágio, localize a tarefa de destino que corresponde ao despejo de thread que você deseja ver e anote seus valores de ID de Tarefa e ID do Executor .
  5. Clique na guia Executores .
  6. Na tabela Executores , localize a linha que contém o valor da ID do Executor que corresponde ao valor da ID do Executor que você anotou anteriormente. Nessa linha, clique no link na coluna Despejo de Thread.
  7. Na tabela Despejo de thread para o executor, clique na linha em que a coluna Nome do Thread contém o TID seguido pelo valor da ID da Tarefa que você anotou anteriormente. (Se a tarefa tiver terminado de ser executada, você não encontrará um thread correspondente). O dump de thread da tarefa é mostrado.

Despejos de thread também são úteis para problemas de depuração em que o driver parece estar suspenso (por exemplo, nenhuma barra de progresso do Spark está sendo exibida) ou não está progredindo nas consultas (por exemplo, as barras de progresso do Spark estão travadas em 100%). Para visualizar o thread dump do driver na interface do usuário do Spark:

  1. Clique na guia Executores .
  2. Na tabela Executores, na linha driver, clique no link na coluna Despejo de Thread. O despejo de thread do driver é mostrado.

Logs de driver

Os logs de driver são úteis nos seguintes casos:

  • Exceções: às vezes, talvez você não veja a guia Streaming na interface do usuário do Spark. Isso ocorre porque o trabalho de Streaming não foi iniciado devido a alguma exceção. Você pode detalhar mais os Logs do driver para ver o rastreamento de pilha da exceção. Em alguns casos, o trabalho de streaming pode ter sido iniciado corretamente. Mas você verá que todos os lotes nunca vão para a seção de lotes concluídos. Todos podem estar em estado de processamento ou com falha. Nesses casos, os logs de driver também são úteis para entender a natureza dos problemas subjacentes.
  • Impressões: todas as instruções de impressão como parte do DAG também aparecem nos logs.

Observação

Quem pode acessar logs de driver depende do modo de acesso do recurso de computação. Para computação com o modo de acesso Standard, somente os administradores do espaço de trabalho podem acessar os registros do driver. Para computação com modo de acesso dedicado, o usuário ou grupo dedicado e os administradores do workspace podem acessar os logs do driver.

Logs do executor

Os logs do executor são úteis se você vir que determinadas tarefas estão se comportando mal e deseja ver os logs para tarefas específicas. Na página de detalhes da tarefa mostrada acima, você pode obter o executor onde a tarefa foi executada. Depois de fazer isso, acesse a página da interface do usuário de computação, clique nos nós # e, em seguida, no mestre. A página mestra lista todos os trabalhadores. Você pode escolher a função de trabalho em que a tarefa suspeita foi executada e, em seguida, acessar a saída do log4j.

Observação

Os logs do executor não estão disponíveis para computação com o modo de acesso Standard . Para computação com modo de acesso dedicado, o usuário ou grupo dedicado e os administradores do workspace podem acessar os logs do executor.