Leistungsoptimierung in Apache Spark für Dateningenieure

Inhalt

Während der Arbeit an einem Spark-App-Tuning-Problem, Ich habe viel Zeit damit verbracht, die Spark-Web-UI-Visualisierungen zu verstehen. Spark Web UI ist ein sehr nützliches Werkzeug für diese Aufgabe. Für Anfänger, Es wird sehr schwierig, allein aus diesen Visualisierungen Erkenntnisse über ein Problem zu gewinnen. Obwohl es sehr gute Ressourcen zur Spark-Leistung gibt, die Informationen waren verstreut. Deswegen, Ich hatte das Bedürfnis, meine Erkenntnisse zu dokumentieren und zu teilen.

Zielgruppe und Schlussfolgerungen

In diesem Beitrag wird davon ausgegangen, dass die Leser ein grundlegendes Verständnis der Spark-Konzepte haben.. Dieser Beitrag hilft Anfängern, potenzielle Leistungsprobleme in ihren Anwendungen zu erkennen, die über eine Spark-Webbenutzeroberfläche ausgeführt werden.. Der Fokus liegt nur auf den Informationen, die aus der Benutzeroberfläche nicht offensichtlich sind, und den Rückschlüssen, die aus diesen nicht offensichtlichen Informationen gezogen werden können. Beachten Sie, dass es keine vollständige Liste von Informationen enthält, die von der Spark-Webbenutzeroberfläche interpretiert werden können, aber nur die, die ich für mein Projekt relevant fand und, aber trotzdem, allgemein genug, damit das Publikum es weiß.

Spark-Webbenutzeroberfläche

Die Web-Benutzeroberfläche von Spark ist nur verfügbar, wenn die Anwendung ausgeführt wird. Um vergangene Ausführungen zu analysieren, das Verlaufsserver muss aktiviert sein, um Ereignisprotokolle zu speichern, die dann zum Ausfüllen der Web-Benutzeroberfläche verwendet werden können.

Die Spark Web-Benutzeroberfläche zeigt nützliche Informationen zu Ihrer Anwendung in Registerkarten an, nämlich

  • Vollstrecker
  • Umfeld
  • Funktioniert
  • Etapas
  • Lagerung

Der verbleibende Beitrag beschreibt die Intuitionen der einzelnen Registerkarten, in der genannten Reihenfolge.

Registerkarte Executoren

Gibt Informationen über die von jedem Executor ausgeführten Aufgaben.

Feige 1: Zusammenfassung der Executor-Registerkarte

42021Bild201-1198431

A partir de la Abbildung 1, Es kann verstanden werden, dass es einen Controller gibt und 5 Vollstrecker, jedes davon läuft mit 2 Kerne und 3 GB Speicher.

Die Box markiert in rot muestra la distribución desigual de las tareas en las que un Knoten des Cluster está exagerando las tareas, während andere relativ inaktiv sind.

Die Box markiert in Blau zeigt, dass die Größe der Eingabedaten 487,3 MB. Jetzt, Diese App wurde mit einer Datensatzgröße von ausgeführt 83 MB. Die Größe der Eingabedaten umfasst das Lesen des Originaldatensatzes und die zufälligen Datenübertragungen zwischen den Knoten. Dies zeigt, dass viele Daten gemischt wurden (Über 400+ MB) in der App.

Registerkarte Umgebung

Es gibt viele Funkeneigenschaften um die Anwendung zu steuern und anzupassen. Diese Eigenschaften können beim Senden des Jobs oder beim Erstellen des Kontextobjekts festgelegt werden. Es sei denn, die Eigenschaft wird explizit hinzugefügt, gilt nicht. Wir sind falsch anzunehmen, dass die Eigenschaften mit ihren Standardwerten angewendet werden, wenn nicht explizit angegeben. Alle angewendeten Eigenschaften können auf der Registerkarte Umgebung angezeigt werden. Wenn die Immobilie dort nicht zu sehen ist, bedeutet, dass die Eigenschaft überhaupt nicht angewendet wurde.

Registerkarte Jobs

Un trabajo está asociado con una cadena de dependencias Resilient Distributed Datensatz organizadas en un direktes azyklisches Diagramm (TAG) das sieht aus wie Abb. 2. Aus den DAG-Visualisierungen, Sie können die ausgeführten Etappen und die Anzahl der übersprungenen Etappen finden. Standardmäßig, Spark verwendet seine berechneten Schritte nicht stufenweise wieder, es sei denn, sie wird beibehalten oder explizit zwischengespeichert. Übersprungene Etappen sind zwischengespeicherte Etappen, die grau markiert sind, donde los valores de cálculo se almacenan en la memoria y no se vuelven a calcular después de acceder a HDFS. Ein Blick auf die DAG-Visualisierung genügt, um zu wissen, ob RDD-Berechnungen wiederholt durchgeführt oder zwischengespeicherte Stufen verwendet werden.

Feige 2: DAG-Anzeige eines Jobs

54628Bild202-8604941

Registerkarte „Stufen“

