Verwenden von TagSniff für Online- und Post-hoc-Datendebugging

February 24, 2023
-
Dr. Jorge Quiane
-

In unserem vorherigen Beitrag haben wir das TagSniff-Modell vorgestellt. TagSniff ist ein Ansatz zur Datenflussinstrumentierung, der eine Reihe von Primitiven für Online- und Post-hoc-Debugging-Aufgaben bietet. Beim Debuggen werden Fehler in Computerprogrammen lokalisiert und behoben. TagSniff hilft dabei, Tags zu Debug-Tupeln hinzuzufügen und Tupel zu identifizieren, die anhand ihrer Metadaten oder Werte einer weiteren Analyse bedürfen. TagSniff bietet zwei Primitive, Tag und Sniff, für die Instrumentierung des Debug-Tupels, das Anmerkungen und Metadaten enthält. In diesem Beitrag werden wir besprechen, wie man TagSniff für die beiden gängigen Datendebugging-Modi verwenden kann: Online- und Post-hoc-Debugging.

Online-Datendebugging

Debugging ist ein wesentlicher Bestandteil jedes Softwareentwicklungsprozesses, und es wird noch wichtiger, wenn es um Big-Data-Anwendungen geht. Das Debuggen von Big-Data-Anwendungen stellt neue Herausforderungen dar, da zur Behebung von Fehlern eine Kombination aus Code- und Dateninteraktivität erforderlich ist. Online-Debugging ist eine Technik, mit der Entwickler Big-Data-Anwendungen debuggen können, während der Job noch ausgeführt wird.

Online-Debugging ist für Big-Data-Anwendungen von entscheidender Bedeutung, da es Entwicklern ermöglicht, Haltepunkte für die Dateninspektion hinzuzufügen, benachrichtigt zu werden, wenn ein Absturz ausgelöst wird, und benachrichtigt zu werden, wenn bestimmte Bedingungen für die Daten erfüllt sind. In Big-Data-Anwendungen ist die Interaktivität zwischen Daten und Code ein entscheidender Aspekt des Online-Debuggings. Daher sind neue Interaktivitätsfunktionen erforderlich, um den Online-Debugging-Prozess effizient zu gestalten.

Man kann TagSniff für das Online-Debugging von Big-Data-Anwendungen verwenden. Es ermöglicht Benutzern, die Daten in verschiedenen Phasen des Datenflusses zu überprüfen, die Ursache von Abstürzen zu identifizieren und sich benachrichtigen zu lassen, wenn bestimmte Bedingungen erfüllt sind. Die Stärke von TagSniff liegt darin, wie es auf bestimmte Tag- und Sniff-Aufrufe reagiert, um Online-Debugging-Szenarien zu unterstützen.

Datenhaltepunkte

Dies ist ein wichtiger Aspekt des Online-Debuggings, da sie es Entwicklern ermöglichen, die Daten in verschiedenen Phasen des Datenflusses zu überprüfen. TagSniff bietet zwei Interaktivitätsaktionen, Next Tuple und Next operator, um das Debuggen von Daten-Breakpoints zu erleichtern. Mit dem nächsten Tupel kann der Benutzer Tupel untersuchen, die einen Nullwert enthalten. Sobald die Inspektion abgeschlossen ist, entfernt TagSniff die Tag-Pause und sendet sie an den nächsten Operator. Mit dem nächsten Operator kann der Benutzer überprüfen, wie das Tupel von den nachgeschalteten Operatoren transformiert wird. TagSniff gibt das Tag pause zusammen mit dem Tupel weiter, um die Ausführung mit der Sniff-Funktion im Downstream-Operator zu unterbrechen.

Die Ursachen eines Programmabsturzes

