Warum weist Yarn on EMR nicht allen Knoten die Ausführung von Spark-Jobs zu?

Ich arbeite mit Apache Spark in Amazon Elastic Map Reduce (EMR). Derzeit arbeite ich mit emr-4.1.0, das Amazon Hadoop 2.6.0 und Spark 1.5.0 enthält.

Wenn ich den Job starte, hat YARN alle Worker-Knoten korrekt dem Spark-Job zugewiesen (mit einem für den Fahrer natürlich).

Ich habe die magische Eigenschaft "maximizeResourceAllocation" auf "true" und die Spark-Eigenschaft "spark.dynamicAllocation.enabled" ebenfalls auf "true" gesetzt.

Wenn ich jedoch die Größe des EMR-Clusters durch Hinzufügen von Knoten zum CORE-Pool von Arbeitscomputern ändere, fügt YARN nur @ hinzetwa der neuen Knoten zum Funkenjob.

Zum Beispiel hatte ich heute Morgen einen Job, bei dem 26 Knoten verwendet wurden (m3.2xlarge, wenn das wichtig ist) - 1 für den Fahrer, 25 Executor. Ich wollte den Job beschleunigen, also habe ich versucht, 8 weitere Knoten hinzuzufügen. YARN hat alle neuen Knoten aufgenommen, aber nur einen davon dem Spark-Job zugewiesen. Spark hat den neuen Knoten erfolgreich aufgenommen und verwendet ihn als Executor, aber meine Frage ist, warum YARN die anderen 7 Knoten einfach im Leerlauf sitzen lässt?

Es ist aus offensichtlichen Gründen ärgerlich - ich muss für die Ressourcen bezahlen, obwohl sie nicht verwendet werden, und mein Job hat sich überhaupt nicht beschleunigt!

Weiß jemand, wie YARN entscheidet, wann Knoten zu laufenden Spark-Jobs hinzugefügt werden sollen? Welche Variablen spielen eine Rolle? Erinnerung? V-Kerne? Etwas

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage