首页 > 其他 > 详细

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01

时间:2015-01-21 02:10:58      阅读:270      评论:0      收藏:0      [点我收藏+]

RDD源码的count方法:

bubuko.com,布布扣

从上面代码可以看出来,count方法触发SparkContext的runJob方法的调用:

bubuko.com,布布扣

进入?runJob(rdd, func, 0 until rdd.partitions.size, false)方法:

bubuko.com,布布扣

进一步跟踪runJob(rdd, (context: TaskContext, iter: Iterator[T]) => func(iter), partitions, allowLocal)方法:

bubuko.com,布布扣

继续跟踪进入runJob[T, U](rdd, func, partitions, allowLocal, (index, res) => results(index) = res)方法:

bubuko.com,布布扣

bubuko.com,布布扣

代码分析:

1、getCallSite :

bubuko.com,布布扣

2、clean(func):

bubuko.com,布布扣

3、dagScheduler.runJob(rdd, cleanedFunc, partitions, callSite, allowLocal,?resultHandler, localProperties.get):

bubuko.com,布布扣

代码分析:

3.1、进入submitJob(rdd, func, partitions, callSite, allowLocal, resultHandler, properties):

bubuko.com,布布扣

bubuko.com,布布扣

上面代码分析:

3.1.1、 进入new JobWaiter(this, jobId, partitions.size, resultHandler)方法

bubuko.com,布布扣

3.1.2、进入eventProcessActor ! JobSubmitted(?jobId, rdd, func2, partitions.toArray, allowLocal, callSite, waiter, properties)方法

bubuko.com,布布扣

我们可以看出来,是给自己发消息的

3.1.3、进入? dagScheduler.handleJobSubmitted(jobId, rdd, func, partitions, allowLocal, callSite,listener, properties)方法

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

首先构建finalStage,然后又一个getMissingParentsStages方法,可以发现运行有本地运行和集群运行两种模式,本地运行主要用于本地实验和调试:

3.1.3.1、进入??finalStage = newStage(finalRDD, partitions.size, None, jobId, callSite)方法:

bubuko.com,布布扣

bubuko.com,布布扣

3.1.3.2、进入?runLocally(job)方法:

bubuko.com,布布扣

3.1.3.2.1、?runLocallyWithinThread(job)方法:

bubuko.com,布布扣

bubuko.com,布布扣

3.1.3.3、进入 submitStage(finalStage)方法:

bubuko.com,布布扣

bubuko.com,布布扣

上面代码分析:submitStage第一次传入的参数是Job的最后一个Stage,然后判断一下是否缺失父Stage,如果没有依赖的parent Stage的话就可以submitMissingTasks运行,如果有parent Stage的话就要再一次submitStage做递归操作,最终会导致submitMissingTasks的调用:

3.1.3.3.1、进入??activeJobForStage(stage)?方法:

bubuko.com,布布扣

3.1.3.3.2、进入??getMissingParentStages(stage).sortBy(_.id)?方法:

bubuko.com,布布扣

bubuko.com,布布扣

跟进getShuffleMapState方法:

bubuko.com,布布扣

进入registerShuffleDependencies方法:

bubuko.com,布布扣

3.1.3.3.3、进入submitMissingTasks(stage, jobId.get)?方法:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

PS:分析代码太多,下篇继续分析源码

spark内核揭秘-09-RDD的count操作 触发Job全生命周期-01

原文:http://stark-summer.iteye.com/blog/2177701

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!