Sie sind ein erheblicher Grund zur Besorgnis bei Big-Data-Anwendungen. Ein Absturzverursacher ist ein Tupel, das zum Absturz eines Systems führt. Für die Behebung des Fehlers ist es unerlässlich, das schuldige Tupel und den Operator zu identifizieren, bei dem die Ausnahme aufgetreten ist. TagSniff bietet eine Catch-Funktion für Absturzschuldige, die jede Laufzeit-Ausnahme abfängt und das Tupel mit dem Tag „crash“ sowie der Exception-Trace, der Operator-ID und der Knoten-IP-Adresse annotiert. Im Folgenden veranschaulichen wir diese beiden Fälle:

crash tuple in TagSniff
Crash-Tupel in TagSniff

Dieser Code wendet ein Crash-Tag auf jedes Tupel im Eingabe-Dataset an und verwendet dann eine Post-hoc-Assertion, um alle Tupel herauszufiltern, die das Crash-Tag haben. Der Tag Die Methode fügt jedem Tupel ein Crash-Tag mit einer Verkettung der Werte des Exception-Trace-TRC, der Operator-ID OID und der Knoten-IP-Adresse hinzu. Die schnüffeln Die Methode wendet dann einen Filter auf den Eingabedatensatz an und prüft, ob jedes Tupel das Crash-Tag hat. Wenn das Tupel das Crash-Tag hat, wird es zur weiteren Überprüfung zurückgegeben.

Alarmierung

Diese Funktion benachrichtigt den Benutzer, wenn ein Tupel eine interessante Bedingung erfüllt, z. B. einen Engpass oder eine Latenzmetrik. TagSniff bietet eine Alert-Funktion, die es dem Benutzer ermöglicht, Bedingungen für ein einzelnes Tupel oder eine Reihe von Tupeln hinzuzufügen. Das TagSniff-System sollte das Tag-Primitiv aufrufen, bevor und nachdem das Tupel durch den ReduceByKey-Operator ausgeführt wird. Das Sniff-Primitiv ruft die Zeitstempel-Metadaten aus dem Debug-Tupel ab, um die Latenz des ReduceByKey-Aufrufs zu berechnen, und prüft, ob sie über einem bestimmten Schwellenwert liegt. Hier ein Codeausschnitt, der diese Primitive veranschaulicht:

Using TagSniff to detect latency between data primitives
Verwenden von TagSniff zur Erkennung der Latenz zwischen Datenprimitiven

Wie zu sehen ist, versieht dieser Code jedes Tupel im Eingabedatensatz mit einem Zeitstempel und verwendet dann eine Post-hoc-Assertion, um alle Tupel herauszufiltern, deren Verarbeitung länger dauert als ein vordefinierter Schwellenwert. Die Tag-Methode fügt jedem Tupel ein Zeitstempel-Tag mit der aktuellen Systemzeit in Millisekunden hinzu. Die sniff-Methode wendet dann einen Filter auf den Eingabedatensatz an und prüft die Zeitdifferenz zwischen den beiden Zeitstempeln, die im Tag jedes Tupels gespeichert sind. Ist die Zeitdifferenz größer als der vordefinierte Schwellenwert, wird das Tupel zur weiteren Prüfung zurückgegeben.

Post-hoc-Datendebugging

Post-hoc-Debugging ist ein wichtiger Schritt in der Datenanalysepipeline, der dabei hilft, die zugrunde liegenden Probleme bei der Ausführung des Datenflusses zu identifizieren. Es findet in den Ausführungsprotokollen statt, sobald der Hauptdatenflussauftrag abgeschlossen ist. Die einfachen Ausführungsprotokolle bieten eine vereinfachte Ansicht, in der die Eingabe-, Zwischen- und Ausgabetupel entkoppelt sind. Daher können Benutzer die TagSniff-Primitive nutzen, um viel umfangreichere Ausführungsprotokolle mit einer logischen Ansicht zu erstellen.

