RDD 任务划分
v>
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 的关系。
源码分析:
第一步:handleJobSubmitted()函数中
第二步:进入submitStage(),查看下方submitMissingTasks()这一段代码,与任务Task划分有关
匹配阶段shuffleMapStage or ResultStage
每个case中的new Task的个数,即为任务的个数
Task个数与map映射的size有关
map的size取决于partitionsToCompute的结果
DAGSchedluer.scala
DAGSchedluer.scala的submitMissingTasks方法
第三步:进入partitionsToCompute,复制findMissingPartitions,因为findMissingPartitions是stage的属性,stage此时为ResultStage(以ResultStage为例),因此后退,点击ResultStage,搜索findMissingPartitions
DAGSchedluer.scala
其中job.numPartitions是来自于当前阶段最后一个RDD的分区数
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~