PySpark基础入门(5):Spark 内核调度

目录

Spark 内核调度

DAG

内存迭代计算

Spark并行度

Spark任务调度流程

Spark 内核调度

Spark任务调度:如何组织任务去处理RDD中每个分区的数据,根据RDD的依赖关系构建DAG基于DAG划分Stage将每个Stage中的任务发到指定节点运行。基于Spark的任务调度原理,可以合理规划资源利用,做到尽可能用最少的资源高效地完成任务计算

DAG

有向无环图,代表的是spark任务的执行流程图;

示例:

DAG图的作用:标识代码的逻辑运行流程;

DAG图的产生:一个action算子会将其前面一串的RDD依赖关系执行,也就是说一个action会产生一个DAG图

Job和Action的关系

1个action会产生一个DAG,而一个DAG会在程序运行中产生一个Job;

所以 1action=1DAG=1Job

在一个Application中,可以有多个Job,每一个Job内含一个DAG,同时每一个Job都是由一个Action产生的

DAG和分区之间的关联

DAG是Spark代码的逻辑执行图,其最终作用是为了构建物理上的Spark详细执行计划;

由于Spark是分布式执行的,所以DAG与分区也有关联;带有分区交互的DAG是在程序运行之后由spark决定的

DAG的宽窄依赖和阶段划分

窄依赖:父RDD的一个分区,全部将数据发给子RDD的一个分区;

宽依赖(shuffle):父RDD的一个分区,将数据发给子RDD的多个分区;(需要依赖网络IO)

区分宽窄依赖:看RDD之间有无分叉;

阶段划分:按照宽依赖划分不同的Stage

划分依据:从后向前,遇到宽依赖就划分出一个阶段,成为Stage,如图:

由此可以看出,每一个阶段的内部一定是窄依赖;

内存迭代计算

如图,在每一个阶段的内部,有多个Task并行计算,每一个Task是一个线程,线程的相关运算均在内存中完成;这样的多个Task,就形成了并行的内存计算管道;

Task的数量收受到全局并行度的限制,大部分的算子都会依循全局并行度的要求,规划自己的分区;如上图所示,设置了全局并行度为3,rdd算子的并行度也是3(有3个Task)

一般来说,只设置全局并行度,不为计算算子单独设置并行度(否则内存迭代管道会减少,内存迭代管道的长度也会缩短)(有的排序算子需要设置并行度,比如说进行全局排序)

Spark并行度

所谓的并行,指的是在同一时间内,有多少个task在运行;

并行度的设置

全局并行度的设置:

集群中如何规划并行度

设置为CPU总核心数的2-10倍;

原因:

注意:并行度的设置只与CPU的总核心数有关;

Spark任务调度流程

spark的任务调度由Driver来完成,包括以下内容:

Driver内的两个组件:

①DAG调度器:将逻辑的DAG图进行处理,最终得到逻辑上的Task划分

②Task调度器:基于DAG的产出,来规划这些逻辑的task应该在哪些物理的executor上运行,并监控管理其运行

spark的程序调度流程:

如下图所示:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THE WHY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值