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

sik*_*ara 2 hadoop hadoop-yarn apache-spark

我想提出一个关于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个分区

mrs*_*vas 5

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

在默认情况下,在spark number of partitions= =中hdfs blockscoalesce(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等)。因此,它将通过等待配置的计划时间来选择要处理的下一个分区。