Felsökning med Spark-användargränssnittet

Den här artikeln beskriver några felsökningsalternativ som är tillgängliga för ditt Apache Spark-program:

  • Spark-användargränssnitt
  • Förarloggar
  • Utförandeloggar

Se Diagnostisera kostnader och prestandaproblem med spark-användargränssnittet för att gå igenom diagnostisering av kostnader och prestandaproblem med hjälp av Spark-användargränssnittet.

Spark-användargränssnitt

När du har startat ett jobb visar Spark-användargränssnittet information om vad som händer i ditt program. För att komma till Spark-användargränssnittet väljer du din beräkning på sidan Beräkning och klickar sedan på fliken Spark-användargränssnitt :

Spark-användargränssnitt

Fliken Direktuppspelning

I Spark-användargränssnittet visas en strömningsflik om ett direktuppspelningsjobb körs på beräkningen. Om det inte finns något strömmande jobb som körs i den här beräkningen visas inte den här fliken. Du kan gå vidare till Drivrutinsloggar för att lära dig hur du söker efter undantag som kan ha inträffat när du startade strömningsjobbet.

På den här sidan kan du kontrollera om ditt strömmande program tar emot indatahändelser från källan. Du kan till exempel se att jobbet tar emot 1 000 händelser/sekund.

Notera

För TextFileStream, eftersom filer är indata, är antalet indatahändelser alltid 0. I sådana fall kan du titta på avsnittet Slutförda batchar i anteckningsboken för att ta reda på hur du hittar mer information.

Om du har ett program som tar emot flera indataströmmar kan du klicka på länken Indatafrekvens som visar antalet händelser som tas emot för varje mottagare.

Bearbetningstid

Leta reda på diagrammet för bearbetningstid när du rullar nedåt. Det här är en av de viktigaste graferna för att förstå prestandan för ditt strömningsjobb. Som en allmän tumregel är det bra om du kan bearbeta varje batch inom 80% av batchbearbetningstiden.

Om den genomsnittliga bearbetningstiden är närmare eller större än batchintervallet kommer du att ha ett strömmande program som börjar köa upp, vilket snart leder till en eftersläpning, vilket till slut kan sänka ditt strömningsjobb.

Slutförda batchar

Mot slutet av sidan visas en lista över alla slutförda batchar. Sidan visar information om de senaste 1 000 batcharna som har slutförts. Från tabellen kan du få antalet händelser som bearbetas för varje batch och deras bearbetningstid. Om du vill veta mer om vad som hände i en av batcharna kan du klicka på batchlänken för att komma till sidan Batch-information .

Sida för batchdetaljer

Sidan Batch-information innehåller all information om en batch. Två viktiga saker är:

  • Indata: Innehåller information om batchens indata. I det här fallet innehåller den information om Apache Kafka-ämne, partition och offsets som lästs av Spark-Structured-Streaming för den här satsen. När det gäller TextFileStream visas en lista med filnamn som lästes för den här batchen. Det här är det bästa sättet att börja felsöka ett strömmande program som läser från textfiler.
  • Bearbetning: Du kan klicka på länken till jobb-ID:t som innehåller all information om bearbetningen som utförs under den här batchen.

Sidan Jobbinformation

Sidan med jobbinformation visar en DAG-visualisering. Detta är användbart för att förstå ordningen på åtgärder och beroenden för varje batch. Detta kan till exempel visa att en batch läser indata från en Kafka-direktström följt av en plan kartåtgärd och sedan en kartåtgärd, och att den resulterande strömmen sedan användes för att uppdatera ett globalt tillstånd med hjälp av updateStateByKey.

Nedtonade rutor representerar överhoppade faser. Spark är smart nog att hoppa över vissa steg om de inte behöver omberäknas. Om data är kontrollpunktsbaserade eller cachelagrade hoppar Spark över att omberäkna dessa steg. I föregående strömningsexempel motsvarar dessa steg beroendet av tidigare batchar på grund av updateStateBykey. Eftersom Spark Structured Streaming internt kontrollpunkter strömmen och den läser från kontrollpunkten i stället för beroende på föregående batchar, visas de som nedtonade steg.

Längst ned på sidan hittar du även listan över jobb som har körts för den här batchen. Du kan klicka på länkarna i beskrivningen för att fördjupa dig i utförandet på uppgiftsnivå.

Uppgiftsdetaljsidan

