Nehmen wir im Folgenden an, dass zu jedem Zeitpunkt nur ein Spark-Job ausgeführt wird.
Was ich bisher bekommen habe
Folgendes verstehe ich, was in Spark passiert:
- Wenn a
SparkContext
erstellt wird, startet jeder Worker-Knoten einen Executor. Ausführende sind separate Prozesse (JVM), die eine Verbindung zum Treiberprogramm herstellen. Jeder Executor hat die JAR des Treiberprogramms. Wenn Sie einen Fahrer verlassen, werden die Testamentsvollstrecker heruntergefahren. Jeder Executor kann einige Partitionen enthalten. - Wenn ein Job ausgeführt wird, wird ein Ausführungsplan gemäß dem Abstammungsdiagramm erstellt.
- Der Ausführungsjob ist in Stufen unterteilt, in denen Stufen möglichst viele benachbarte Transformationen und Aktionen (im Liniendiagramm) enthalten, jedoch keine Mischvorgänge. Somit werden Stufen durch Mischen getrennt.
ich verstehe das
- Eine Aufgabe ist ein Befehl, der vom Treiber an einen Ausführenden gesendet wird, indem das Funktionsobjekt serialisiert wird.
- Der Executor deserialisiert (mit der Treiber-JAR) den Befehl (Task) und führt ihn auf einer Partition aus.
aber
Fragen)
Wie teile ich die Bühne in diese Aufgaben auf?
Speziell:
- Werden die Aufgaben durch die Transformationen und Aktionen bestimmt oder können sich mehrere Transformationen / Aktionen in einer Aufgabe befinden?
- Werden die Aufgaben von der Partition bestimmt (z. B. eine Aufgabe pro Stufe und Partition)?
- Werden die Aufgaben von den Knoten bestimmt (z. B. eine Aufgabe pro Stufe pro Knoten)?
Was ich denke (nur teilweise Antwort, auch wenn richtig)
In https://0x0fff.com/spark-architecture-shuffle wird das Mischen mit dem Bild erklärt
und ich habe den Eindruck, dass die Regel ist
Jede Stufe ist in Aufgaben mit einer Anzahl von Partitionen unterteilt, ohne Rücksicht auf die Anzahl der Knoten
Für mein erstes Bild würde ich sagen, dass ich 3 Kartenaufgaben und 3 Reduzierungsaufgaben hätte.
Für das Bild von 0x0fff würde ich sagen, dass es 8 Kartenaufgaben und 3 Reduzierungsaufgaben gibt (vorausgesetzt, es gibt nur drei orangefarbene und drei dunkelgrüne Dateien).
Offene Fragen auf jeden Fall
Ist das korrekt? Aber selbst wenn das richtig ist, werden meine obigen Fragen nicht alle beantwortet, da noch offen ist, ob sich mehrere Vorgänge (z. B. mehrere Karten) innerhalb einer Aufgabe befinden oder pro Vorgang in eine Aufgabe unterteilt sind.
Was andere sagen
Was ist eine Aufgabe in Spark? Wie führt der Spark-Worker die JAR-Datei aus? und Wie teilt der Apache Spark-Scheduler Dateien in Aufgaben auf? sind ähnlich, aber ich hatte nicht das Gefühl, dass meine Frage dort klar beantwortet wurde.