2013-11-04 17 views
7

Ich habe etwas Verwirrung über Parallelität in Spark und Scala. Ich führe ein Experiment durch, in dem ich viele (csv) Dateien von der Platte lesen muss, um bestimmte Spalten zu ändern/zu bearbeiten und sie dann auf die Platte zurückzuschreiben.Verständnis der Parallelität in Spark und Scala

In meinen Experimenten, wenn ich SparkContext parallelize-Methode nur dann verwenden, scheint es keinen Einfluss auf die Leistung. Die Verwendung von Scalas parallelen Sammlungen (durch Par) reduziert die Zeit jedoch fast auf die Hälfte.

Ich führe meine Experimente im Localhost-Modus mit den Argumenten local [2] für den Funkenkontext aus.

Meine Frage ist, wann sollte ich scala Parallelsammlungen verwenden und wann Parallelisierung von Funken Kontext verwenden?

+0

Es gibt verschiedene parallele Sammlungen in Scala. Bitte beachten Sie: http: //docs.scala-lang.org/overviews/parallel-collections/conversions.html und http://docs.scala-lang.org/overviews/parallel-collections/concrete-parallel-collections.html –

Antwort

3

SparkContext der parallelize Mai macht für die Verarbeitung auf mehrere Knoten Ihrer Sammlung geeignet, sowie auf mehreren lokalen Kerne Ihres einzigen Arbeiter Instanz (local [2]), aber dann wieder, werden Sie wahrscheinlich zu viel Aufwand erhalten von Spark Aufgabe ausgeführt wird Scheduler all diese Magie. Natürlich sollten Scalas parallele Sammlungen auf einer Maschine schneller sein.

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - sind Ihre Dateien groß genug, um automatisch in mehrere Slices aufgeteilt zu werden? Haben Sie versucht, die Slices manuell zu setzen?

Haben Sie versucht, denselben Spark-Job auf einem einzelnen Kern und dann auf zwei Kernen auszuführen?

Erwarten Sie das beste Ergebnis von Spark mit einer wirklich großen, einheitlich strukturierten Datei, nicht mit mehreren kleineren Dateien.

3

SparkContext wird zusätzliche Verarbeitung haben, um die Allgemeingültigkeit mehrerer Knoten zu unterstützen, dies wird auf der Datengröße konstant sein, so dass es für große Datenmengen vernachlässigbar sein kann. Auf einem Knoten wird dieser Overhead langsamer als Scalas parallele Sammlungen.

Funken wenn

  1. Sie haben mehr als 1 Knoten
  2. Sie möchten Ihre Arbeit auf mehrere Knoten zu skalieren bereit sein
  3. Die Spark-Overhead auf 1 Knoten, da die Daten vernachlässigbar ist ist riesig, also können Sie auch das reichere Rahmenwerk wählen