Det här är den mest detaljerade felsökningsnivån du kan komma in på från Spark-användargränssnittet för ett Spark-program. På den här sidan finns alla uppgifter som har utförts för den här batchen. Om du undersöker prestandaproblem för ditt strömmande program innehåller den här sidan information, till exempel antalet uppgifter som har utförts och var de kördes (på vilka utförare) och shuffle-information.

Tips

Se till att uppgifterna körs på flera körande enheter (noder) i din datormiljö för att säkerställa tillräcklig parallelism vid bearbetning. Om du har en enda mottagare kanske bara en exekverare gör allt arbete, även om du har fler än en exekverare i din beräkning.

Tråddumpning

En tråddump visar en ögonblicksbild av en JVM:s trådtillstånd.

Tråddumpar är användbara när du felsöker en specifik uppgift som hänger sig eller körs långsamt. Så här visar du en specifik uppgifts tråddumpning i Spark-användargränssnittet:

  1. Klicka på fliken Jobb .
  2. I tabellen Jobb letar du reda på det måljobb som motsvarar den tråddump som du vill se och klickar på länken i kolumnen Beskrivning .
  3. I jobbets stegtabell hittar du målsteget som motsvarar den tråddump du vill se och klickar på länken i kolumnen Beskrivning.
  4. I stegens Uppgifter lista letar du reda på måluppgiften som motsvarar den tråddump du vill se och noterar värdena för Uppgifts-ID och Exekverings-ID.
  5. Klicka på fliken Exekverare.
  6. I tabellen Executors letar du reda på raden som innehåller det kör-ID-värde som motsvarar det kör-ID-värde som du antecknade tidigare. På den raden klickar du på länken i kolumnen Tråddump .
  7. I tabellen Tråddumpning för executor klickar du på raden där kolumnen Trådnamn innehåller TID följt av det aktivitets-ID-värde som du antecknade tidigare. (Om uppgiften har avslutats kommer du inte att hitta en matchande tråd). Uppgiftens tråddump visas.

Tråddumpar är också användbara för felsökning av problem där drivrutinen verkar hänga (till exempel där inga förloppsindikatorer för Spark visas) eller inte gör några framsteg med frågeoperationer (till exempel där förloppsindikatorerna för Spark har fastnat på 100%). Så här visar du drivrutins tråddumpning i Spark-användargränssnittet:

  1. Klicka på fliken Exekverare.
  2. Klicka på länken i kolumnen Thread Dump i tabellen Executors i drivrutinsraden. Förarens tråddump visas.

Förarloggar

Drivrutinsloggar är användbara i följande fall:

  • Undantag: Ibland kanske du inte ser fliken Direktuppspelning i Spark-användargränssnittet. Streamingtjänsten startades inte eftersom det inträffade ett undantag. Du kan öka detaljnivån i drivrutinsloggarna för att titta på stackspårningen av undantaget. I vissa fall kan strömningstjänsten ha startat korrekt. Men du ser att alla batchar aldrig går till avsnittet Slutförda batchar. De kan alla befinna sig i ett bearbetnings- eller feltillstånd. I dessa fall är drivrutinsloggar också användbara för att förstå de underliggande problemens natur.
  • Utskrifter: Eventuella utskriftskommandon som en del av DAG visas också i loggarna.

Notera

Vem som kan komma åt drivrutinsloggar beror på åtkomstläget för beräkningsresursen. För beräkning med standardåtkomstläge kan endast arbetsyteadministratörer komma åt drivrutinsloggar. För beräkning med dedikerat åtkomstläge kan administratörerna för dedikerade användare eller grupper och arbetsytor komma åt drivrutinsloggarna.

Utförandeloggar

Körloggar är användbara om du ser att vissa uppgifter fungerar felaktigt och vill se loggarna för specifika uppgifter. Från den uppgiftsinformationssida som visas ovan kan du hämta den plats där uppgiften kördes. När du har gjort det kan du gå till sidan för beräkningsgränssnittet, klicka på noderna # och sedan på huvudservern. På huvudsidan visas alla arbetare. Du kan välja den arbetare där den misstänkta aktiviteten kördes och sedan komma till log4j-utdata.

Notera

Körloggar är inte tillgängliga för beräkning med standardåtkomstläge . För beräkning med dedikerat åtkomstläge kan administratörerna för dedikerade användare eller grupper och arbetsytor komma åt körloggarna.