Bietet einen tieferen Einblick in die auf Aufgabenebene ausgeführte Anwendung. Eine Stufe stellt einen Arbeitsabschnitt dar, der von einzelnen Aufgaben parallel ausgeführt wird. Es gibt eine Zuordnung 1-1 zwischen Aufgaben und Datenpartitionen, nämlich, 1 Aufgabe pro Datenpartition. Man kann sich in einen Job vertiefen, in bestimmten Phasen und bis zu jeder Aufgabe in einer Phase über die Spark-Webbenutzeroberfläche.

Die Bühne bietet einen guten Überblick über die Hinrichtungen: DAG-Anzeigen, Veranstaltungszeitpläne, zusammenfassende Messwerte / Aggregation Ihrer Aufgaben.

Ich schaue mir lieber die Zeitleisten der Ereignisse an, um die Aufgaben zu analysieren. Sie geben eine bildliche Darstellung der Details der Zeit, die in die Ausführung der Bühne investiert wurde. Mit einem Blick, Wir konnten schnell Rückschlüsse darauf ziehen, wie gut die Bühne funktionierte und wie wir die Ausführungszeit weiter verbessern könnten.

Feige 3 – Beispiel für eine Ereigniszeitachse

90162Bild203-7870562

Zum Beispiel, die Schlussfolgerungen aus der Abbildung 3 Sie könnten sein:

  1. Die Daten sind unterteilt in 15 Partitionen. Deswegen, Sie rennen 15 Hausaufgaben (vertreten mit 15 grüne Linien).
  2. Aufgaben laufen in 3 Knoten, jeder mit 2 Vollstrecker
  3. Die Phase wird erst abgeschlossen, wenn die am längsten laufende Aufgabe endet. Andere Executoren bleiben inaktiv, bis die längste Aufgabe beendet ist.
  4. Einige langwierige Aufgaben, während wenige Aufgaben für eine sehr kurze Zeit ausgeführt werden, zeigt an, dass die Daten nicht gut partitioniert sind.
  5. Es wurde nicht viel Zeit damit verbracht, den Scheduler oder die Serialisierung zu diesem Zeitpunkt zu verzögern, was gut ist.

Feige. 4 – Einstufige Ereigniszeitleiste mit vielen Datenpartitionen.

56490Bild204-6220746

Die Figur beobachten 4, Wir können daraus schließen, dass die Daten nicht gut verteilt und unnötig partitioniert sind. Aus der Bewertungsmetrik, es kann bestätigt werden, dass die Aufgabenplanung länger gedauert hat als die tatsächliche Ausführungszeit. Je höher der Grünanteil in der Timeline, desto effizienter wird die Berechnung der Etappe.

Es ist wünschenswert, weniger Arbeitsschritte zu haben. Immer wenn Daten gemischt werden, eine neue Bühne entsteht. Mischen ist teuer und, Daher, Versuchen Sie, die Anzahl der Stufen zu reduzieren, die Ihr Programm benötigt.

Eingabedatengröße

Eine weitere wichtige Information ist, die Eingabegröße der gemischten Daten zu beachten. Eines der Ziele ist auch, die Größe dieser Zufallsdaten zu reduzieren.

Feige. 5 – Übersicht über die Registerkarte „Stufen“.

40949Bild205-6387210

Die Figur 5 oben zeigt die Phasen, in denen sich die Daten in MB . bewegen. Dies deutet darauf hin, dass der Code verbessert werden kann, um die Größe der Daten zu reduzieren, die zwischen den Phasen ausgetauscht wurden. Zum Beispiel, digamos que si se aplicó un filtro en algunos datos para un evento ‚x‘ Würfel, dann im resultierenden RDD, la columna “evento” se vuelve redundante ya que técnicamente todas las filas son del evento ‚x‘. Diese Spalte könnte aus zukünftigen RDDs entfernt werden, die aus diesen gefilterten Daten erstellt wurden, um zusätzliche Informationen zu speichern, die während der Shuffle-Operationen übertragen werden..

Zeichen de almacenamiento

Zeigt nur RDDs an, die erhalten wurden, nämlich, die verwenden persist () o verstecken (). Um es besser lesbar zu machen, Sie können das RDD benennen, während Sie es mit setName . speichern (). Nur die RDDs, die Sie behalten möchten, sollten auf der Registerkarte Speicher angezeigt werden und können mit den bereitgestellten benutzerdefinierten Namen leicht erkennbar sein..

Zusammenfassung

Dieser Artikel enthält Informationen zum Identifizieren von Problemen mit der Spark-Webbenutzeroberfläche, wie die Größe der Daten, die gemischt wurden, die Ausführungszeit der Etappen, RDD-Neuberechnung wegen fehlendem Caching. Wenn man seine Daten und seine Anwendung versteht, dann könnte die ideale Datenverteilung und die gewünschte Anzahl von Partitionen gemessen werden, indem aus der laufenden Benutzeroberfläche geschlossen wird. Der Overhead eines Knotens im Vergleich zu anderen im Cluster ist ein weiterer verbesserungswürdiger Bereich, der in dieser Benutzeroberfläche zu sehen ist. Das Auflösung de algunos de estos problemas se discute más en el Apache Spark Performance-Tuning-Artikel.

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher