Übersicht über die Zündstufen
Eine Phase in einem Ausführungsprozess ist nichts anderes als eine Ebene, durch die jede der Aufgaben gehen muss. Der gesamte Spark-Job ist in mehrere Phasen unterteilt, um die Daten effizient zu verarbeiten. Jede Aufgabe wird in einer separaten Partition ausgeführt.
Immer wenn der Benutzer eine Spark-Job-Bewerbung an Spark sendet, akzeptiert der Spark-Treiber diese und identifiziert die verschiedenen Arten von Aktionen / Transformationen, die in der Bewerbung vorhanden sind. Ferner werden diese Operationen in einem Flussdiagramm angeordnet, das als DAG bezeichnet wird. Ein DAG (Directed Acyclic Graph) wird immer dann erstellt, wenn eine Aktion oder eine Transformation auf dem RDD aufgerufen wird, die wiederum den DAGScheduler aufruft.
Die Bedeutung von DAG ist wie folgt:
- Directed: Alle Knoten sind miteinander verbunden und bilden einen azyklischen Graphen. Die Reihenfolge wird durch die auf dem RDD aufgerufenen Aktionen bestimmt.
- Azyklisch: Die Knoten sind nicht als zyklische Schleife verbunden. Wenn also eine Aktion oder eine Transformation einmal ausgeführt wurde, kann der ursprüngliche Wert nicht wiederhergestellt werden.
- Grafik: Das gesamte Muster, das aus den Kanten und Scheitelpunkten besteht, die in einem bestimmten Muster zusammen angeordnet sind, wird als Grafik bezeichnet. Eckpunkte sind nichts anderes als die RDDs und die Kanten sind die Aktionen, die auf dem RDD aufgerufen werden.
DAGScheduler ist derjenige, der die Phasen in eine Reihe von Aufgaben unterteilt. Der DAGScheduler übergibt dann die Stage-Informationen an den Cluster-Manager (YARN / Spark-Standalone), der den Task-Scheduler zum Ausführen der Tasks anregt. Der Spark-Treiber konvertiert den logischen Plan in einen physischen Ausführungsplan. Spark-Jobs werden in der Pipelining-Methode ausgeführt, bei der alle Transformationsaufgaben in einer einzigen Stufe zusammengefasst werden.
Transformationen
Es gibt zwei Arten von Transformationen:
1. Enge Transformationen : Dies sind Transformationen, für die kein Mischen erforderlich ist. Diese Aktionen können in einer einzigen Stufe ausgeführt werden.
Beispiel: map () und filter ()
2. Breite Transformationen : Dies sind Transformationen, die ein Mischen über verschiedene Partitionen erfordern. Daher müssen verschiedene Stufen für die Kommunikation über verschiedene Partitionen hinweg erstellt werden.
Beispiel: ReduceByKey
Nehmen wir ein Beispiel, um zu verstehen, wie dies funktioniert.
Beispiel: In diesem Beispiel sehen wir, wie eine einfache Wortzählung mit Spark DAGScheduler funktioniert.
- val data = sc.textFile ("data.txt")
Ergebnis: data: org.apache.spark.rdd.RDD (String) = data.txt MapPartitionsRDD (46) at textFile at: 24
Zunächst wird eine textFile-Operation ausgeführt, um die angegebene Eingabetextdatei vom HDFS-Speicherort zu lesen.
- data.flatMap (_. split (”“)). map (i => (i, 1)). reductionByKey (_ + _). collect
Ergebnis: res21: Array ((String, Int)) = Array ()
Als nächstes wird eine flatMap-Operation ausgeführt, um die Zeilen in der gesamten Eingabedatei in verschiedene Wörter aufzuteilen. Dann wird eine Kartenoperation durchgeführt, um (Schlüssel, Wert) Paare wie (Wort, 1) für jedes der Wörter zu bilden. Und die Funktion reductByKey wird aufgerufen, um die Summe der Zählwerte für jedes Wort zu ermitteln. Schließlich liefert die Sammelaktion das Endergebnis, indem alle Daten gesammelt werden.
Während dieses Programms werden von Spark 2 Stufen erstellt, da hier eine Transformation durchgeführt wird. Während der Transformationsoperation muss das Mischen durchgeführt werden, da die Daten zwischen zwei oder mehr verschiedenen Partitionen gemischt werden müssen. Daher wird hierfür eine Stufe erstellt und anschließend eine weitere einzelne Stufe für die Transformationsaufgabe erstellt.
Auch intern werden diese Stufen in Aufgaben unterteilt. In diesem Beispiel ist jede Stufe in zwei Aufgaben unterteilt, da zwei Partitionen vorhanden sind. Jede Partition führt eine individuelle Aufgabe aus.
Arten von Zündstufen
Nachfolgend sind die beiden Arten von Zündstufen aufgeführt
1. ShuffleMapStage
Dies ist im Grunde eine Zwischenstufe im Prozess der DAG-Ausführung. Der Ausgang dieser Stufe wird als Eingang für weitere Stufe (n) verwendet. Die Ausgabe erfolgt in Form von Kartenausgabedateien, die später durch Reduzieren der Aufgabe verwendet werden können. Eine ShuffleMapStage gilt als bereit, wenn alle Kartenausgaben verfügbar sind. Manchmal fehlen die Ausgabepositionen, wenn die Partitionen verloren gehen oder nicht verfügbar sind.
Diese Phase kann viele Pipeline-Operationen wie map () und filter () enthalten, bevor das Mischen ausgeführt wird. Die internen Registrys outputLocs und _numAvailableOutputs werden von ShuffleMapStage verwendet, um die Anzahl der Shuffle-Map-Ausgaben zu verfolgen. Ein einzelnes ShuffleMapStage kann für verschiedene Jobs gemeinsam verwendet werden.
2. ResultStage
Wie der Name schon sagt, ist dies die letzte Phase eines Spark-Jobs, in der eine Operation auf einer oder mehreren Partitionen einer RDD ausgeführt wird, um das Ergebnis zu berechnen. Die Initialisierung der internen Register und Zähler erfolgt über die ResultStage.
Der DAGScheduler übergibt fehlende Tasks zur Berechnung an ResultStage. Für die Berechnung sind verschiedene obligatorische Parameter erforderlich, z. B. stageId, stageAttempId, die Broadcast-Variable der serialisierten Task, Partition, bevorzugte TaskLocations, outputId, einige lokale Eigenschaften und TaskMetrics dieser bestimmten Stage. Einige der optionalen erforderlichen Parameter sind Job-ID, Anwendungs-ID und Anwendungsversuchs-ID.
Vorteile von Zündstufen
Nachfolgend sind die verschiedenen Vorteile von Spark Stages aufgeführt:
1. Dynamische Zuordnung von Executoren
Anhand der Spark Job Event Timeline können wir erkennen, dass die Zuweisung von Executoren dynamisch erfolgt. Dies bedeutet, dass die Ausführenden abhängig von der Arbeitslast während der Ausführung der Aufgabe aus dem Cluster aufgerufen werden. Es wird dann an den Cluster zurückgegeben, sobald seine Arbeit erledigt ist. Dies spart den Speicher für die Ressourcenzuweisung und ermöglicht den anderen Anwendungen, die auf demselben Cluster ausgeführt werden, die Wiederverwendung der Ausführer. Daher steigt die Gesamtauslastung des Clusters und ist optimal.
2. Zwischenspeichern
RDDs werden während der auf jeder Stufe durchgeführten Operationen zwischengespeichert und im Speicher gespeichert. Dies ist hilfreich, um Rechenzeit zu sparen, wenn für das Endergebnis dieselben RDDs erneut aus HDFS gelesen werden müssen.
3. Parallele Ausführung
Unabhängige Spark-Jobs werden parallel ausgeführt, es sei denn und bis ein Shuffling erforderlich ist oder die Eingabe einer Stufe von der vorherigen Ausgabe abhängt.
4. DAG Visualisierung
Dies ist sehr hilfreich bei komplexen Berechnungen, bei denen viele Operationen und deren Abhängigkeiten beteiligt sind. Anhand dieser DAG-Visualisierung kann der Fluss leicht nachverfolgt und die Leistungsblockaden identifiziert werden. Durch Klicken auf die in dieser Visualisierung gezeigten Stufen können Sie auch die von jeder Stufe ausgeführten Aufgaben anzeigen. In dieser erweiterten Ansicht werden alle Details der RDDs angezeigt, die zu dieser Stufe gehören.
5. Fehlertoleranz
Aufgrund der auf RDDs ausgeführten Caching-Operation wird in der DAG jede auf ihnen ausgeführte Aktion aufgezeichnet. Nehmen wir also an, in jedem Fall geht eine RDD verloren, und sie kann mit Hilfe der DAG leicht abgerufen werden. Mit dem Cluster-Manager kann die Partition identifiziert werden, auf der sie verloren gegangen ist, und dieselbe RDD kann zur Wiederherstellung nach Datenverlust erneut auf derselben Partition abgelegt werden.
Aufgrund der oben genannten Vorteile wird Apache Spark häufig anstelle von MapReduce verwendet. Spark-Stufen sind nichts anderes als eine erweiterte Version von MapReduce. Da MapReduce das mehrfache Lesen und Schreiben der Daten in das HDFS erforderlich machte, wurde Spark eingeführt, das diese Aktionen im Arbeitsspeicher ausführt.
Fazit
Wir können daher den Schluss ziehen, dass Spark-Stufen aufgrund ihrer speicherinternen Berechnung effizienter sind und die Verarbeitungsgeschwindigkeit sogar für die iterative Verarbeitung erhöhen.
Empfohlene Artikel
Dies ist eine Anleitung zu Spark Stages. Hier diskutieren wir die Arten der Transformation und die Arten und Vorteile von Zündfunkenstufen. Sie können sich auch die folgenden Artikel ansehen, um mehr zu erfahren -
- So installieren Sie Spark
- Spark-Streaming
- Karriere in Spark
- Fragen in Vorstellungsgesprächen bei Spark
- Übersicht und Top 6 Komponenten von Spark