Spark任务调度源码解析.docx
《Spark任务调度源码解析.docx》由会员分享,可在线阅读,更多相关《Spark任务调度源码解析.docx(20页珍藏版)》请在第一文库网上搜索。
1、Spark任务调度源码解析SPark作业通过资源调度系统获取了计算资源(请参考前文Spark作业资源调度源码解析),然后即开始调度计算任务来执行实际的数据处理(比如ET1,机器学习、图计算),本文继续来解析SPark任务调度的相关处理过程和原理。Action触发任务调度Spark是惰性计算模式,所有的transformation算子的实际执行都是通过action算子来触发的;action算子是划分job的分界,因此本文的任务调度以job为单位来解析Spark作业任务调度的实现。RDD的action算子(例如:co11ect、count、take、foreachPartition等)都会调用Sp
2、arkContext的runJob方法来提交一个job,以co11ect算子为例,该算子的实现如下:efco1Iect():ArrayT=WithSCoPeva1resu1ts=sc.runJob(this,(iter:IteratorT)=iter.Array.concat(resu1ts:*)在runJob方法中实际是调用了DAGSChedU1er的SubmitJob方法,然后通过eventProcess1oop对象将作业提交的事件放到了事件队列eventQueue中:Ijob1d,rdd,func2,PartitionS.toArray,Ca11Site,waiter,eventProc
3、ess1oop是在DAGSchedu1er初始化时创建的事件调度对象,该对象启动了一个线程不断从eventQueue中获取事件来处理:j1:Va1event=eventQueue.take()OnReceive(event)拿到JobSubmitted的事件后由Event1oop的子类DAGSchedu1erEventProcess1oop调用Hand1eJobSubmitted方法来进行处理,该方法的处理逻辑主要分为两步,第一步是划分Stage构建DAG有向无环图,第二步则是发起任务调度,本文的主要内容也将围绕这两点来展开:schedu1erJh,nd1cJ()I)Sub1ni1ted(jo
4、bI(1:IVarfina1Stage:ReSU11Stage二fina1Stage=CreateResu1tStage(fina1RDD,func,partitionssubmitStage(fina1Stage)划分StageDAG是一个有向无环图,SPark根据各RDD的数据来源、算子以及分区器等要素构建出不同类型的RDD对象(例如HadOOPRDD、Shuff1edRDD)、子RDD与父RDD之间的依赖关系集(OneToOneDependencyShuff1eDependencyRangeDependency)以及RDD分片的数据本地性属性等,进而构建出整个作业的DAGo由于SPark
5、的Stage是以ShUffIe也即宽依赖为边界进行划分的,有了DAG接下来就可以根据RDD之间的依赖类型来划分stage了o首先从resu1trdd开始向前回溯不断获取当前rdd的所有宽依赖列表,如果遍历到的依赖是宽依赖则放入ParentSHashSet中,如果遍历到的是窄依赖则继续遍历该窄依赖的rdd的所有dependency,直到找到下一个宽依赖并放到parents列表中或者遍历了其所有父rdd无法找父rdd为止,得到rdd所有的shuff1e依赖:rdd:RDD_):(HashSetShuff1eDependency1,VaIParentS二newHaShSetShuffIeDepend
6、ency_-I.resourceProfiIes二.I1UShSRcs()ui、(3)m门!c,.Va1WaitingFOrViSit=new1iStBUfferRDDWaitingFOrViSit+=rddWhiie(WaitingForVisiXnonEmpty)VaItoVisit二WaitingForViSit.remove(O)if(!visited(toVisit)visited+=toVisitOP1iOn(IOViSiI.ge1ResourceProfi1e).foreach(resourceProfi1es+=_)CaSeShUffIeDep:Shuff1eDependenc
7、y1,WaitingForVisit.PrePend(dependency.rdd)(parents,resourceProfi1es)然后根据该rdd的Shuff1eDeps列表中的每个shuff1e依赖创建出相应的父stage:rivatedefgetOrCreateParentStages(shuffIeDeps:I1ashSetShuff1eD)endency_,firstJob1d:Int):1iStStage=:I.1:IgetOrCreateShuff1eMapStage(shuffIeDep,firstJob1d)其中getOrCreateShuff1eMapStage方法采用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spark 任务 调度 源码 解析