Welche Beziehung besteht zwischen Arbeitnehmern, Arbeiterinstanzen und Ausführenden?

72

Im Spark Standalone-Modus gibt es Master- und Worker-Knoten.

Hier einige Fragen:

  1. Bedeutet 2 Worker-Instanz einen Worker-Knoten mit 2 Worker-Prozessen?
  2. Enthält jede Worker-Instanz einen Executor für eine bestimmte Anwendung (die Speicher, Aufgabe verwaltet) oder einen Worker-Knoten einen Executor?
  3. Gibt es ein Flussdiagramm, das erklärt, wie Spark zur Laufzeit funktioniert, z. B. die Anzahl der Wörter?
edwardsbean
quelle

Antworten:

57

Ich empfehle, zuerst die Spark-Cluster-Dokumente zu lesen , vor allem aber diesen Cloudera-Blog-Beitrag , in dem diese Modi erläutert werden.

Ihre erste Frage hängt davon ab, was Sie unter "Instanzen" verstehen. Ein Knoten ist eine Maschine, und es gibt keinen guten Grund, mehr als einen Worker pro Maschine auszuführen. Zwei Arbeiterknoten bedeuten also normalerweise zwei Maschinen, jede ein Spark-Arbeiter.

Arbeiter halten viele Ausführende für viele Anwendungen. Eine Anwendung hat Ausführende für viele Mitarbeiter.

Ihre dritte Frage ist nicht klar.

Sean Owen
quelle
6
1. Die erste Frage kommt von spark-env.sh:SPARK_WORKER_INSTANCES, um die Anzahl der Arbeitsprozesse pro Knoten festzulegen. 2. Die Klasse StandaloneExecutorBackend heißt Executor? 3. Könnten Sie erklären, wie Wordcount in Funken geht, wie Daten verschiedene Knoten nach Bild transportieren :)
Edwardsbean
51

Ich möchte auf einige gute Antworten eingehen und sie mit wenigen Bildern beschreiben.

Im Spark Standalone-Modus gibt es Master- und Worker-Knoten.

Wenn wir sowohl Meister als auch Arbeiter an einem Ort für den Standalone-Modus vertreten.

Spark Standalone-Modus

Wenn Sie neugierig sind, wie Spark mit YARN funktioniert? Überprüfen Sie diesen Beitrag Spark on YARN

1. Bedeutet zwei Worker-Instanzen einen Worker-Knoten mit zwei Worker-Prozessen?

Im Allgemeinen nennen wir die Worker-Instanz als Slave, da dies ein Prozess zum Ausführen von Spark-Tasks / Jobs ist . Die empfohlene Zuordnung für einen Knoten (eine physische oder virtuelle Maschine) und einen Worker lautet:

1 Node = 1 Worker process

2. Enthält jede Worker-Instanz einen Executor für die bestimmte Anwendung (die Speicher, Aufgabe verwaltet) oder einen Worker-Knoten einen Executor?

Ja, ein Worker-Knoten kann mehrere Executoren (Prozesse) enthalten, wenn er über ausreichend CPU, Speicher und Speicher verfügt .

Überprüfen Sie den Worker-Knoten im angegebenen Bild. Ein Worker-Knoten in einem Cluster

Übrigens: Die Anzahl der Ausführenden in einem Arbeitsknoten zu einem bestimmten Zeitpunkt hängt vollständig von der Arbeitslast des Clusters und der Fähigkeit des Knotens ab , die Anzahl der Ausführenden auszuführen.

3. Gibt es ein Flussdiagramm, das erklärt, wie die Funkenlaufzeit ist?

Wenn wir die Ausführung aus der Spark-Perspektive über einen Ressourcenmanager für ein Programm betrachten, welche joinzwei rdds und dann eine reduceOperation ausführenfilter

Spark-Laufzeit für einen Beispielcode

HIH

mrsrinivas
quelle
1
sehr nette und ausführliche Antwort, schade, dass das Plakat bereits eine Antwort akzeptiert hat
botengboteng
1
Ausgezeichnete Post - danke! Eine Frage: Sie sagen, dass "die empfohlene Zuordnung für Knoten (eine physische oder virtuelle Maschine) und Worker 1 Knoten = 1 Worker-Prozess ist". In den Spark-Dokumenten unter spark.apache.org/docs/latest/hardware-provisioning.html heißt es jedoch: "Beachten Sie, dass sich die Java-VM mit mehr als 200 GB RAM nicht immer gut verhält. Wenn Sie Computer mit mehr RAM als diesem kaufen, Sie können mehrere Worker-JVMs pro Knoten ausführen. "Gehen Sie also von diesem JVM-RAM-Limit aus? Oder (wie ich vermute) basiert diese RAM-Begrenzung auf älteren JVMs, die mit ihrer Speichersammlung etwas weniger robust waren?
Brian
@Brian: Ich gehe davon aus, dass mehr Speicher für JVM (insbesondere Heap) mehr Zeit (Protokollpause) für GC ist, als es passiert ist. Entschuldigung für die späte Antwort, irgendwie habe ich Ihren Kommentar verpasst.
Fraurinivas
33

Ich weiß, dass dies eine alte Frage ist und Seans Antwort war ausgezeichnet. In meinem Artikel geht es um SPARK_WORKER_INSTANCES in MrQuestions Kommentar. Wenn Sie Mesos oder YARN als Cluster-Manager verwenden, können Sie mehrere Executoren mit einem Worker auf demselben Computer ausführen. Es ist also nicht erforderlich, mehrere Worker pro Computer auszuführen. Wenn Sie jedoch einen eigenständigen Cluster-Manager verwenden, ist derzeit nur ein Executor pro Worker-Prozess auf jedem physischen Computer zulässig. Wenn Sie also eine super große Maschine haben und mehrere Exectuors darauf ausführen möchten, müssen Sie mehr als einen Arbeitsprozess starten. Das ist , was SPARK_WORKER_INSTANCES im spark-env.sh ist. Der Standardwert ist 1. Wenn Sie diese Einstellung verwenden, stellen Sie sicher, dass Sie SPARK_WORKER_CORES festlegen explizit, um die Kerne pro Worker zu begrenzen, sonst versucht jeder Worker, alle Kerne zu verwenden.

Diese Einschränkung für eigenständige Cluster-Manager sollte bald verschwinden. Laut diesem SPARK-1706 wird dieses Problem behoben und in Spark 1.4 veröffentlicht.

Lan
quelle
Wie funktioniert es jetzt in den neuesten Spark-Versionen? Ich kann die Anzahl der Arbeiter manipulieren, indem ich nur die Anzahl der Kerne für Ausführende einstelle. Wenn der Worker 16 Kerne hat und ich 4 Executor-Kerne gebe, hätte ich dann 4 Executors pro Worker? Ich habe kürzlich eine solche Frage gestellt, die Sie beantworten können: stackoverflow.com/questions/54364403/…
MetallicPriest
8

Wie Lan sagte, ist die Verwendung mehrerer Worker-Instanzen nur im Standalone-Modus relevant. Es gibt zwei Gründe, warum Sie mehrere Instanzen haben möchten: (1) Garbage Pausen Collector kann den Durchsatz für große JVMs beeinträchtigen. (2) Heap-Größe von> 32 GB kann CompressedOoops nicht verwenden

Lesen Sie mehr darüber, wie Sie mehrere Worker-Instanzen einrichten .

Uli Bethke
quelle