千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

首页 视频教程 培训课程 师资团队 技术干货 常见问题 面试题 职场就业 零基础学大数据 行业资讯
【热点话题】 大数据技术干货 大数据学习教程 大数据学习笔记 大数据面试题 大数据培训问答 大数据培训机构哪些好 大数据职场就业
当前位置:大数据培训  >  大数据技术干货  >  DAG原理(源码级)

DAG原理(源码级)

来源:千锋教育
发布人:wjy
时间: 2022-10-13 16:35:00 1665650100

  1. sparkContext创建DAGScheduler->创建EventProcessLoop->调用eventLoop.start()方法开启事件监听

  2. action调用sparkContext.runJob->eventLoop监听到事件,调用handleJobSubmitted开始划分stage

  3. 首先对触发job的finalRDD调用createResultStage方法,通过getOrCreateParentStages获取所有父stage列表,然后创建自己。 如:父(stage1,stage2),再创建自己stage3

  4. getOrCreateParentStages内部会调用getShuffleDependencies获取所有直接宽依赖(从后往前推,窄依赖直接跳过) 在这个图中G的直接宽依赖是A和F,B因为是窄依赖所以跳过,所以最后B和G属于同一个stage

DAG原理(源码级)

  5. 接下来会循环宽依赖列表,分别调用getOrCreateShuffleMapStage: -- 如果某个RDD已经被划分过会直接返回stageID;

  否则就执行getMissingAncestorShuffleDependencies方法,继续寻找该RDD的父宽依赖,窄依赖老规矩直接加入: -- 如果返回的宽依赖列表不为空,则继续执行4,5的流程直到为空为止;

  -- 如果返回的宽依赖列表为空,则说明它没有父RDD或者没有宽依赖,此时可以直接调用createShuffleMapStage将该stage创建出来

  6. 因此最终的划分结果是stage3(B,G)、stage2(C,D,E,F)、stage1(A)

  7. 创建ResultStage,调用submitStage提交这个stage

  8. submitStage会首先检查这个stage的父stage是否已经提交,如果没提交就开始递归调用submitStage提交父stage,最后再提交自己。

  9. 每一个stage都是一个taskSet,每次提交都会提交一个taskSet给TaskScheduler

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>