9

我对 Spark 和 Scala 的并行性有些困惑。我正在运行一个实验,我必须从磁盘更改/处理某些列中读取许多(csv)文件,然后将其写回磁盘。

在我的实验中,如果我只使用 SparkContext 的并行化方法,那么它似乎对性能没有任何影响。然而,简单地使用 Scala 的并行集合(通过 par)将时间几乎减少了一半。

我在 localhost 模式下运行我的实验,参数 local[2] 用于 spark 上下文。

我的问题是何时应该使用 scala 的并行集合以及何时使用 spark 上下文的并行化?

4

2 回答 2

5

SparkContext 将有额外的处理以支持多个节点的通用性,这将在数据大小上保持不变,因此对于庞大的数据集可能可以忽略不计。在 1 个节点上,此开销将使其比 Scala 的并行集合慢。

使用 Spark 时

  1. 您有超过 1 个节点
  2. 您希望您的工作准备好扩展到多个节点
  3. 1个节点的Spark开销可以忽略不计,因为数据量巨大,不妨选择更丰富的框架
于 2014-01-01T13:19:54.207 回答
3

SparkContext 的并行化可能使您的集合适合在多个节点以及单个工作实例( local[2] )的多个本地核心上进行处理,但话又说回来,您可能会从运行 Spark 的任务调度程序中获得太多开销魔法。当然,Scala 的并行集合在单机上应该更快。

http://spark.incubator.apache.org/docs/latest/scala-programming-guide.html#parallelized-collections - 您的文件是否足够大,可以自动拆分为多个切片,您是否尝试手动设置切片数?

您是否尝试在单核上然后在两个核上运行相同的 Spark 作业?

使用一个非常大的统一结构文件,而不是多个较小的文件,期望 Spark 获得最佳结果。

于 2013-11-22T16:19:44.240 回答