Pular para o conteúdo principal

depuração com a UI Apache Spark

Este artigo descreve as diferentes opções de depuração disponíveis para ver os componentes internos de suas aplicações Spark Apache. Os três lugares importantes para procurar são:

  • IU do Spark
  • Logs do driver
  • executor logs

Consulte Diagnosticar problemas de custo e desempenho usando o site Spark UI para obter informações sobre como diagnosticar problemas de custo e desempenho usando o site Spark UI.

Spark UI

Quando o senhor começa a trabalhar, o site Spark UI mostra informações sobre o que está acontecendo no seu aplicativo. Para acessar o site Spark UI, clique no link em anexo compute:

transmissão tab

Quando chegar ao site Spark UI, o senhor verá uma transmissão tab se um Job de transmissão estiver em execução nesse site compute. Se não houver nenhum trabalho de transmissão em execução nesse compute, esse tab não estará visível. O senhor pode pular para o Driver logs para saber como verificar as exceções que podem ter ocorrido ao iniciar o Job de transmissão.

A primeira coisa a procurar nessa página é verificar se o aplicativo de transmissão está recebendo algum evento de entrada da fonte. Nesse caso, o senhor pode ver que o trabalho recebe 1.000 eventos por segundo.

nota

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

Se o senhor tiver um aplicativo que recebe várias transmissões de entrada, poderá clicar no link Input Rate (Taxa de entrada) , que mostrará o número de eventos recebidos para cada receptor.

Tempo de processamento

Ao rolar a tela para baixo, encontre o gráfico de Tempo de processamento . Esse é um dos key gráficos para entender o desempenho de seu trabalho de transmissão. Como regra geral, é bom que o senhor possa processar cada lote dentro de 80% do seu tempo de processamento de lotes.

Para esse aplicativo, o intervalo de lotes foi de 2 segundos. O tempo médio de processamento é de 450 ms, o que está bem abaixo do intervalo de lotes. Se o tempo médio de processamento for menor ou maior do que o intervalo de lotes, o senhor terá um aplicativo de transmissão que começará a ficar na fila, resultando em um backlog em breve, o que pode acabar derrubando seu Job de transmissão.

Lotes concluídos

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

página de detalhes dos lotes

Esta página tem todos os detalhes que o senhor deseja saber sobre um lote. Duas key coisas são:

  • Entrada: Contém detalhes sobre a entrada para os lotes. Nesse caso, ele contém detalhes sobre o tópico Apache Kafka , a partição e os offsets lidos pela Spark transmissão estruturada para esse lote. No caso do TextFileStream, o senhor vê uma lista de nomes de arquivos que foram lidos para esse lote. Essa é a melhor maneira de começar a depuração de um aplicativo de transmissão que lê arquivos de texto.
  • Processamento: O senhor pode clicar no link para o Job ID, que contém todos os detalhes sobre o processamento feito durante esse lote.

Job página de detalhes

A página de detalhes Job mostra uma visualização DAG. Isso é muito útil para entender a ordem das operações e dependências de cada lote. Nesse caso, você pode ver que os lotes lêem a entrada da transmissão direta do Kafka seguida por um mapa plano de operações e, em seguida, um mapa de operações. A transmissão resultante foi então usada para atualizar um estado global usando updateStateByKey. (As caixas cinzas representam passos ignoradas. O Spark é inteligente o suficiente para pular alguns estágios se eles não precisarem ser recalculados. Se os dados forem marcados ou armazenados em cache, o Spark ignorará a recomputação desses estágios. Nesse caso, esses estágios correspondem à dependência de lotes anteriores por causa de updateStateBykey. Como o Spark transmissão estructurada verifica internamente os pontos de verificação da transmissão e 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, o senhor também encontrará a lista de trabalhos que foram executados para esse lote. O senhor pode clicar nos links da descrição para aprofundar a execução no nível da tarefa.

Página de detalhes da tarefa

Esse é o nível mais granular de depuração que o senhor pode obter no site Spark UI para aplicativos Spark. Esta página contém todas as tarefas que foram executadas para esse lote. Se o senhor estiver investigando problemas de desempenho do seu aplicativo de transmissão, essa página fornecerá informações como o número de tarefas que foram executadas e onde elas foram executadas (em qual executor) e informações de embaralhamento

dica

Certifique-se de que a tarefa seja executada em vários executores (nós) em seu site compute para ter paralelismo suficiente durante o processamento. Se o senhor tiver um único receptor, às vezes apenas um executor pode estar fazendo todo o trabalho, embora tenha mais de um executor no seu compute.

Despejo de roscas

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

Os despejos de thread são úteis na depuração de uma tarefa específica suspensa ou de execução lenta. Para view o thread dump de uma tarefa específica no Spark UI:

  1. Clique em Jobs tab.
  2. Na tabela Jobs , localize o Job de destino que corresponde ao thread dump que o senhor deseja ver e clique no link na coluna Description .
  3. Na tabela Job's Stages (Estágios do trabalho), localize o estágio de destino que corresponde ao thread dump que o senhor deseja ver e clique no link na coluna Description (Descrição ).
  4. Na lista de tarefas do estágio, localize a tarefa de destino que corresponde ao despejo de thread que o senhor deseja ver e anote os valores de ID da tarefa e ID do executor .
  5. Clique no executor tab.
  6. Na tabela de executores , encontre a linha que contém o valor de ID do executor que corresponde ao valor de ID do executor que o senhor anotou anteriormente. Nessa linha, clique no link na coluna Thread Dump .
  7. Na tabela Thread dump for executor , clique na linha em que a coluna Thread Name contém TID seguido do valor de ID da tarefa que o senhor observou anteriormente. (Se a tarefa tiver terminado de ser executada, o senhor não encontrará um thread correspondente). O despejo de thread da tarefa é mostrado.

Os despejos de thread também são úteis para problemas de depuração em que o driver parece estar travado (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 presas em 100%). Para view o thread dump do driver em Spark UI:

  1. Clique no executor tab.
  2. Na tabela do executor , na linha do driver , clique no link na coluna Thread Dump . O despejo de rosca do motorista é mostrado.

Motorista logs

O driver logs é útil para duas finalidades:

  • Exceções: Às vezes, o senhor pode não ver a transmissão tab no site Spark UI. Isso ocorre porque a transmissão de Job não foi iniciada por causa de alguma exceção. O senhor pode pesquisar nos logs do driver para ver o rastreamento de pilha da exceção. Em alguns casos, a transmissão do Job pode ter começado corretamente. Mas o senhor verá todos os lotes sem nunca ir para a seção Lotes concluídos. Eles podem estar todos em processamento ou em estado de falha. Nesses casos também, o driver logs pode ser útil para entender a natureza dos problemas subjacentes.
  • Impressões: Todas as instruções de impressão como parte do DAG também aparecem no site logs.

executor logs

O executor logs às vezes é útil se o senhor perceber que determinadas tarefas estão se comportando mal e quiser ver o logs de uma tarefa específica. Na página de detalhes da tarefa mostrada acima, o senhor pode obter o endereço executor onde a tarefa foi executada. Depois disso, o senhor pode acessar a página da interface do usuário compute, clicar em #nodes e, em seguida, no master. A página principal lista todos os funcionários. O senhor pode escolher o site worker onde a tarefa suspeita foi executada e, em seguida, acessar a saída do log4j.