2013-11-04 38 views
7

我對Spark和Scala中的並行性有些困惑。我正在運行一個實驗,在該實驗中,我必須從磁盤更改/處理某些列中讀取許多(csv)文件,然後將其寫回磁盤。瞭解Spark和Scala中的並行性

在我的實驗中,如果我使用SparkContext的並行化方法,那麼它對性能沒有任何影響。然而,簡單地使用Scala的平行集合(通過par)將時間減少到幾乎一半。

我正在本地主機模式下運行我的實驗,使用參數local [2]作爲spark上下文。

我的問題是什麼時候應該使用scala的並行集合以及何時使用spark上下文的並行化?

+0

斯卡拉有各種平行集合。請參閱:http://docs.scala-lang.org/overviews/parallel-collections/conversions.html和http://docs.scala-lang.org/overviews/parallel-collections/concrete-parallel-collections.html –

回答

3

SparkContext的並行化可能會使您的集合適合在多個節點以及單個工作者實例的多個本地核心(本地[2])上處理,但是再次運行Spark任務可能會產生太多開銷調度程序的所有魔法。當然,Scala的並行集合在單機上應該更快。

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - 您的文件是否足夠大,可以自動分割爲多個切片,您是否嘗試手動設置切片編號?

您是否嘗試在單核上運行相同的Spark作業,然後在兩個核心上運行?

預計Spark最好的結果是一個非常大的統一結構化文件,而不是多個較小的文件。

3

SparkContext將進行額外的處理,以支持多個節點的通用性,這對數據大小將保持不變,因此對於大型數據集可能會忽略不計。在1節點上,這個開銷會比Scala的並行集合慢。

使用星火當

  1. 你有超過1個節點
  2. 你想你的工作做好準備擴展到多個節點
  3. 1個節點上的星火開銷可以忽略不計,因爲數據是巨大的,所以你不妨選擇更豐富的框架