Partilhar via


Depuração com a interface do usuário do Spark

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

  • Interface do usuário do Spark
  • Registos de motoristas
  • Registos do Executor

Consulte Diagnosticar problemas de custo e desempenho usando a interface do usuário do Spark para 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 mostra 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 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 sendo executado na computação. Se não houver nenhum trabalho de streaming em execução neste computador, essa guia não estará visível. Você pode pular para os logs do Driver em para saber como verificar exceções que possam ter ocorrido ao iniciar a tarefa de streaming.

Esta página permite-lhe verificar se a sua aplicação de streaming está a receber quaisquer eventos de entrada da sua fonte. Por exemplo, você pode ver que o trabalho recebe 1000 eventos/segundo.

Observação

Em TextFileStream, como os ficheiros são de entrada, o número de eventos de entrada é sempre 0. Nesses casos, você pode olhar para a seção Lotes concluídos no bloco de anotações para descobrir como encontrar mais informações.

Se você tiver um aplicativo que recebe vários fluxos de entrada, você pode clicar no link Taxa de entrada que mostrará o # de eventos recebidos para cada recetor.

Tempo de processamento

Ao rolar para baixo, encontre o gráfico de Tempo de processamento. Este é um dos principais gráficos para entender o desempenho do seu trabalho de streaming. Como regra geral, é positivo se for possível processar cada lote dentro de 80% do tempo de processamento do lote.

Se o tempo médio de processamento for próximo ou maior que o seu intervalo de lote, terá uma aplicação de streaming que começará a enfileirar, resultando em backlog em breve, o que pode eventualmente levar à falha do seu 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 quiser saber mais sobre o que aconteceu em um dos lotes, clique no link do lote para acessar a página Detalhes do lote .

Página de detalhes do lote

A página Detalhes do lote tem todos os detalhes sobre um lote. Duas coisas fundamentais são:

  • Entrada: Tem detalhes sobre a entrada para o lote de dados. Neste caso, contém detalhes sobre o tópico, a partição e os offsets do Apache Kafka lidos pelo Spark Structured Streaming para este lote. No caso de TextFileStream, você verá uma lista de nomes de arquivo que foram lidos para este lote. Esta é a melhor maneira de começar a depurar uma aplicação de streaming a ler a partir de arquivos de texto.
  • Processamento: Você pode clicar no link para o 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 do DAG. Isso é útil para entender a ordem das operações e dependências de cada lote. Por exemplo, isso pode mostrar que um lote leu a entrada de um fluxo direto de Kafka seguido por uma operação de mapa plano e, em seguida, uma operação de mapa, e que o fluxo resultante foi usado para atualizar um estado global usando updateStateByKey.

As caixas cinzentas representam fases ignoradas. O Spark é inteligente o suficiente para pular alguns estágios se eles não precisarem ser recalculados. Se os dados estiverem marcados ou armazenados em cache, o Spark ignorará a recomputação desses estágios. No exemplo de streaming anterior, esses estágios correspondem à dependência de lotes anteriores devido updateStateBykeyao . Como o Spark Structured Streaming verifica internamente o fluxo e ele lê a partir do ponto de verificação em vez de depender dos lotes anteriores, eles são mostrados como estágios acinzentados.

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 aprofundar a execução no nível da tarefa.

Página de detalhes da tarefa

Este é o nível mais granular de depuração que se pode ter a partir da interface de utilizador do Spark para uma aplicação 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 que foram executadas e onde elas foram executadas (em quais executores) e informações aleatórias.

Dica

Certifique-se de que as tarefas sejam executadas em vários executores (nós) em sua computação para ter paralelismo suficiente durante o processamento. Se você tiver um único recetor, às vezes apenas um executor pode estar fazendo todo o trabalho, embora você tenha mais de um executor em sua computação.

Despejo de thread

Um dump de thread mostra uma captura dos estados dos threads de uma JVM.

Os dumps de thread são úteis na depuração de uma tarefa específica suspensa ou de execução lenta. Para visualizar o thread dump de uma tarefa específica na interface de utilizador do Spark.

  1. Clique no separador Empregos.
  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 da Tarefa e ID do Executor .
  5. Clique na guia Executores .
  6. Na tabela Executores , localize a linha que contém o valor 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 Dump de thread para executor , clique na linha em que a coluna Nome do thread contém TID seguida pelo valor de ID da tarefa que você anotou anteriormente. (Se a tarefa tiver terminado de ser executada, você não encontrará um thread correspondente). O despejo de thread da tarefa é mostrado.

Os dumps de thread também são úteis para depurar problemas em que o driver parece estar travado (por exemplo, nenhuma barra de progresso do Spark está aparecendo) ou não progredindo em consultas (por exemplo, as barras de progresso do Spark estão presas a 100%). Para exibir o despejo de thread 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 Thread Dump. O despejo de thread do driver é mostrado.

Registos de motoristas

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

  • Exceções: Às vezes, você pode não ver a guia Streaming na interface do usuário do Spark. Isso ocorre porque a tarefa de streaming não foi iniciada por causa de uma exceção. Pode aprofundar-se nos registos do driver para examinar o traço de pilha da exceção. Em alguns casos, a tarefa de streaming pode ter sido iniciada corretamente. Mas verá que todos os lotes não irão para a secção dos Lotes Concluídos. Todos eles podem estar em processamento ou em estado de falha. Nesses casos, os logs de driver também são úteis para entender a natureza dos problemas subjacentes.
  • Impressões: todas as declarações de impressão como parte do DAG também aparecem nos Logs.

Observação

Quem pode acessar os logs do driver depende do modo de acesso do recurso de computação. Para computação com o modo de acesso padrão, apenas os administradores do espaço de trabalho podem aceder aos logs do driver. Para computação com o modo de acesso dedicado, o utilizador dedicado ou os administradores do grupo e do espaço de trabalho podem acessar os registos do controlador.

Registos do Executor

Os logs do executor são úteis se você vir que certas tarefas estão se comportando incorretamente e gostaria de 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 disso, você pode ir para a página da interface do usuário de computação, clicar nos nós # e, em seguida, no mestre. A página mestra lista todos os trabalhadores. Você pode escolher o trabalhador onde a tarefa suspeita foi executada e, em seguida, chegar à saída log4j.

Observação

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