Ich habe Spark 2.0 im Standalone-Modus ausgeführt, erfolgreich konfiguriert, um auf einem Server zu starten und war auch in der Lage, Ipython Kernel PySpark als Option in Jupyter Notebook zu konfigurieren. Alles funktioniert gut, aber ich stehe vor dem Problem, dass für jedes Notebook, das ich starte, alle meine 4 Mitarbeiter dieser Anwendung zugewiesen sind. Wenn also eine andere Person aus meinem Team versucht, ein anderes Notebook mit PySpark-Kernel zu starten, funktioniert es einfach nicht, bis ich das erste Notebook stoppe und alle Worker freigebe.Spark 2.0 Standalone-Modus Dynamic Resource Allocation Worker Startfehler
Um dieses Problem zu lösen, versuche ich den Anweisungen von Spark 2.0 Documentation zu folgen. So , auf meinem $SPARK_HOME/conf/spark-defaults.conf
Ich habe die folgenden Zeilen:
spark.dynamicAllocation.enabled true
spark.shuffle.service.enabled true
spark.dynamicAllocation.executorIdleTimeout 10
Auch auf $SPARK_HOME/conf/spark-env.sh
ich habe:
export SPARK_WORKER_MEMORY=1g
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_WORKER_INSTANCES=4
export SPARK_WORKER_CORES=1
Aber wenn ich versuche, die Arbeiter zu starten, $SPARK_HOME/sbin/start-slaves.sh
verwenden, wird nur der erste Arbeiter erfolgreich gestartet. Das Protokoll von dem ersten Arbeiter am Ende wie folgt:
16/11/24 13:32:06 INFO Worker: Successfully registered with master spark://cerberus:7077
Aber das Protokoll von den Arbeitern 2-4 zeigt mir diesen Fehler:
INFO ExternalShuffleService: Starting shuffle service on port 7337 with useSasl = false 16/11/24 13:32:08 ERROR Inbox: Ignoring error java.net.BindException: Address already in use
Es scheint (mir), dass der erste Arbeiter erfolgreich gestartet Der Shuffle-Service an Port 7337, aber die Arbeiter 2-4 "wissen davon nichts" und versuchen einen weiteren Shuffle-Service auf dem gleichen Port zu starten.
Das Problem tritt auch für alle Arbeiter (1-4) auf, wenn ich zuerst einen Shuffle-Service starte (mit $SPARK_HOME/sbin/start-shuffle-service.sh
) und dann versuche, alle Arbeiter zu starten ($SPARK_HOME/sbin/start-slaves.sh
).
Gibt es eine Option, um dies zu umgehen? Um sicherzustellen, dass alle Mitarbeiter sich vergewissern, dass ein Shuffle-Dienst ausgeführt wird, und eine Verbindung zu ihr herstellen, anstatt einen neuen Dienst zu erstellen?