2017-08-29 1 views
0

Mein Spark-Cluster verweigert die gleichzeitige Ausführung von mehr als zwei Jobs. Einer der drei bleibt unveränderlich im Zustand "AKZEPTIERT".Cluster-Modus SPARK verweigert die gleichzeitige Ausführung von mehr als zwei Jobs

Hardware

4 Data Node with spark clients, 24gb ram, 4processors 

Cluster Metrics zeigen, dass es sollte genug Kerne

Apps Submitted 3 
Apps Pending 1 
Apps Running 2 
Apps Completed 0 
Containers Running 4 
Memory Used 8GB 
Memory Total 32GB 
Memory Reserved 0B 
VCores Used 4 
VCores Total 8 
VCores Reserved 0 
Active Nodes 2 
Decommissioned Nodes 0 
Lost Nodes 0 
Unhealthy Nodes 0 
Rebooted Nodes 0 

On Application Manager sind Sie der letzte der einzige Weg, sehen die dritte App laufen ist eine Lauf ein

zu töten
application_1504018580976_0002 adm com.x.app1 SPARK default 0 [date] N/A RUNNING UNDEFINED 2 2 5120 25.0 25.0 
application_1500031233020_0090 adm com.x.app2 SPARK default 0 [date] N/A RUNNING UNDEFINED 2 2 3072 25.0 25.0 
application_1504024737012_0001 adm com.x.app3 SPARK default 0 [date] N/A ACCEPTED UNDEFINED 0 0 0 0.0 0.0 

Die laufenden Anwendungen haben 2x Container und 2x zugewiesene VCores, 25% der Warteschlange und 25% des Clusters.

Bereitstellungsbefehl für alle 3 Apps.

/usr/hdp/current/spark2-client/bin/spark-submit 
--master yarn 
--deploy-mode cluster 
--driver-cores 1 
--driver-memory 512m 
--num-executors 1 
--executor-cores 1 
--executor-memory 1G 
--class com..x.appx ../lib/foo.jar 

Kapazität Scheduler

yarn.scheduler.capacity.default.minimum-user-limit-percent = 100 
yarn.scheduler.capacity.maximum-am-resource-percent = 0.2 
yarn.scheduler.capacity.maximum-applications = 10000 
yarn.scheduler.capacity.node-locality-delay = 40 
yarn.scheduler.capacity.root.accessible-node-labels = * 
yarn.scheduler.capacity.root.acl_administer_queue = * 
yarn.scheduler.capacity.root.capacity = 100 
yarn.scheduler.capacity.root.default.acl_administer_jobs = * 
yarn.scheduler.capacity.root.default.acl_submit_applications = * 
yarn.scheduler.capacity.root.default.capacity = 100 
yarn.scheduler.capacity.root.default.maximum-capacity = 100 
yarn.scheduler.capacity.root.default.state = RUNNING 
yarn.scheduler.capacity.root.default.user-limit-factor = 1 
yarn.scheduler.capacity.root.queues = default 
+0

Sie sagen 4 Datenknoten. Aber etwas stimmt nicht. Es sagt: VCores Total 8 Und: Aktive Knotenpunkte 2 – Venkat

+0

Hallo Venkat, ich habe (6 Boxen >> Spark Client auf 4 Boxen). Jede Box hat 4 Kerne. Was verpasse ich dann hier? –

Antwort

0

Ihre Einstellung:

yarn.scheduler.capacity.maximum-am-resource-percent = 0.2 

Impliziert:

total vcores(8) x maximum-am-resource-percent(0.2) = 1.6 

1,6 zu 2 gehäufte aufsteht, da teilweise vcores macht keinen Sinn. Das bedeutet, dass Sie nur zwei Anwendungsmaster gleichzeitig haben können, weshalb Sie nur zwei Jobs gleichzeitig ausführen können.

Lösung, bump up yarn.scheduler.capacity.maximum-am-resource-percent auf einen höheren Wert wie 0,5.

+0

Das funktioniert! Vielen Dank. Ich dachte, ich hätte das schon vorher geändert. Würde "OverProvisioning" funktionieren? z.B. 2.0% für eine Dev-Plattform. Oder ist 0,5 die absolute Maximaleinstellung? (dh: 50% spezifizieren ist 4AM-Kerne // 8 Kerne = 4AM-Kerne + 4 Executor-Kerne) –

+0

Sie können 1.0 angeben, was 100% bedeutet. Sie könnten jedoch das Risiko einer Deadlock-Situation eingehen, in der nur AMs ausgeführt werden und Sie keine vcores für Mapper oder Reducer zur Verfügung haben, um Arbeit zu leisten. Daher wird die Einstellung auf 1.0 nicht empfohlen. Wenn Sie den Maximalwert für "Am-Ressource-Prozent" zu niedrig setzen, werden Apps in die Warteschlange gestellt (wie in Ihrem Fall), und Sie sehen Apps, die "ANSTEHEND" sind. – tk421

Verwandte Themen