繁体   English   中英

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

[英]Spark coalesce relationship with number of executors and cores

我想提出一个关于Spark的非常愚蠢的问题,以消除混乱。 我是Spark的新手,仍在尝试了解它在内部的工作方式。

假设我有一个要处理或写入某处的输入文件列表(假设为1000),并且我想使用合并将分区号减少到100。

现在,我由12位执行者运行此作业,每个执行者5个核心,这意味着它运行时有60个任务。 这是否意味着每个任务将独立地在一个分区上工作?

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

处理40个分区中的其余分区,并且4个执行者从未第二次下岗

还是来自同一执行程序的所有任务将在同一分区上工作?

回合:1:12个执行者=>处理12个分区
回合:2:12个执行者=>处理12个分区
回合:3:12个执行者=>处理12个分区
....
....
....
回合:9(已处理96个分区):4个执行程序=>处理其余4个分区

假设我有一个要处理或写入某处的输入文件列表(假设为1000),并且我想使用合并将分区号减少到100。

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

现在,我由12位执行者运行此作业,每个执行者5个核心,这意味着它运行时有60个任务。 这是否意味着每个任务将独立地在一个分区上工作?

具有执行者的工作节点

随着您的过去,可能会过去。

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

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

因此,分区的执行将像这样。

第1轮

12个分区将由12个执行器处理,每个执行器具有5个任务(线程)

第二回合

12个分区将由12个执行器处理,每个执行器具有5个任务(线程)


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

4个分区将由4个执行者处理,每个执行者有5个任务(线程)

注意:通常,某些执行程序可能会迅速完成分配的工作(各种参数,例如数据局部性 ,网络I / O,CPU等)。 因此,它将通过等待配置的计划时间来选择要处理的下一个分区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM