Freigeben über


Debuggen mit der Spark-Benutzeroberfläche

In diesem Artikel werden einige Debugoptionen beschrieben, die für Ihre Apache Spark-Anwendung verfügbar sind:

  • Spark-Benutzeroberfläche
  • Treiberprotokolle
  • Executorprotokolle

Lesen Sie Diagnose von Kosten- und Leistungsproblemen mithilfe der Spark UI-, um die Diagnose von Kosten- und Leistungsproblemen mithilfe der Spark-Benutzeroberfläche zu durchlaufen.

Spark-Benutzeroberfläche

Nachdem Sie einen Auftrag gestartet haben, zeigt die Spark-Benutzeroberfläche Informationen dazu an, was in Ihrer Anwendung passiert. Um zur Spark-Benutzeroberfläche zu gelangen, wählen Sie ihre Berechnung auf der Computeseite aus, und klicken Sie dann auf die Registerkarte "Spark UI ":

Spark UI

Registerkarte "Streaming"

In der Spark-Benutzeroberfläche wird eine Streaming-Registerkarte angezeigt, wenn auf der Berechnung ein Streamingauftrag ausgeführt wird. Wenn in dieser Berechnung kein Streamingauftrag ausgeführt wird, ist diese Registerkarte nicht sichtbar. Sie können zu Treiberprotokolle gehen, um zu erfahren, wie Sie nach Ausnahmen suchen, die beim Starten des Streamingauftrags möglicherweise aufgetreten sind.

Auf dieser Seite können Sie überprüfen, ob Ihre Streaminganwendung Eingabeereignisse von Ihrer Quelle empfängt. Sie können beispielsweise sehen, dass der Auftrag 1000 Ereignisse/Sekunde empfängt.

Anmerkung

Für TextFileStream, da Dateien eingegeben werden, ist die Anzahl der Eingabeereignisse immer 0. In solchen Fällen können Sie sich den Abschnitt Abgeschlossene Batches im Notizbuch ansehen, um herauszufinden, wie Sie weitere Informationen finden können.

Wenn Sie über eine Anwendung verfügen, die mehrere Eingabedatenströme empfängt, können Sie auf den Link Eingaberate klicken, der die Anzahl der für jeden Empfänger empfangenen Ereignisse anzeigt.

Bearbeitungsdauer

Wenn Sie nach unten scrollen, finden Sie das Diagramm für Verarbeitungszeit. Dies ist eines der wichtigsten Diagramme, um die Leistung Ihres Streamingauftrags zu verstehen. Als allgemeine Faustregel gilt: Es ist gut, wenn Sie jeden Batch innerhalb von 80 % der Batchverarbeitungszeit verarbeiten können.

Wenn die durchschnittliche Verarbeitungszeit annähernd oder größer als Ihr Batchintervall ist, haben Sie eine Streaminganwendung, die beginnt Warteschlangen zu bilden, was bald zu einem Rückstau führt, der am Ende Ihren Streamingauftrag beeinträchtigen kann.

Abgeschlossene Batches

Am Ende der Seite wird eine Liste aller abgeschlossenen Batches angezeigt. Auf der Seite werden Details zu den letzten 1000 Batches angezeigt, die abgeschlossen wurden. In der Tabelle können Sie die Anzahl der Ereignisse abrufen, die für jeden Batch und deren Verarbeitungszeit verarbeitet werden. Wenn Sie mehr darüber erfahren möchten, was in einem der Batches passiert ist, können Sie auf den Batchlink klicken, um zur Seite " Batchdetails " zu gelangen.

Batchdetailseite

Die Seite " Batchdetails " enthält alle Details zu einem Batch. Zwei wichtige Punkte sind:

  • Eingabe: Enthält Details zur Eingabe für den Batch. In diesem Fall enthält sie Details zum Apache Kafka-Thema, zu Partitionen und Offsets, die von Spark Structured Streaming für diesen Batch gelesen werden. Bei TextFileStream wird eine Liste der Dateinamen angezeigt, die für diesen Batch gelesen wurden. Dies ist die beste Möglichkeit, mit dem Debuggen einer Streaminganwendung zu beginnen, die aus Textdateien liest.
  • Verarbeitung: Sie können auf den Link zur Auftrags-ID klicken, die alle Details zur Verarbeitung während dieses Batches enthält.

