2015-04-23 3 views
5

Wenn ich eine RDD in sage 60 partitioniere und ich insgesamt 20 Kerne habe, die auf 20 Maschinen verteilt sind, d. H. 20 Instanzen von Einzelkernmaschinen, dann ist die Anzahl der Aufgaben 60 (gleich der Anzahl der Partitionen). Warum ist das vorteilhaft gegenüber einer einzelnen Partition pro Kern und 20 Aufgaben?Wie werden Partitionen Aufgaben in Spark zugeordnet?

Zusätzlich habe ich ein Experiment ausgeführt, bei dem ich die Anzahl der Partitionen auf 2 festgelegt habe. Die UI zeigt 2 Aufgaben an, die gleichzeitig ausgeführt werden. Was mich jedoch überrascht hat, ist, dass es Instanzen nach Abschluss von Aufgaben wechselt, z. node1 und node2 erledigen die ersten beiden Aufgaben, dann tun node6 und node8 den nächsten Satz von zwei Aufgaben usw. Ich dachte, die Anzahl der Partitionen auf weniger als die Kerne (und Instanzen) in einem Cluster festzulegen, dann würde das Programm nur das Minimum verwenden Anzahl der erforderlichen Instanzen Kann jemand dieses Verhalten erklären?

Antwort

2

Für die erste Frage: Sie möchten vielleicht mehr granulare Aufgaben als unbedingt notwendig, um weniger in den Speicher gleichzeitig zu laden. Außerdem kann es bei der Fehlertoleranz helfen, da im Fehlerfall weniger Arbeit erneuert werden muss. Es ist dennoch ein Parameter. Im Allgemeinen hängt die Antwort von der Art der Auslastung ab (IO-gebunden, speichergebunden, CPU-gebunden).

Wie für die zweite, ich glaube, Version 1.3 verfügt über Code zum dynamischen Abfragen von Ressourcen. Ich bin mir nicht sicher, in welcher Version die Pause ist, aber ältere Versionen verlangen nur die genauen Ressourcen, mit denen Sie Ihren Treiber konfigurieren. Um herauszufinden, wie sich eine Partition von einem Knoten zu einem anderen bewegt, wird AFAIK die Daten für eine Aufgabe von dem Knoten auswählen, der eine lokale Kopie dieser Daten auf HDFS hat. Da hdfs mehrere Kopien (standardmäßig 3) jedes Datenblocks enthält, gibt es mehrere Optionen, um ein bestimmtes Stück auszuführen.

+0

Vielen Dank. Allerdings gebe ich keine Daten in HDFS, sondern importiere aus S3. Ich hatte den Eindruck, dass die Daten nicht in HDFS übertragen werden, aber ich könnte falsch liegen? – monster

+0

Äh, das hängt davon ab. Spark wird sehr häufig als Hadoop-Ersatz zu HDFS verwendet, ist aber mit mehr Dingen kompatibel. Die Frage ist also zurück zu dir, wofür hast du deine Daten? Aber um ehrlich zu sein, ich habe S3 nicht dafür benutzt. Ich wäre nicht überrascht, wenn die gleichen Überlegungen gelten. Es gibt nicht so viele Möglichkeiten, verteilte Redundanz zu erzeugen ;-) –