文档章节

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

stark_summer
 stark_summer
发布于 2015/01/20 16:13
字数 480
阅读 343
收藏 8

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

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:分析代码太多,下篇继续分析源码

© 著作权归作者所有

stark_summer
粉丝 61
博文 75
码字总数 51050
作品 0
朝阳
CEO
私信 提问
加载中

评论(0)

从0开始学习spark的学习笔记(1)

所谓学习是要在快乐中进行的,这是我用了多年的桌面壁纸现在传给大家。 Spark零基础入门第一课 1.大数据生态简介: 2.Spark 简介: 3. spark 本地安装和集群安装: 3.1 spark下载选择 4. spa...

蛋蛋淡淡定
04/21
0
0
Spark 并行计算模型:RDD

Spark 允许用户为driver(或主节点)编写运行在计算集群上,并行处理数据的程序。在Spark中,它使用RDDs代表大型的数据集,RDDs是一组不可变的分布式的对象的集合,存储在executors中(或从节...

osc_hzy90uit
2019/06/07
1
0
Spark内部原理之运行原理一

原文来源于:Spark内部原理之运行原理一 在大数据领域,只有深挖数据科学领域,走在学术前沿,才能在底层算法和模型方面走在前面,从而占据领先地位。 Spark的这种学术基因,使得它从一开始就...

sjf0115
2018/03/15
0
0
Spark笔记整理(二):RDD与spark核心概念名词

[TOC] Spark RDD 非常基本的说明,下面一张图就能够有基本的理解: Spark RDD基本说明 1、Spark的核心概念是RDD (resilient distributed dataset,弹性分布式数据集),指的是一个只读的,可分...

xpleaf
2018/04/25
0
0
Spark2.1.0之基础知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beliefer/article/details/80303035 在阅读本文之前,读者最好已经阅读了《Spark2.1.0之初识Spark》一文,本文...

泰山不老生
2018/05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP实战之文件上传与下载

目录 1. 前言 2.代码实战 2.1客户端页面配置说明 2.2 $_FILES预定义变量解析 2.3文件的移动方式 2.3.1第一种移动形式 2.3.2第二种移动形式 2.4文件上传配置及解析 2.5 错误信息说明 3. 文件上...

六道木
今天
36
0
rebar3 的使用

安装 $ git clone https://github.com/erlang/rebar3.git$ cd rebar3$ ./bootstrap $ ./rebar3 local install===> Extracting rebar3 libs to ~/.cache/rebar3/lib...===> Writi......

SummerGao
今天
20
0
聊聊nifi的AbstractBinlogTableEventWriter

序 本文主要研究一下nifi的AbstractBinlogTableEventWriter AbstractBinlogTableEventWriter nifi-1.11.4/nifi-nar-bundles/nifi-cdc/nifi-cdc-mysql-bundle/nifi-cdc-mysql-processors/src......

go4it
今天
18
0
如何解决Git中的合并冲突 - How to resolve merge conflicts in Git

问题: 如何解决Git中的合并冲突? 解决方案: 参考一: https://stackoom.com/question/g5t/如何解决Git中的合并冲突 参考二: https://oldbug.net/q/g5t/How-to-resolve-merge-conflicts-...

fyin1314
今天
23
0
最常用的linux命令

查看磁盘挂载情况: df -h 查看当前目录下每个文件夹的大小 du -lh --max-depth=1 清空特定文件root >root 查看安装的linux发型版本 cat /proc/version *******lsb_release -a uname --m 查看...

fairy1674
今天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部