1

Ich benutze den Quickstart Cloudera VM (CDH 5.10.1) mit Pyspark (1.6.0) und Garn (MR2 inklusive) um numerische Daten pro Stunde zu aggregieren. Ich habe 1 CPU mit 4 Kernen und 32 Go RAM.Spark-submit nur 1 Executor erstellen, wenn pyspark interactive shell 4 erstellt (beide mit Garn-Client)

Ich habe eine Datei bekomme aggregate.py genannt, aber bis heute habe ich nie den Job mit spark-submit vorgelegt, benutzen ich pyspark interaktiv Shell und kopieren/fügen Sie den Code zu testen. Beim Start pyspark interaktiv Shell I verwendet:

pyspark --master yarn-client

I die Behandlung in dem Web-UI zugänglichen quickstart.cloudera gefolgt: 8088/cluster und konnte sehen, dass Yarn erstellt 3 Zieher und 1-Fahrer mit einem Kern jedem (Keine gute Konfiguration, aber der Hauptzweck ist es, ein Proof of concept zu machen, bis wir zu einem echten Cluster verschieben)

Wenn den gleichen Code mit der Einreichung Funken einreichen:

spark-submit --verbose 
    --master yarn 
    --deploy-mode client \ 
    --num-executors 2 \ 
    --driver-memory 3G \ 
    --executor-memory 6G \ 
    --executor-cores 2 \ 
    aggregate.py 

Ich habe nur den Treiber, der auch die Aufgaben ausführt. Beachten Sie, dass spark.dynamicAllocation.enabled auf true in der Registerkarte Umgebung festgelegt ist, und spark.dynamicAllocation.minExecutors auf 2 gesetzt

ich nur mit spark-submit aggregate.py versucht, ich habe immer noch nur den Treiber als Vollstrecker. Ich kann nicht mehr als 1 Executor mit Spark-Submit haben, aber es funktioniert in Spark interactive shell!

My Yarn-Konfiguration ist wie folgt:

yarn.nodemanager.resource.memory-mb = 17 GiB

yarn.nodemanager.resource.cpu-vcores = 4

yarn.scheduler.minimum-allocation-mb = 3 GiB

yarn.scheduler.maximum-allocation-mb = 16 GiB

yarn.scheduler.minimum-allocation-vcores = 1

yarn.scheduler.maximum-allocation-vcores = 2

Wenn jemand mir erklären kann, was ich falsch mache, wäre es eine große Hilfe!

Antwort

0

Sie müssen den Treiberspeicher und den Executorspeicher auf Spark-defaults.conf setzen. Es liegt an

$ SPARK_HOME/conf/Funken defaults.conf

und wenn es eine Datei wie

Funken defaults.conf.template

dann müssen Sie die Datei umbenennen als

Spark-Standardwerte.conf

und dann die Anzahl der Executoren, Executor-Speicher, Anzahl der Executor-Cores. Sie erhalten das Beispiel aus der Vorlagendatei oder überprüfen Sie diesen Link

https://spark.apache.org/docs/latest/configuration.html.

oder

Wenn wir pyspark verwendet Es wird verwendet Default-Executor-Speicher, aber hier in funken einreichen Sie Testamentsvollstrecker-memory = 6G gesetzt. Ich denke, dass Sie den Speicher reduzieren müssen oder dieses Feld entfernen müssen, damit es Standardspeicher verwenden kann.

+0

'Funken einreichen --verbose --master Garn --deploy-Modus-Client \ --num-Vollstrecker 2 \ - Executor-Cores 2 \ aggregate.py' –

0

nur eine Vermutung, wie Sie bereits sagten "Yarn erstellt 3 Executoren und 1 Treiber mit je einem Kern", so haben Sie insgesamt 4 Kerne.

nun nach Ihren Funken einreichen Aussage,

cores = num-executors 2 * executor-cores 2 + for_driver 1 = 5 
#but in total you have 4 cores. So it is unable to give you executors(as after driver only 3 cores left) 
#Check if this is the issue. 
+0

Ich stimme Ihnen zu, aber wie gesagt, ich habe auch 'spark-submit aggregate.py' ohne irgendein anderes Argument verwendet, also sollte es in der Lage sein, mindestens 2 oder 3 Executoren zu erstellen mit 1 Kern (seit 'gam.scheduler.minimum-allocation-vcores' = 1). Liege ich falsch ? – bobolafrite

+0

Obwohl ich nie auf eine solche Situation gestoßen bin, aber mein Vorschlag zu Ihnen wird, versuchen Sie, Funken-Submit ohne "--executor-cores 2" und überprüfen Sie, ob es funktioniert, Lassen Sie Funken/Garn 2 Executoren mit verfügbaren Kernen erstellen ... (Ich bin mir da auch nicht sicher ..) – Satya

+0

Es ändert nichts. Heute haben wir den richtigen Cluster, ich werde versuchen zu sehen, ob dieser Fehler weiterhin besteht – bobolafrite