2017-08-31 1 views
2

Ich lerne Funken und habe eine Frage über Job-Scheduling und Shuffle-Abhängigkeiten. Hier wird die DAG ich there gefunden:Verständnis shuffle in Funken

enter image description here

Wie wir auf der Stage 33 sehen wir mehrere Operationen haben: groupBy, join, groupBy, join. Die Frage ist, ich verstehe nicht ganz, warum zwei group by-Operationen in die gleiche Phase gebracht wurden. Ich dachte, groupBy erfordert shuffling und wir die DAGScheduler sollte Stage 33 in 2 Stufen mit den einzelnen groupBy und join teilen.

Antwort

3

hier Shuffles sind als Grenzen zwischen den Stufen dargestellt:

  • Stufe 30-33 Bühne
  • Stufe 31-33 Bühne
  • Stufe 32 - Etappe 33

Sobald Daten gewesen gemischt, und alle gemischten RDDs verwenden den gleichen Partitionierer. join ist 1: 1-Abhängigkeit (wenn alle Teile in der gleichen Aktion ausgeführt wurden, ist es auch lokal aufgrund der Kollokation) und nicht erforderlich uire zusätzliche Shuffle-Bühne.

1

Shuffling ist ein Prozess der Neuverteilung von Daten über Partitionen (auch Neupartitionierung), der möglicherweise Daten über JVM-Prozesse oder sogar über die Leitung (zwischen Executoren auf separaten Maschinen) verursacht.

In Ihrem Fall passiert das Mischen zwischen Parallelisierungsschritten - Stufen 30, 31, 32 als Eingabe und letzte Stufe 33 als Ziel in Paaren.

Vermeiden Sie das Mischen um jeden Preis. Denken Sie darüber nach, wie Sie vorhandene Partitionen nutzen oder Broadcast Variablen verwenden und versuchen, den Datentransfer zu reduzieren. Mehr über das Mischen in Spark können Sie lesen here.