Es gibt mehrere Post-hoc-Aufgaben, die Benutzer mit Hilfe von TagSniff ausführen können, z. B. Vorwärts- und Rückwärtsverfolgung, selektive Wiedergabe und Abstammungsinformationen. Benutzer können diese Protokolle analysieren, um das zugrunde liegende Problem zu identifizieren. Das Abrufen von Abstammungsinformationen oder das Abspielen eines Teils der Datenflussausführung für eine Teilmenge von Tupeln kann einiges an Programmierkenntnissen erfordern. Daher ist es wichtig, eine Reihe praktischer Methoden einzuführen, die verhindern, dass Benutzer viele Codezeilen schreiben.

Vorwärts- und Rückwärtsverfolgung

Durch die Vorwärts- und Rückwärtsverfolgung können Benutzer identifizieren, welche Ausgabetupel aus einem bestimmten Eingabetupel generiert wurden. Allgemeiner gesagt ermöglicht dieser Prozess Benutzern zu verstehen, wie ein bestimmtes Tupel durch verschiedene Operatoren im Datenfluss transformiert wird. Umgekehrt ermöglicht die Rückwärtsverfolgung den Benutzern, die Eingabetupel zu identifizieren, die ein bestimmtes Ausgabetupel generiert haben, was als Sonderfall von Abstammung ausgelegt werden könnte. Angenommen, ein Benutzer möchte ein Eingabetupel im gesamten Datenfluss verfolgen, wenn es ein leeres Wort enthält. Mithilfe der Protokolle kann der Benutzer entweder einen Ad-hoc-Datenfluss ausführen oder den ursprünglichen Datenfluss ausführen, der ordnungsgemäß mit TagSniff instrumentiert ist. Wir argumentieren, dass Letzteres viel einfacher ist. Das Tag-Primitiv annotiert alle Tupel, die einen leeren Wert enthalten, als trace, andernfalls als skip. Beachten Sie, dass ein TagSniff-System diese Tag-Funktion auf den Quelloperator anwenden würde, gefolgt von einer Sniff-Funktion. Diese Sniff-Funktion gibt für alle Tupel den Wert true zurück, da für jedes von ihnen ein Eingreifen des Systems erforderlich ist: entweder das Tupel dem Benutzer anzeigen (Trace) oder das Tupel aus dem Datenfluss entfernen (Skip). Der folgende Codeausschnitt veranschaulicht das obige Tag und den obigen Sniff:

Backward tracing with TagSniff
Rückwärtsverfolgung mit TagSniff

Dieser Code wendet ein Tag auf jedes Tupel an, je nachdem, ob es einem Leerzeichen entspricht oder nicht. Wenn das Tupel ein Leerzeichen ist, fügt es das Tag „trace“ hinzu; andernfalls wird das Tag „skip“ hinzugefügt. Das schnüffeln Die Funktion wird dann verwendet, um eine Debugging-Ausgabe für jedes Tupel auszulösen, das ein Tag hat. In diesem Fall ist der schnüffeln Funktion kehrt einfach zurück wahr für jedes Tupel, das ein Tag hat, wodurch das System diese Tupel dem Benutzer zur weiteren Überprüfung anzeigt.

Selektive Wiedergabe

Die selektive Wiedergabe ermöglicht es einem Benutzer, Teile des Datenflussdiagramms wiederzugeben. Die selektive Wiedergabe hat mehrere Anwendungen, z. B. um zu verstehen, wie sich der Datenfluss auf eine Teilmenge des Datensatzes auswirkt, interaktive Abfragen von Zwischendatensätzen zum Debuggen durchzuführen und einen Teil des Workflows mit geänderten Eingaben erneut auszuführen. Angenommen, ein Benutzer ist daran interessiert, die Ausführung der Map- und ReduceByKey-Operatoren im folgenden Codeausschnitt, der die 100 häufigsten Wörter berechnet, selektiv wiederzugeben:

Wordcount for top 100 words in a given document
Wortanzahl für die 100 besten Wörter in einem bestimmten Dokument

