第34课: Stage划分和Task最佳位置算法源码彻底解密

本文深入解析Spark作业调度过程中的Stage划分和Task最佳位置算法。Stage划分基于宽依赖,而Task最佳位置算法追求数据本地性以提升性能。通过分析Spark源码,详细阐述了从Action出发,如何触发Job、Stage的创建和计算过程,以及Task本地性如何通过getPreferredLocs方法实现。理解这些机制对于优化Spark应用至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第34课:  Stage划分和Task最佳位置算法源码彻底解密


Spark作业调度的时候,Job提交过程中Stage 划分的算法以及Task最佳位置的算法。Stage的划分是DAGScheduler工作的核心,涉及作业在集群中怎么运行,Task最佳位置数据本地性的内容。Spark 算子的构建是链式的,涉及到怎么进行计算,首先是划分Stage,Stage划分以后才是计算的本身;分布式大数据系统追求最大化的数据本地性,数据本地性是指数据进行计算的时候,数据就在内存中,甚至不用计算就直接获得结果。

Spark Application中可以因为不同的Action触发众多的Job,也就是说一个Application中可以有很多的Job,每个Job是由一个或者多个Stage构成的,后面的Stage依赖于前面的Stage,也就是说只有前面依赖的Stage计算完毕后,后面的Stage才会运行;

Stage划分就是根据宽依赖,什么时候产生宽依赖呢?例如reducByKey、groupByKey等等;

我们从RDD的collect()方法开始,collect算子是一个Action,会触发job的运行:

RDD.scala的collect方法源码,调用了runJob方法:

1.           def collect(): Array[T] = withScope {

2.            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大模型与Agent智能体

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

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

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

打赏作者

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

抵扣说明:

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

余额充值