Spark学习笔记(10)——RDD阶段划分和任务划分

一、阶段划分的概念

通过前面的学习我们知道RDD转换算子从分区数据是否会重新组合的角度看可分为两类:

一类是如map、mapPartitions等,一个分区的数据经过处理后仍然还在同一个分区。各个分区的数据不存在互相依赖的关系,即OneToOne依赖,因此各个分区在处理完自己的任务后就可以直接通过转换算子进入新的RDD,不需要谁等谁。
在这里插入图片描述
而另一类转换算子如groupBy、reduceByKey等,分区数据需要重新组合(即存在shuffle操作)。各个分区的数据存在互相依赖的关系,即Shuffle依赖(宽依赖),需要进行这类转换算子操作时,一个分区处理完任务后不能立即进行转换,需要等待所有分区都准备好后,再一起转换进入下一个阶段,这里就有了阶段划分的概念
在这里插入图片描述

二、阶段划分源码分析

dagScheduler在提交Job时会创建一个ResultStage,ResultStage只有一个,存在于最后执行行动算子的阶段
在这里插入图片描述
除了最后执行的ResultStage,还有中间的ShuffleMapStage,每有一个Shuffle依赖就增加一个阶段,故阶段总数等于宽依赖(ShuffleDependency)的个数加 1
在这里插入图片描述

三、RDD的任务划分

RDD 任务切分中间分为:Application、Job、Stage 和 Task

Application:初始化一个 SparkContext 即生成一个 Application;
Job:一个 Action 算子就会生成一个 Job;
Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1;
Task:一个 Stage 阶段中,最后一个 RDD 的分区个数就是 Task 的个数。

注意:Application->Job->Stage->Task 每一层都是 1 对 n 的关系

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值