java任务分解_再谈DAG任务分解和Shuffle RDD

本文深入探讨了Spark中的DAGScheduler如何分解任务和提交Stage,重点关注ShuffleMapStage和ResultStage的创建与Task提交过程。文章详细解释了Task的序列化、Task的生成,以及ShuffleMapTask和ResultTask的执行机制,特别是ShuffleMapTask如何将数据写入BlockManager。此外,还简单介绍了Shuffle RDD的相关概念及其在计算过程中的作用。
摘要由CSDN通过智能技术生成

1、DagScheduler分析

DagScheduler功能主要是负责RDD的各个stage的分解和任务提交。Stage分解是从触发任务调度过程的finalStage开始倒推寻找父stage,如果父stage没有提交任务则循环提交缺失的父stage。每个stage有一个父RDD的概念,根据分区数的多少创建多个任务(Task)。

Task的调度实际是通过TaskSchedulerImp来完成的,TaskSchedulerImp里根据环境部署的不同又会使用不同的Backend,比如Yarn集群、独立集群等其Backend是不一样的,这里先有个概念,先不深究Backend。

这里先看看DagScheduler的核心逻辑把。里面首先要研究的一个方法:

defsubmitMissingTasks(stage:Stage,jobId:Int)

该方法就是提交stage执行,为什么叫这个名称呢?说明这里的stage是需先需要提交执行的,没有其他依赖的stage还未执行了。

submitMissingTasks方法会根据RDD的依赖关系创建两种task,ResultTask和ShuffleMapTask。

一步步来,只看关键代码,因为整体代码太多了不利于理解关键逻辑。

1.1 生成序列化的taskBinary

taskBinaryBytes = stage match {

case stage: ShuffleMapStage =>

JavaUtils.bufferToArray(

closureSerializer.serialize((stage.rdd, stage.shuffleDep): AnyRef))

case stage: ResultStage &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值