Mit spark-submit,, was ist das Verhalten von den-total-executor-Kerne option?

Mir läuft ein spark-cluster über C++ - code, verpackt in python.
Ich bin derzeit am testen der verschiedenen Konfigurationen von multi-threading-Optionen (auf Python-Ebene oder Spark-Ebene).

Bin ich mit spark mit standalone binaries, die über einen HDFS-2.5.4-cluster. Der cluster besteht derzeit aus 10 Sklaven, mit 4 Kernen jeder.

Aus, was ich sehen kann, standardmäßig, Spark startet 4 slaves pro Knoten (ich habe 4 python arbeiten auf einem slave-Knoten zu einem Zeitpunkt).

Wie kann ich den Grenzwert dieser Reihe ? Ich kann sehen, dass ich eine-total-executor-Kerne option für "spark-submit", aber es gibt wenig Dokumentation darüber, wie es Auswirkungen auf die Verteilung der Testamentsvollstrecker über den cluster !

Werde ich tests ausführen, um eine klare Idee, aber wenn jemand kenntnisreich hat eine Ahnung, was diese option tut, könnte es helfen.

Update :

Ging ich durch spark-Dokumentation wieder, hier ist, was ich verstehe :

  • Standardmäßig, ich habe ein Testamentsvollstrecker pro worker-Knoten (hier 10 Arbeiter-Knoten, also 10 Vollzieher)
  • Jedoch, jedem Arbeiter ausgeführt werden kann mehrere Aufgaben parallel. Im standalone-Modus, der standardmäßig alle verfügbaren Kerne, was erklärt, warum kann ich beobachten 4 python.
  • Um die Anzahl der verwendeten Kerne pro Arbeitnehmer, und begrenzen Sie die Anzahl der parallelen Aufgaben, ich habe mindestens 3 Optionen :
    • verwenden --total-executor-cores mit spark-submit (mindestens befriedigend, da es keine Ahnung, wie sich der pool der Kerne behandelt wird)
    • verwenden SPARK_WORKER_CORES in der Konfigurationsdatei
    • verwenden -c Optionen mit den Start-scripts

Den folgenden Zeilen dieser Dokumentation http://spark.apache.org/docs/latest/spark-standalone.html hat mir geholfen, herauszufinden, was Los ist :

SPARK_WORKER_INSTANCES

Anzahl der worker-Instanzen laufen auf jeder Maschine (Standard: 1).
Sie können diese mehr als 1, wenn die Sie haben sehr große Maschinen und würde gerne mehrere Spark-worker-Prozesse.
Wenn Sie diese, stellen Sie sicher, auch zu setzen SPARK_WORKER_CORES explizit zur Begrenzung der Kerne pro Arbeitnehmer, oder sonst jeder Arbeitnehmer wird versuchen, alle Kerne.

Was ist mir noch immer unklar ist, warum es besser ist in meinem Fall, um die Anzahl der parallelen tasks pro worker-Knoten um 1, und verlassen Sie sich auf meine C++ legacy code multithreading. Ich werde aktualisieren diesen Beitrag mit experiment Ergebnisse, wenn ich am Ende meines Studiums.

  • Aus deinem update, was es scheint mir unklar ist, wie Sie zu der Schlussfolgerung gelangt, dass es besser ist, um die Anzahl der parallelen Aufgaben und verlassen Sie sich auf Ihre C++ - multithreading-code.
  • Nun, ich bin tatsächlich läuft eine Reihe von spezifischen Experimenten, um zu prüfen, ob es ist mehr interessant darauf zu verlassen, üblichen legacy-multithreading oder verwenden Spark-Ansatz. Ich bin bei google-cloud, und in meinem speziellen Bildverarbeitung Fall der beste Kompromiss : für einen Arbeiter mit N Kernen, N/2 parallele jobs mit Funken, jede Aufgabe mit Multithread auf 2 threads mit openMP. Zum Beispiel : 8 Arbeiter-Knoten mit 16 Kernen, beste Kompromiss 64 parallele jobs, und jeder von Ihnen Multithread auf 2 Kernen. Das Gegenteil (16 parallele jobs, jeder von Ihnen über MT auf 8 Kerne ist zweimal langsamer).
  • Vielen Dank für die acclaration.
Schreibe einen Kommentar