depuração com o Spark UI
Este artigo descreve algumas opções de depuração disponíveis para suas aplicações Spark no Apache:
- 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
Ao iniciar um trabalho, a janela “ Spark UI ” exibe informações sobre o que está ocorrendo em seu aplicativo. Para acessar o Spark UI, selecione o compute na página de computação e clique em Spark UI tab:
transmissão tab
Dentro do " Spark UI", você verá uma transmissão " tab " se uma tarefa de transmissão estiver em execução no " compute". Se não houver nenhuma tarefa de transmissão em execução neste compute, este tab não estará visível. É possível avançar para o item logs “ ” ( Driver de transmissão) para obter informações sobre como verificar se ocorreram exceções durante o início do trabalho de transmissão.
Esta página permite verificar se a sua aplicação de transmissão está recebendo eventos de entrada da sua fonte. Por exemplo, você pode observar que o trabalho recebe 1000 eventos por segundo.
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.
Se o tempo médio de processamento estiver próximo ou superior ao intervalo dos seus lotes, você terá um aplicativo de transmissão que começará a enfileirar, resultando em um acúmulo de tarefas em breve, o que pode interromper seu trabalho de transmissão eventualmente.
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, é possível obter o número de eventos processados para cada lote e o tempo de processamento. Caso deseje saber mais sobre o que ocorreu em um dos lotes, é possível clicar no link lotes para acessar a página de detalhes dos lotes .
página de detalhes dos lotes
A página de detalhes do lote contém todas as informações sobre um lote. Dois aspectos importantes do " key " 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 Detalhes da tarefa exibe uma visualização DAG. Isso é útil para compreender a ordem das operações e dependências para cada lote. Por exemplo, isso poderia indicar que um lote leu a entrada de uma transmissão direta ( Kafka ) seguida por operações de mapeamento plano (flat map) e, em seguida, uma operação de mapeamento (map), e que a transmissão resultante foi então utilizada para atualizar um estado global utilizando updateStateByKey.
As caixas acinzentadas representam etapas ignoradas. O Spark é inteligente o suficiente para ignorar algumas etapas se elas não precisarem ser recalculadas. Se os dados forem verificados ou armazenados em cache, o Spark ignora o recálculo dessas etapas. No exemplo anterior de transmissão, essas etapas correspondem à dependência dos lotes anteriores devido a um updateStateBykey
. Como a transmissão estruturada Spark 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 exibidos como estágios em cinza.
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
Este é o nível mais granular de depuração que você pode obter no Spark UI para aplicações Spark. Esta página contém todas as tarefas que foram executadas para este lote. Se você está investigando problemas de desempenho da sua aplicação de transmissão, esta página fornece informações como o número de tarefas que foram executadas e onde foram executadas (em qual executor) e informações de shuffle.
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:
- Clique em Jobs tab.
- 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 .
- 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 ).
- 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 .
- Clique no executor tab.
- 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 .
- 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:
- Clique no executor tab.
- Na tabela do executor , na linha do driver , clique no link na coluna Thread Dump . O despejo de rosca do motorista é mostrado.
Motorista logs
Os drivers logs são úteis nos seguintes casos:
- Exceções: Ocasionalmente, é possível que a transmissão “ tab ” não seja exibida na lista “ Spark UI”. Isso ocorre porque a tarefa de transmissão não foi iniciada devido a alguma exceção. É possível acessar o Driver logs para visualizar o rastreamento da pilha da exceção. Em alguns casos, a transmissão pode não ter iniciado corretamente. No entanto, você observará que todos os lotes nunca serão transferidos para a seção de lotes concluídos. Eles podem estar todos em processamento ou em estado de falha. Nesses casos, os drivers logs também são úteis para compreender a natureza dos problemas subjacentes.
- Impressões: Todas as instruções de impressão como parte do DAG também aparecem no site logs.
Quem pode acessar o driver logs depende do modo de acesso do recurso compute. Para compute com o modo de acesso Standard , somente os administradores de workspace podem acessar o driver logs. Para compute com o modo de acesso Dedicated , o usuário ou grupo dedicado e os administradores de workspace podem acessar o driver logs.
executor logs
Os executores ` logs ` são úteis se você perceber que determinadas tarefas estão apresentando comportamento anormal e desejar visualizar o ` logs ` para tarefas específicas. Na página de detalhes da tarefa mostrada acima, é possível obter o endereço executor onde a tarefa foi executada. Após obter isso, acesse a página da interface do usuário compute, clique nos nós # e, em seguida, no mestre. A página principal lista todos os trabalhadores. É possível selecionar o " worker " (log de tarefas) onde a tarefa suspeita foi executada e, em seguida, acessar a saída do log4j.
O executor logs não está disponível para compute com o modo de acesso Standard . Para o compute com modo de acesso Dedicated , o usuário ou grupo dedicado e os administradores do workspace podem acessar o executor logs.