2013-11-04 40 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个节点上的星火开销可以忽略不计,因为数据是巨大的,所以你不妨选择更丰富的框架