Um das obige Ziel zu erreichen, kann der Benutzer die Zwischenausgabe von Zeile 1 laden und den Rest des ursprünglichen Datenflusses ausführen, der mit TagSniff instrumentiert ist. Ein TagSniff-System würde nach dem ReduceByKey-Operator ein Tag und ein Sniff-Primitiv hinzufügen, wobei das Tag-Primitiv das Skip-Tag zu allen von diesem Operator ausgegebenen Tupeln hinzufügt und sniff für alle Tupel den Wert true zurückgibt. Das TagSniff-System wäre dann dafür verantwortlich, alle als Skip markierten Tupel aus dem Hauptdatenfluss zu entfernen. Der folgende Codeausschnitt veranschaulicht diese Tag- und Sniff-Funktionen:

Tagging reduceByKey
ReduceByKey taggen

Post-hoc-Aussagen

Post-hoc-Assertions sind eine Methode, um zu überprüfen, ob eine bestimmte Bedingung für Eingabe-, Zwischen- oder Ausgabedatensätze erfüllt ist. Diese Technik kann verwendet werden, um Fehler zu identifizieren, die möglicherweise bei der Datenverarbeitung aufgetreten sind. Im obigen Beispiel mit den 100 häufigsten Wörtern kann man beispielsweise Post-hoc-Assertionen verwenden, um zu überprüfen, ob alle Zeichenketten, die als Eingabe an die Map-Funktion übergeben wurden, mindestens die Länge 1 hatten. Dies kann mit TagSniff erreicht werden. Dabei wendet das Tag das Display-Tag auf Tupel an, die diese Bedingung nicht erfüllen, und sniff gibt für alle Tupel, die das Display-Tag enthalten, den Wert true zurück, sodass das System sie dem Benutzer zur weiteren Überprüfung anzeigt.

Detect errors during a data processing operation with TagSniff
Erkennen Sie Fehler während eines Datenverarbeitungsvorgangs mit TagSniff

Dieser Code wendet eine Post-hoc-Assertion auf die Eingabedaten an, um zu überprüfen, ob jede Zeichenfolge in der Eingabe eine Länge von mindestens 2 Zeichen hat. Er fügt jeder Zeichenfolge, die diese Prüfung nicht besteht, das Tag „display“ hinzu und gibt dann mithilfe von sniff den Wert true für alle Tupel zurück, die das „display“ -Tag enthalten, sodass das System sie dem Benutzer zur weiteren Überprüfung anzeigen kann.

Leistungsprofilerstellung

Das ist eine weitere Technik, mit der Engpässe in großen Datenverarbeitungssystemen identifiziert werden können. Bei dieser Technik werden Ausführungsprotokolle analysiert, um den Datenfluss-Fußabdruck anhand verschiedener Leistungskennzahlen wie Latenz und Durchsatz auf Tupel- oder Operatorebene zu verstehen. Nachzügler-Tupel, ein gefährliches Problem bei der Analyse großer Datenmengen, können zu erheblichen Leistungseinbußen führen. Die meisten Datenverarbeitungssysteme, wie Spark, bieten nur Unterstützung bei der Grobüberwachung auf Auftrags- und Mitarbeiterebene. Oft ist es jedoch wichtig zu wissen, wie lange die Verarbeitung der einzelnen Tupel gedauert hat, damit Engpässe identifiziert werden können. TagSniff kann für die Erstellung von Leistungsprofilen verwendet werden, indem ein Ad-hoc-Datenfluss für die Protokolle ausgeführt wird, falls die protokollierten Tupel die richtigen Zeitstempel enthalten. Wenn nicht, könnte man eine selektive Wiedergabe mit der Tag- und Sniff-Methode durchführen. In diesem Fall fügt das Tag dem Tupel vor und nach der Ausführung des Operators einen Zeitstempel hinzu, und Sniff überprüft, ob die Latenz der Tupelverarbeitung über einem bestimmten Schwellenwert liegt. Alternativ könnte ein Benutzer die Assert-Convenience-Methode verwenden, um Nachzügler-Tupel zu identifizieren. Der folgende Codeausschnitt veranschaulicht, wie diese Methode für die Profilerstellung verwendet wird:

