2016-07-05 5 views
1

Nach offizieller Spark-Dokumentation (http://spark.apache.org/docs/latest/job-scheduling.html#configuration-and-setup) Funken, wenn sie mit GARN „spark.dynamicAllocation“ Option verwenden, müssen Sie:EMR-Konfiguration für spark.dynamicAllocation entspricht nicht offizielle Dokumentation

Im Garn- site.xml auf jedem Knoten, fügen spark_shuffle to-Dienste yarn.nodemanager.aux ...

Satz yarn.nodemanager.aux-services.spark_shuffle.class

org.apache.spark.network.yarn.YarnShuffleService

Trotzdem AWS EMR Dokumentation sagt, dass

"..Spark Shuffle Service wird automatisch von EMR konfiguriert. (http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-spark-configure.html)

Ich habe bemerkt, dass "yarn.nodemanager.aux-Dienste" in "Garn-site" auf EMR Knoten ist eingestellt auf:

<property> 
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle,</value> 
</property> 

und kein Abschnitt für " garn.nodemanager.aux-services.spark_shuffle.class "wird überhaupt hinzugefügt.

Ich bin ein bisschen neu Spark/Hadoop Ökosystem, so erhöht dies ein paar Fragen in meinem Kopf:

  • Warum ich noch in der Lage bin, um erfolgreich zu laufen Spark-Jobs mit „spark.dynamicAllocation“ Set zu "wahr", während die grundlegenden Konfigurationsanforderungen nicht erfüllt sind? Heißt das, dass Spark irgendwie "mapreduce_shuffle" als Fallback verwenden könnte?
  • Wenn die obige Annahme wahr ist (Spark fällt zurück auf "mapreduce_shuffle"), gibt es mögliche Auswirkungen (andere?) Auf die Verwendung falscher Shuffle-Klassen ("mapreduce_shuffle" entspricht "org.apache.hadoop.map.ShuffleHandler") Klasse)?

Hinweis: Ich verwende emr-ami v 4.6.0

Antwort

2

Die yarn.nodemanager.aux-Dienste Eigenschaft muss nur wirklich auf Knoten gesetzt werden, die die GARN NodeManager laufen, was. Auf EMR sind nur die CORE/TASK-Instanzen und nicht die MASTER-Instanz (sofern es sich nicht um einen Single-Node-Cluster handelt).

Auf EMR sind die Eigenschaften yarn.nodemanager.aux-services und yarn.nodemanager.aux-services.spark_shuffle.class in der Tat auf den CORE/TASK-Instanzen richtig eingestellt, aber nicht auf der MASTER-Instanz, daher ist die AWS EMR-Dokumentation Korrigieren Sie, dass alles, was Sie tun müssen, um dynamicAllocation zu aktivieren, spark.dynamicAllocation.enabled = true ist (entweder beim Erstellen Ihres Clusters oder für eine einzelne Anwendung über Spark-Submit-Optionen).

Tatsächlich wurde dynamicAllocation standardmäßig ab emr-4.4.0 aktiviert, sodass Sie überhaupt nichts mehr tun/konfigurieren müssen, um dynamicAllocation auf emr-4.4.0 + zu verwenden. (Die einzige Ausnahme ist, wenn Sie die Funktion maximizeResourceAllocation aktiviert haben. Sie können weiterhin dynamicAllocation zusammen mit maximizeResourceAllocation verwenden, aber Sie müssen dynamicAllocation explizit in der Konfiguration beim Erstellen des Clusters aktivieren, um zu verhindern, dass spark.executor.instances gesetzt wird maximizeResourceAllocation, da das Setzen der Anzahl der Executor-Instanzen effektiv dynamicAllocation deaktiviert.)

Übrigens haben Sie recht, wenn Sie sagen, dass die MASTER-Instanz gain.nodemanager hat.aux-services stellt nur mapreduce_shuffle ein, aber dies ist nur ein Artefakt dafür, wie die Konfiguration für diesen Wert auf EMR eingestellt ist. Es kann zwar verwirrend sein, wenn dieser Wert scheinbar falsch auf der MASTER-Instanz angezeigt wird (d. H. Den spark_shuffle-Wert nicht enthält), hat jedoch keine Auswirkung, da die MASTER-Instanz keinen NodeManager ausführt.

Auch Ihre Annahme, dass Spark auf mapreduce_shuffle zurückfällt, da spark_shuffle nicht vorhanden ist, ist nicht korrekt. Der MapReduce Shuffle Service wird nur von MapReduce-Anwendungen verwendet und kann nicht von Spark-Anwendungen verwendet werden.

+0

Vielen Dank für eine ausführliche Antwort! – Val

+0

Brilliante Antwort mit detaillierter Erklärung. –

Verwandte Themen