运行更多分区比核心数更有意义吗?

时间:2017-02-16 20:58:28

标签: apache-spark

考虑到Spark任务的数量不能高于核心数,运行更多分区而不是核心数是否合理?如果是这样,你能详细说明吗?

1 个答案:

答案 0 :(得分:1)

  • 正如您所提到的,您需要至少使用1个任务/核心来充分利用所有群集的资源。
  • 根据每个阶段/任务所需的处理类型,您可能会遇到处理/数据偏差 - 可以通过使分区更小/更多分区来缓解,从而更好地利用集群(例如,执行程序运行时更长)花费5分钟其他执行者的任务能够运行10个30秒的较短任务。)
  • 可能还有其他情况需要增加分区数量(例如,如果达到大小/内存限制)。

    查看这篇关于并行性调优的好文章:http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/

<强>更新 这有助于处理/数据偏差,并为您提供更好的集群利用率和更快的作业执行(下面是Spark UI的示例截图,您可以在其中看到任务之间的偏差 - 请参阅diff Median vs Max任务持续时间):

假设你有一个可以并行运行2个任务的集群。

  • 使用1个任务(1个空闲核心)处理数据需要60分钟 - 作业需要60米。
  • 如果你把它分成2,你可能会发现因为歪斜:任务1:45米,任务-2:15米。工作需要45米(30米你有1个闲置核心)。
  • 如果你将它拆分为4,你可能得到:任务1:30米,任务-2:10米,任务-3:10米,任务-4:10米。作业需要30米(第一个核心运行1个任务30米,而另一个运行其他3个较小的任务,每个10米)。 等

Skew: Max vs Median