spark内核揭秘ITeye - 超凡娱乐

spark内核揭秘ITeye

2019-01-13 05:10:07 | 作者: 涵阳 | 标签: 办法,进入,代码 | 浏览: 868

RDD源码的count办法:

从上面代码能够看出来,count办法触发SparkContext的runJob办法的调用:

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

进一步盯梢runJob(rdd, (context: TaskContext, iter: Iterator[T]) = func(iter), partitions, allowLocal)办法:

持续盯梢进入runJob[T, U](rdd, func, partitions, allowLocal, (index, res) = results(index) = res)办法:

代码剖析:

1、getCallSite :


2、clean(func):

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


代码剖析:

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

上面代码剖析:

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


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

咱们能够看出来,是给自己发消息的

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

首要构建finalStage,然后又一个getMissingParentsStages办法,能够发现运转有本地运转和集群运转两种形式,本地运转首要用于本地试验和调试:

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



3.1.3.2、进入 runLocally(job)办法:


3.1.3.2.1、 runLocallyWithinThread(job)办法:



3.1.3.3、进入 submitStage(finalStage)办法:



上面代码剖析:submitStage第一次传入的参数是Job的最终一个Stage,然后判别一下是否缺失父Stage,假如没有依靠的parent Stage的话就能够submitMissingTasks运转,假如有parent Stage的话就要再一次submitStage做递归操作,最终会导致submitMissingTasks的调用:

3.1.3.3.1、进入  activeJobForStage(stage) 办法:


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



跟进getShuffleMapState办法:


进入registerShuffleDependencies办法:


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








PS:剖析代码太多,下篇持续剖析源码

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    PHP多态ITeye

    多态,目标,不同
  • 3
  • 4
  • 5

    调用体系程序(转)ITeye

    进程,咱们,程序
  • 6
  • 7

    puttyITeye

    保存,用户名,暗码
  • 8

    1001ITeye

    小数点,个数,位数
  • 9
  • 10