在Spark中鼓励使用并行集合

时间:2017-01-02 12:08:51

标签: scala apache-spark parallel-processing

在Spark上使用并行集合是否有意义?

到目前为止我看到的所有Spark示例总是使用RDD的非常简单的数据类型(单个类和元组)。但实际上,集合和特定的并行集合可以用作RDD的居民。

工作者可能有多个可用于执行的核心,如果常规集合用作RDD驻留,则这些额外核心将保持空闲状态。

测试我和当地经理一起跑。

<div id="one" (click)="two.style.transform = (two.style.transform == 'translate(-100vh)') ? 'translate(0vh)' : 'translate(-100vh)'"></div>   
<div id="two" #two></div>

在这种情况下,当我使用parArray时,我看到16个线程在工作,当我使用simple Array时,只有2个线程工作。这可能被视为2名拥有8个线程的工人。

另一方面,并​​行集合的每个逻辑都可以更改为简单类型的RDD转换。

是否鼓励使用这些并行集合并将其视为良好做法?

1 个答案:

答案 0 :(得分:4)

  

是否鼓励使用这些并行集合并将其视为良好做法?

不太可能。考虑以下事实:

  • 任务中的任何并行执行对资源管理器都是完全不透明的,因此无法自动分配所需的资源。
  • 您可以使用spark.task.cpus明确询问任务中特定数量的线程,但它是全局设置,无法根据上下文进行调整,因此无论您是否使用它们,都可以有效地阻止资源
  • 如果线程利用不足是一个有效的问题,您可以随时增加分区数。

最后让quote Reynold Xin

  

并行收集相当复杂且难以管理(隐式线程池)。这对于更多的基本线程管理是有好处的,但Spark本身内置了更复杂的并行化。