Seite "Auftragsdetails"

Auf der Seite "Auftragsdetails" wird eine DAG-Visualisierung angezeigt. Dies ist hilfreich, um die Reihenfolge der Vorgänge und Abhängigkeiten für jeden Batch zu verstehen. Dies könnte z. B. zeigen, dass eine Batcheingabe aus einem Kafka-direkten Datenstrom gefolgt von einem flachen Kartenvorgang und dann einem Kartenvorgang gelesen wurde und dass der resultierende Datenstrom dann verwendet wurde, um einen globalen Zustand mithilfe von updateStateByKey zu aktualisieren.

Graue Felder stellen übersprungene Stufen dar. Spark ist intelligent genug, um einige Phasen zu überspringen, wenn sie nicht neu komputiert werden müssen. Wenn die Daten überprüft oder zwischengespeichert werden, überspringt Spark die Neukompilierung dieser Phasen. Im vorherigen Streamingbeispiel entsprechen diese Phasen der Abhängigkeit von vorherigen Batches aufgrund von updateStateBykey. Da Spark Structured Streaming intern den Datenstrom überprüft und vom Prüfpunkt anstelle der vorherigen Batches gelesen wird, werden sie als abgeblendete Phasen angezeigt.

Unten auf der Seite finden Sie auch die Liste der Aufträge, die für diesen Batch ausgeführt wurden. Sie können auf die Links in der Beschreibung klicken, um weitere Schritte zur Ausführung auf Aufgabenebene auszuführen.

Seite "Aufgabendetails"

Dies ist die präziseste Debugebene, in die Sie über die Spark-Benutzeroberfläche für eine Spark-Anwendung gelangen können. Diese Seite enthält alle Aufgaben, die für diesen Batch ausgeführt wurden. Wenn Sie Leistungsprobleme Ihrer Streaminganwendung untersuchen, stellt diese Seite Informationen bereit, z. B. die Anzahl der ausgeführten Aufgaben und deren Ausführung (für welche Executoren) und Shuffle-Informationen.

Tipp

Stellen Sie sicher, dass die Aufgaben auf mehreren Ausführungsinstanzen (Knoten) in Ihrer Berechnung ausgeführt werden, um bei der Verarbeitung genügend Parallelität zu gewährleisten. Wenn Sie über einen einzelnen Empfänger verfügen, kann es vorkommen, dass nur ein Ausführungsprogramm die gesamte Arbeit übernimmt, obwohl Sie mehr als ein Ausführungsprogramm in Ihrem Computersystem haben.

Thread-Speicherabbild

Eine Thread-Dump zeigt eine Momentaufnahme der Threadzustände der JVM.

Threadabbilder sind hilfreich beim Debuggen einer bestimmten hängenden oder langsam ausgeführten Aufgabe. So zeigen Sie das Threadabbild einer bestimmten Aufgabe in der Spark-Benutzeroberfläche an:

  1. Klicken Sie auf die Registerkarte Aufträge.
  2. Suchen Sie in der Tabelle Aufträge den Zielauftrag, der dem Thread-Speicherabbild entspricht, das Sie anzeigen möchten, und klicken Sie auf den Link in der Spalte Beschreibung.
  3. Suchen Sie in der Tabelle Stufen des Auftrags die Zielstufe, die dem anzuzeigenden Thread-Dump entspricht, und klicken Sie in der Spalte Beschreibung auf den Link.
  4. Suchen Sie in der Aufgabenliste der Stufe die Zielaufgabe, die dem Thread-Dump entspricht, den Sie anzeigen möchten, und notieren Sie sich die Werte der Aufgaben-ID und der Executor-ID.
  5. Klicken Sie auf die Registerkarte Executors.
  6. Suchen Sie in der Tabelle Executors die Zeile, die den wert Executor ID enthält, der dem Executor ID Wert entspricht, den Sie zuvor erwähnt haben. Klicken Sie in dieser Zeile auf den Link in der Spalte Thread-Speicherabbild.
  7. Klicken Sie in der Tabelle Thread-Speicherabbild für Executor auf die Zeile, in der die Spalte Threadname den Wert TID gefolgt vom Wert der Vorgangsnummer enthält, den Sie zuvor notiert haben. (Wenn die Aufgabe bereits ausgeführt wurde, werden Sie keinen passenden Thread finden). Das Thread-Dump der Aufgabe wird angezeigt.

