sparkcore分区_任务中如何确定spark分区数、task数目、core个数、worker节点个数、excutor数量...

1、任务中如何确定spark RDD分区数、task数目、core个数、worker节点个数、excutor数量

20200212161622059014.png

(1)hdfs 上的文件的存储形式是以 Block 的形式存储的,每个 File 文件都包含了很多块,一个Block默认是128M大小。当 spark 从 hdfs 上读取数据的时候,会根据具体数据格式对应的 InputFormat 进行解析,一般是将若干个Block合并成一个输入分片,称为 InputSplit,其中要注意InputSplit不能跨越文件 File。

(2)spark 会为这些分片生成具体的 task,InputSplit 与 Task 是一 一对应的关系,随后这些具体的 Task 每个都会被分配到集群上的某个节点的某个 Executor 去执行,每个 task 执行的结果就生成了RDD的一个 partiton。

每个 worker 节点可以起一个或多个 Executor。

每个 Executor 由若干 core 组成,每个 Executor 的每个 core 一次只能执行一个 Task。

每个 Task 执行的结果就是生成了目标 RDD 的一个 partiton。

注意: 这里的 core 是虚拟的 core 而不是机器的物理 CPU 核,可以理解为就是 Executor 的一个工作线程。

Task被执行的并发度 = Executor数目 * 每个Executor核数(=core总个数)

2、RDD 中 partition 的数目:

对于数据读入阶段,例如 sc.textFile,输入文件被划分为多少 InputSplit 就会需要多少初始 Task。

在 Map 阶段 partition 数目保持不变。

在 Reduce 阶段,RDD 的聚合会触发 shuffle 操作,聚合后的 RDD 的 partition 数目跟具体操作有关,例如 repartition 操作会聚合成指定分区数,还有一些算子是可配置的。

RDD 在计算的时候,每个分区都会起一个 task,所以 rdd 的分区数目决定了总的 task 数目。

申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的 task。

例如:

RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。

如果计算资源不变,你有101个task的话,就需要6个轮次,在最后一轮中,只有一个task在执行,其余核都在空转。

如果资源不变,你的RDD只有2个分区,那么同一时刻只有2个task运行,其余18个核空转,造成资源浪费。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值