Ausgabe
Also führe ich einen Spark-Job im lokalen Modus aus. Ich verwende den folgenden Befehl, um den Job auszuführen
spark-submit --master local[*] --driver-memory 256g --class main.scala.mainClass target/scala-2.10/spark_proj-assembly-1.0.jar 0 large.csv 100 outputFolder2 10
Ich führe dies auf einem Computer mit 32 Kernen und 256 GB RAM aus. Beim Erstellen der conf verwende ich den folgenden Code
val conf = new SparkConf().setMaster("local[*]").setAppName("My App")
Jetzt bin ich jetzt im lokalen Modus, Spark führt alles in einer einzigen JVM aus, aber bedeutet das, dass es nur einen Treiber startet und ihn auch als Executor verwendet. In meiner Zeitleiste wird ein hinzugefügter Executor-Treiber angezeigt. Und wenn ich auf die Executors-Seite gehe, gibt es nur einen Executor mit 32 zugewiesenen Kernen
Ist das das Standardverhalten? Ich hatte erwartet, dass Spark einen Executor pro Kern starten würde, anstatt nur einen Executor, der den gesamten Kern erhält. Wenn jemand das Verhalten erklären kann, wäre das super
Lösung
Ist dies das Standardverhalten?
Im lokalen Modus werden Ihre Treiber + Executors, wie Sie gesagt haben, in einem einzigen JVM-Prozess erstellt. Was Sie sehen, ist kein Executor, sondern eine Ansicht darüber, wie viele Kerne Ihr Job zur Verfügung hat. Wenn Sie im lokalen Modus laufen, sollten Sie den Treiber normalerweise nur in der Executors-Ansicht sehen.
Wenn Sie sich den Code für ansehen LocalSchedulerBackend
, sehen Sie den folgenden Kommentar:
/**
* Used when running a local version of Spark where the executor, backend, and master all run in
* the same JVM. It sits behind a [[TaskSchedulerImpl]] and handles launching tasks on a single
* Executor (created by the [[LocalSchedulerBackend]]) running locally.
Wir haben einen einzigen Exekutor in derselben JVM-Instanz, der alle Aufgaben erledigt.
Beantwortet von – Yuval Itzchakov
Antwort geprüft von – Marilyn (FixError Volunteer)