[英]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个任务
因此,分区的执行将像这样。
12个分区将由12个执行器处理,每个执行器具有5个任务(线程) 。
12个分区将由12个执行器处理,每个执行器具有5个任务(线程) 。
。
。
。
4个分区将由4个执行者处理,每个执行者有5个任务(线程) 。
注意:通常,某些执行程序可能会迅速完成分配的工作(各种参数,例如数据局部性 ,网络I / O,CPU等)。 因此,它将通过等待配置的计划时间来选择要处理的下一个分区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.