文档章节

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

stark_summer
 stark_summer
发布于 2015/01/20 16:13
字数 480
阅读 342
收藏 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
私信 提问
Spark内部原理之运行原理一

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

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

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

泰山不老生
05/24
0
0
Spark笔记整理(二):RDD与spark核心概念名词

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

xpleaf
04/25
0
0
【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第3节①

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

Spark亚太研究院
2014/12/29
0
0
Spark——Streaming源码解析之DAG定义

---title: sparkStreaming源码解析之DAG定义subtitle: sparkStream的DAG定义源码解析description: sparkStream的DAG定义源码解析keywords: [spark,streaming,源码,DAG]author: liyzdate: 20......

freeli
12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的FsStateBackend

序 本文主要研究一下flink的FsStateBackend StateBackend flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBackend.java @PublicEvolvingpublic interface Sta......

go4it
14分钟前
0
0
webpack配置proxyTable时pathRewrite无效的解决方法

webpack配置接口地址代理 在项目开发中,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 ...

前端小攻略
14分钟前
0
0
安装jenkins

1.下载 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.155/jenkins.war 2.后续操作和 dubbo 安装类似: (1)复制一份空白的tomcat,重命名为:jenkins-tomcat (2)war包放入t...

狼王黄师傅
22分钟前
1
0
zookeeper配置与使用

一.登录官网下载 不要带后缀的,那是公侧版本,下稳定版,比如3.4.9 二.安装与使用 解压后bin里是启动程序 配置文件:在conf下 复制zoo_sample.cfg改名为为zoo.cfg,打开zoo修改文件...

小兵胖胖
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部