Wir versuchen, unseren Funken Cluster auf Garn zu betreiben. Vor allem im Vergleich zum Standalone-Modus treten Performance-Probleme auf.Performance-Probleme für Funken auf YARN
Wir haben einen Cluster von 5 Knoten mit jeweils 16 GB RAM und 8 Kernen. Wir haben die minimale Containergröße als 3 GB und das Maximum als 14 GB in gain-site.xml konfiguriert. Wenn wir den Job dem Garn-Cluster übergeben, liefern wir die Nummer des Executors = 10, des Executor-Speichers = 14 GB. Nach meinem Verständnis sollten unserem Job 4 Container mit 14 GB zugewiesen werden. Aber die Funke UI zeigt nur 3 Container von je 7,2 GB.
Wir können die Containernummer und die zugewiesenen Ressourcen nicht sicherstellen. Dies führt zu einer nachteiligen Leistung im Vergleich zum Standalone-Modus.
Können Sie einen Hinweis darauf geben, wie Sie die Garnleistung optimieren können?
Dies ist der Befehl, den ich für die Einreichung der Arbeit verwenden:
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 10 --executor-memory 14g target/scala-2.10/my-application_2.10-1.0.jar
die Diskussion Nach mir meine Garn-site.xml Datei geändert und auch die Funken einreichen Befehl.
Hier ist der neue Garn-site.xml Code:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hm41</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>14336</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2560</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>13312</value>
</property>
Und der neue Befehl für die Funken einreichen ist
$SPARK_HOME/bin/spark-submit --class "MyApp" --master yarn-cluster --num-executors 4 --executor-memory 10g --executor-cores 6 target/scala-2.10/my-application_2.10-1.0.jar
Damit ich in der Lage bin 6 Kerne auf jeder Maschine zu bekommen, aber Die Speicherauslastung jedes Knotens liegt immer noch bei 5G. Ich habe den Screenshot von SPARKUI und htop beigefügt.
Meine {yarn.nodemanager.resource.memory-mb} ist 15GB, da wir 1GB für die OS-Prozesse belassen und es dem nodemangaer erlauben, die anderen 15GB zu verteilen. Ich habe meinen Submit-Call dahingehend modifiziert. --master yarn-cluster --num-executors 5 --executor-memory 13g –
Ich vermute, dass zusammen mit NM selbst auch DataNode läuft, also 15GB meiner Meinung nach zu viel ist, würde ich nicht über 14GB gehen – 0x0FFF
Kann Ich stelle während/nach der Behältererstellung fest, wieviel RAM einem Behälter zugewiesen wurde. Ich habe versucht, die Protokolle des Ressourcen-Managers durchzugehen, konnte aber nicht die genauen Einträge dafür finden. Unser Cluster ist keine Produktion oder eine ausgelastete, also ist es in Ordnung, wenn wir sicherstellen können, dass der Funke den gesamten Arbeitsspeicher bekommt. @sietse Au Bedeutet das, dass Spark-Container den erforderlichen Speicher erhalten, aber nur diesen Bruchteil melden? weil in unserer Standalone-Implementierung der gesamte Speicher gemeldet wird. –