文档章节

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

stark_summer
 stark_summer
发布于 2015/01/20 16:13
字数 480
阅读 341
收藏 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
粉丝 59
博文 75
码字总数 51050
作品 0
朝阳
CEO
Spark内部原理之运行原理一

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

sjf0115
03/15
0
0
Spark2.1.0之基础知识

在阅读本文之前,读者最好已经阅读了《Spark2.1.0之初识Spark》一文,本文将对Spark的基础知识进行介绍。但在此之前,读者先跟随本人来一次简单的时光穿梭,最后还将对Java与Scala在语言上进...

beliefer
05/24
0
0
Spark笔记整理(二):RDD与spark核心概念名词

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

xpleaf
04/25
0
0
Spark 学习资源收集【Updating】

(一)spark 相关安装部署、开发环境 1、Spark 伪分布式 & 全分布式 安装指南 http://my.oschina.net/leejun2005/blog/394928 2、Apache Spark探秘:三种分布式部署方式比较 http://dongxic...

大数据之路
2014/09/08
0
1
【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第3节①

一、以RDD为基石的Spark编程模型 在Spark中一切都是基于RDD的: 什么是RDD呢?官方给出的解释是: 也就是说每个RDD都至少有以下三个函数实现: Spark自带了非常多的RDD: RDD主要分为两种: 其...

Spark亚太研究院
2014/12/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

shell特殊符号、cut、sort、uniq、wc、tee、tr、split命令

10月15日任务 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 cut 命令 cut作用:截取字符串 用法如下:cat /etc/passwd |head -2 |cut -d ...

hhpuppy
3分钟前
0
0
Springboot实现filter拦截token验证和跨域

背景 web验证授权合法的一般分为下面几种 1使用session作为验证合法用户访问的验证方式 使用自己实现的token 使用OCA标准 在使用API接口授权验证时,token是自定义的方式实现起来不需要引入其...

funnymin
38分钟前
1
0
linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
12
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部