Spark Streaming揭秘 Day8 RDD生命周期研究
Spark Streaming揭秘 Day8
RDD生命周期研究
今天让我们进一步深入SparkStreaming中RDD的运行机制。从完整的生命周期角度来说,有三个问题是需要解决的:
- RDD到底是怎么生成的
- 具体执行的时候和Spark Core上的执行有所不同
- 运行之后对RDD如何处理,怎么对已有的RDD进行管理
今天主要聚焦于第一个问题。
从DStream开始
DStream类的注释很明确的说明了,DStream中包含以下内容:
- DStream依赖的其他DStream(第一个DStream是外部数据源产生)
- DStream产生RDD的时间间隔
- 产生RDD所使用到的方法*
可以看到,这里很明确说明了RDD的生成是在DStream中触发的。
关键方法
通过上一课的分析,我们可以知道JobScheduler是通过generateJob这个方法来与DStream交互的。

其中的关键是getOrCompute方法,再进一步分析此方法

其中调用了compute方法,而注释中也说明了,每个DStream都会通过compute方法生成RDD!!!
compute会由各个子类来进行实现,我们找一个常用的MappedDStream看一下。

通过这个代码,我们可以发现两点:
- compute方法中实现了map这个方法的业务逻辑
- compute方法会调用parent的getOrCompute
这说明了,RDD从后往前依赖,可以进行回溯,这也解释了为什么在JobScheduler中仅仅是对outputStream进行处理的原因。
RDD生成的完整过程
下面引用一张图将上面的说明进行一下串联:

在各个DStream中,都实现了getOrCompute方法,在数据未缓存的情况下,会调用compute方法向上追溯到DStream的源头,并将结果逐层向下传递,从而实现了完整的业务处理。
小结
我们会发现,对DStream的所有操作,其实都是作用在RDD上的Transformation操作,只是要加上一个时间维度。统一通过outputStreams的generateJob方法来触发实际的action调用,而处理逻辑和依赖关系,都封装在了DStream内部实现,充分体现了模块的自治性,非常值得借鉴。
欲知后事如何,且听下回分解
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day8 RDD生命周期研究的更多相关文章
- Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期
Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期 昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Re ...
- Spark Streaming揭秘 Day18 空RDD判断及程序中止机制
Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...
- Spark Streaming揭秘 Day16 数据清理机制
Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...
- Spark Streaming揭秘 Day19 架构设计和运行机制
Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...
- Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展
Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...
- Spark Streaming揭秘 Day17 资源动态分配
Spark Streaming揭秘 Day17 资源动态分配 今天,让我们研究一下一个在Spark中非常重要的特性:资源动态分配. 为什么要动态分配?于Spark不断运行,对资源也有不小的消耗,在默认 ...
- Spark Streaming揭秘 Day14 State状态管理
Spark Streaming揭秘 Day14 State状态管理 今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作.State是SparkStreaming ...
- Spark Streaming揭秘 Day11 Receiver Tracker的具体实现
Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...
- Spark Streaming揭秘 Day5 初步贯通源码
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...
随机推荐
- STM32W108芯片的SWD在IAR7.30版本中不能用
提示说0x20000B8不能读,When Clear soft RAM BP
- Header 与 Footer 的 DIV 高度固定, 中间内容 DIV高度自适应,内容不满一页时,默认填满屏幕。
一.需求: 页面布局分三大块: Header Body Footer 1.内容不满一页时,Footer 在屏幕最底部,Body 填充满 Header 与 Footer 中间的部分. 2.当缩小浏览器时 ...
- css笔记09:选择器优先级
1. (1) <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 经常被忽略的几个CSS3属性之强大应用(一、timing-function: steps() 二、animation-direction 三、timing-function: cubic-bezier())
一.timing-function: steps() 一开始在使用CSS3的时候并没有太注意这个timing-function,只是注意到自定义贝塞尔曲线. 1)一个项目中的实例 先来看看左边加了st ...
- CF Covered Path (贪心)
Covered Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- [改善Java代码]推荐使用枚举定义常量
枚举和注解都是在Java1.5中引入的,虽然他们是后起之秀,但是功能不容小觑,枚举改变了常量的声明方式,注解耦合了数据和代码. 建议83:推荐使用枚举定义常量 一.分析 常量的声明是每一个项目中不可或 ...
- Ajax-数据格式-html
- base.AutoScaleMode = AutoScaleMode.Font; 方法“InitializeComponent”内的代码由设计器生成,不应手动修改。请移除任何更改,然后尝试重新打开设计器”。
http://www.taohuiduo.com 反编译后的工程文件用VS2010打开后,在打开窗体时会出现一系列错误提示: 第一种情况: “设计器无法处理第 152 行的代码: base.AutoS ...
- Remote Desktop Connection Manager介绍
Remote Desktop Connection Manager (RDCMan) 是微软Windows Live体验团队的主要开发者 Julian Burger开发的一个远程桌面管理工具.简称为R ...
- C#Winform版获取Excel文件的内容
public MainForm() { InitializeComponent(); //this.ofd_in.DefaultExt = ".xlsx"; this.ofd_in ...