Spark与执行程序和核心数量的合并关系

时间:2016-07-19 18:12:34

标签: hadoop apache-spark yarn

我想提出一个关于Spark的非常愚蠢的问题,因为我想清除我的困惑。我在Spark中非常新,并且仍然试图理解它是如何在内部工作的。

说,如果我有一个输入文件列表(假设为1000)我想要处理或写入某处,我想使用coalesce将我的分区号减少到100.

现在我使用12个执行程序运行此作业,每个执行程序有5个核心,这意味着运行时有60个任务。这是否意味着,每个任务将独立地在一个单独的分区上工作?

  

回合:1 12个执行者,每个执行者有5个核心=> 60个任务流程60   分区
  回合:2 8个执行者,每个执行者有5个核心=> 40个任务

     

处理剩余的40个分区,4个执行器永远不会放置   第二次工作

或者来自同一执行程序的所有任务都可以在同一个分区上运行?

  

回合:1:12执行者=>进程12分区
  回合:2:12   executors =>进程12分区
  回合:3:12执行者=>   进程12分区
  ....
  ....
  ....
  回合:9(96个分区   已处理):4位执行者=>处理剩下的4个   分区

1 个答案:

答案 0 :(得分:4)

  

说,如果我有一个输入文件列表(假设为1000)我想要处理或写入某处,我想使用coalesce将我的分区号减少到100.

默认情况下,在number of partitions = hdfs blocks的情况下,指定为coalesce(100)时,Spark会将输入数据划分为100个分区。

  

现在我使用12个执行程序运行此作业,每个执行程序有5个核心,这意味着运行时有60个任务。这是否意味着,每个任务将独立地在一个单独的分区上工作?

Worker node with executers

当你通过时可能会被传递

--num-executors 12:在应用程序中启动的执行程序数。

--executor-cores 5:每个执行者的核心数。 1核心= 1个任务一次

所以分区的执行就像这样

第1轮

12个分区将由 12个执行程序处理,每个执行程序包含5个任务(线程)

第2轮

12个分区将由 12个执行程序处理,每个执行程序包含5个任务(线程)


回合:9(已处理96个分区):

4个分区将由 4个执行程序处理,每个执行程序包含5个任务(线程)

<强> 注:   通常,某些执行程序可能会快速完成分配的工作(各种参数,如data locality,网络I / O,CPU等)。因此,它将通过等待配置的调度时间来选择要处理的下一个分区。