post-hoc assertion with TagSniff
Post-hoc-Assertion mit TagSniff

Dieser Code wendet eine Post-hoc-Assertion auf den Eingabedatensatz an, um zu überprüfen, ob die Verarbeitungszeit jedes Tupels über einem bestimmten Schwellenwert liegt, um potenzielle Nachzügler-Tupel zu identifizieren. Er liest einen Datensatz aus einer Logdatei mit Hilfe der Leser Klasse, dann gilt die behaupten Methode für den Datensatz, um alle Tupel herauszufiltern, die die angegebene Bedingung nicht erfüllen. In diesem Fall ist die Bedingung, dass der Zeitunterschied zwischen den Zeitstempeln, die im „timestamp“ -Tag jedes Tupels gespeichert sind, größer als ein vordefinierter Schwellenwert ist. Schließlich sammelt es den gefilterten Datensatz und druckt ihn aus.

Zusammenfassung

Zusammenfassend lässt sich sagen, dass das Debuggen von Big-Data-Anwendungen neue Interaktivitätsfunktionen erfordert, die herkömmliche Debugging-Methoden möglicherweise nicht bieten. Das Online-Debugging mit TagSniff bietet eine effiziente Möglichkeit, Big-Data-Anwendungen zu debuggen, während der Job noch ausgeführt wird. Mit TagSniff können Entwickler Daten in verschiedenen Phasen des Datenflusses untersuchen, Absturzverursacher identifizieren und sich benachrichtigen lassen, wenn bestimmte Bedingungen für die Daten erfüllt sind. Das Online-Debugging mit TagSniff bietet eine umfassende und effiziente Möglichkeit, Fehler in Big-Data-Anwendungen zu beheben. In ähnlicher Weise ist das Post-hoc-Debugging ein wichtiger Teil der Datenanalysepipeline, mit dessen Hilfe die zugrunde liegenden Probleme bei der Ausführung des Datenflusses identifiziert werden können. Mithilfe von TagSniff können Benutzer verschiedene Post-hoc-Aufgaben ausführen, z. B. Vorwärts- und Rückwärtsverfolgung, selektive Wiedergabe und Herkunftsinformationen. Insgesamt bietet TagSniff ein leistungsstarkes Framework für die Anwendung dieser Techniken auf verteilte Datenflusssysteme. Mithilfe dieser Techniken können Entwickler und Datenwissenschaftler Einblicke in die Systemleistung gewinnen und Probleme identifizieren, die möglicherweise bei der Datenverarbeitung aufgetreten sind.

Über Scalytics

Da die Anforderungen an die moderne KI-Entwicklung steigen, haben traditionelle ETL-Plattformen Schwierigkeiten, Schritt zu halten, da sie durch ihre eigenen Einschränkungen in Bezug auf Datenbewegungen und Verarbeitungsgeschwindigkeit blockiert werden. Scalytics Connect ist die Lösung der nächsten Generation, die speziell für die Optimierung von KI-Trainings durch innovative Datenintegrationsfunktionen entwickelt wurde.

Wir ermöglichen es Ihnen, datengestützte Entscheidungen in Minuten statt Tagen zu treffen
Scalytics ist basierend auf Apache Wayang, und wir sind stolz darauf, das Projekt zu unterstützen. Du kannst dir ihr öffentliches GitHub-Repo hier ansehen. Wenn Dir unsere Software gefällt - ein Star ⭐ würde viel bedeuten!

Wenn Sie professionelle Unterstützung von unserem Team von branchenführenden Experten benötigen, können Sie sich jederzeit an uns über Slack oder E-Mail wenden.
back to all articlesFollow us on Google News
Schneller zum KI-Erfolg
Kostenlose White Paper. Erfahren Sie, wie Scalytics KI und ML optimiert und Unternehmen in die Lage versetzt, schnellere KI-Erfolge zu erzielen.

Starten Sie noch heute mit Scalytics Connect

Thank you! Our team will get in touch soon.
Oops! Something went wrong while submitting the form.