2013-11-04 13 views
7

Ho una certa confusione riguardo il parallelismo in Spark e Scala. Sto facendo un esperimento in cui devo leggere molti file (csv) dal disco per modificare/elaborare determinate colonne e poi scriverle di nuovo sul disco.Capire il parallelismo in Spark e Scala

Nei miei esperimenti, se utilizzo il metodo di parallelizzazione di SparkContext solo allora non sembra avere alcun impatto sulle prestazioni. Tuttavia, semplicemente usando le collezioni parallele di Scala (tramite il par) si riduce il tempo a metà.

Sto eseguendo i miei esperimenti in modalità localhost con gli argomenti local [2] per il contesto spark.

La mia domanda è quando dovrei usare le collezioni parallele di scala e quando usare il parallelize del contesto spark?

+0

ci sono varie collezioni parallele in Scala. vedere: http: //docs.scala-lang.org/overviews/parallel-collections/conversions.html e http://docs.scala-lang.org/overviews/parallel-collections/concrete-parallel-collections.html –

risposta

3

Il parallelize di SparkContext può rendere la raccolta adatta per l'elaborazione su più nodi, nonché su più core locali della singola istanza di lavoro (locale [2]), ma di nuovo, probabilmente si ottiene un sovraccarico eccessivo dall'esecuzione dell'attività di Spark scheduler tutto ciò che magia. Naturalmente, le collezioni parallele di Scala dovrebbero essere più veloci su una singola macchina.

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - i file sono abbastanza grandi da essere suddivisi automaticamente su più sezioni, hai provato a impostare manualmente il numero di fette?

Hai provato a eseguire lo stesso lavoro Spark su single core e quindi su due core?

Aspettatevi il miglior risultato da Spark con un file veramente grande e uniformemente strutturato, non con più file più piccoli.

3

SparkContext avrà un'ulteriore elaborazione per supportare la generalità di più nodi, questo sarà costante sulle dimensioni dei dati, quindi potrebbe essere trascurabile per enormi set di dati. Su 1 nodo questo overhead lo renderà più lento delle collezioni parallele di Scala.

Usa Spark quando

  1. avete più di 1 nodo
  2. Volete che il vostro lavoro per essere pronti a scalare a più nodi
  3. L'overhead Spark su 1 nodo è trascurabile, perché i dati è enorme, quindi potresti anche scegliere la struttura più ricca