Thread-Dumps sind auch hilfreich beim Debuggen von Problemen, bei denen der Treiber zu hängen scheint (z. B. werden keine Spark-Statusleisten angezeigt) oder keine Fortschritte bei Abfragen macht (z. B. bleiben die Spark-Statusleisten bei 100%hängen). Um das Threadabbild des Treibers in der Spark UI anzuzeigen:

  1. Klicken Sie auf die Registerkarte Executors.
  2. Klicken Sie in der Tabelle Executors in der Zeile Treiber auf den Link in der Spalte Thread-Speicherabbild. Das Threadabbild des Treibers wird angezeigt.

Treiberprotokolle

Treiberprotokolle sind in den folgenden Fällen hilfreich:

  • Ausnahmen: Manchmal wird die Registerkarte "Streaming" in der Spark-Benutzeroberfläche möglicherweise nicht angezeigt. Dies liegt daran, dass der Streamingauftrag aufgrund einer Ausnahme nicht gestartet wurde. Sie können einen Drilldown in die Treiberprotokolle ausführen, um die Stapelüberwachung der Ausnahme anzuzeigen. In einigen Fällen wurde der Streamingauftrag möglicherweise ordnungsgemäß gestartet. Alle Batches werden jedoch nie im Abschnitt „Abgeschlossene Batches“ angezeigt. Möglicherweise befinden sich alle im Verarbeitungs- oder Fehlerzustand. In diesen Fällen sind Treiberprotokolle auch hilfreich, um die Art der zugrunde liegenden Probleme zu verstehen.
  • Drucken: Alle Druckanweisungen als Teil des DAG werden ebenfalls in den Protokollen angezeigt.

Anmerkung

Wer auf Treiberprotokolle zugreifen kann, hängt vom Zugriffsmodus der Computeressource ab. Für die Berechnung mit dem Standardzugriffsmodus können nur Arbeitsbereichsadministratoren auf Treiberprotokolle zugreifen. Für die Berechnung mit dem modus "Dedizierter Zugriff" können die dedizierten Benutzer- oder Gruppen- und Arbeitsbereichsadministratoren auf die Treiberprotokolle zugreifen.

Executorprotokolle

Ausführungsprotokolle sind hilfreich, wenn sie sehen, dass bestimmte Aufgaben falsch sind und die Protokolle für bestimmte Aufgaben anzeigen möchten. Auf der oben gezeigten Aufgabendetailseite können Sie den Ausführenden abrufen, an dem die Aufgabe ausgeführt wurde. Sobald Sie dies getan haben, können Sie zur Compute-Benutzeroberflächenseite wechseln, auf die Anzahl der Knoten und dann auf den Master klicken. Auf der Masterseite werden alle Mitarbeiter aufgelistet. Sie können den Worker auswählen, an dem die verdächtige Aufgabe ausgeführt wurde, und dann zur Log4j-Ausgabe gelangen.

Anmerkung

Die Ausführungsprotokolle sind für die Berechnung im Standardzugriffsmodus nicht verfügbar. Für die Berechnung mit dem modus "Dedizierter Zugriff" können die dedizierten Benutzer- oder Gruppen- und Arbeitsbereichsadministratoren auf die Ausführungsprotokolle zugreifen.