2016-09-29 4 views
0

Ich möchte Spark-Shell im Garnmodus mit einer bestimmten Anzahl von Kernen laufen.Apache Spark: Wie erzwingen Verwendung bestimmter Anzahl von Kernen?

der Befehl I verwenden als

spark-shell --num-executors 25 --executor-cores 4 --executor-memory 1G \ 
--driver-memory 1G --conf spark.yarn.executor.memoryOverhead=2048 --master yarn \ 
--conf spark.driver.maxResultSize=10G \ 
--conf spark.serializer=org.apache.spark.serializer.KyroSerializer \ 
-i input.scala 

input.scala etwas folgt wie dies

import java.io.ByteArrayInputStream 

// Plaintext sum on 10M rows 
def aggrMapPlain(iter: Iterator[Long]): Iterator[Long] = { 
    var res = 0L 
while (iter.hasNext) { 
    val cur = iter.next 
    res = res + cur 
} 
List[Long](res).iterator 
} 

val pathin_plain = <some file> 

val rdd0 = sc.sequenceFile[Int, Long](pathin_plain) 
val plain_table = rdd0.map(x => x._2).cache 
plain_table.count 

0 to 200 foreach { i => 
    println("Plain - 10M rows - Run "+i+":") 
    plain_table.mapPartitions(aggrMapPlain).reduce((x,y)=>x+y) 
    } 

Auf Ausführen diesen den Spark-UI erste Spitze bis etwa 40 Kern sieht, und dann bei 26 Kernen absetzt.

Auf Empfehlung von this änderte ich meine nach dem in yarn-site.xml

<property>                           
     <name>yarn.nodemanager.resource.cpu-vcores</name>                 
     <value>101</value> 
</property> 

<property>                           
    <name>yarn.scheduler.maximum-allocation-vcores</name>                
    <value>101</value>                         
</property> 

<property>                           
     <name>yarn.scheduler.maximum-allocation-mb</name>                 
     <value>102400</value>                        
</property> 

<property>                           
    <name>yarn.nodemanager.resource.memory-mb</name>                 
    <value>102400</value>                        
</property> 

Aber ich kann immer noch nicht Funken zwingen 100 Kerne zu verwenden, die ich brauche, wie ich Benchmarking gegen früheren Tests tue.

Ich benutze Apache Spark 1.6.1. Jeder Knoten im Cluster einschließlich des Treibers verfügt über 16 Kerne und 112 GB Arbeitsspeicher. Sie sind auf Azure (hdinsight cluster). 2 Treiberknoten + 7 Arbeiterknoten.

Antwort

0

Ich bin nicht vertraut mit Azure, aber ich denke, GARN GARN ist, so sollten Sie sicherstellen, dass Sie

yarn.scheduler.capacity.resource-calculator=org.apache.hadoop.yarn.util.resource.DominantResourceCalculator 

in capacity-scheduler.xml haben.

(Siehe this ähnliche Frage und Antwort)

+0

Danke, die ich gemacht habe, dass die Bearbeitung auf meinen 'kapazitäts scheduler.xml' aber immer noch keine Veränderung. Gegenwärtig setze ich 'num-executors' auf 100, was mir 101 Kerne in der Spark UI gibt. – Sood

+0

Nachdem ich hier und da ein paar Änderungen vorgenommen und einen Teil meines Codes umgeschrieben habe, konnte ich das Problem lösen. Ich habe so viele Dinge geändert, ich bin mir nicht sicher, welcher funktioniert, aber das hat definitiv geholfen. – Sood