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生命周期研究的更多相关文章

  1. Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期

    Spark Streaming揭秘 Day10 从BlockGenerator看接收数据的生命周期 昨天主要介绍了SparkStreaming中对于Receiver的生命周期管理,下面让我们进入到Re ...

  2. Spark Streaming揭秘 Day18 空RDD判断及程序中止机制

    Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...

  3. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  4. Spark Streaming揭秘 Day19 架构设计和运行机制

    Spark Streaming揭秘 Day19 架构设计和运行机制 今天主要讨论一些SparkStreaming设计的关键点,也算做个小结. DStream设计 首先我们可以进行一个简单的理解:DSt ...

  5. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  6. Spark Streaming揭秘 Day17 资源动态分配

    Spark Streaming揭秘 Day17 资源动态分配 今天,让我们研究一下一个在Spark中非常重要的特性:资源动态分配. 为什么要动态分配?于Spark不断运行,对资源也有不小的消耗,在默认 ...

  7. Spark Streaming揭秘 Day14 State状态管理

    Spark Streaming揭秘 Day14 State状态管理 今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作.State是SparkStreaming ...

  8. Spark Streaming揭秘 Day11 Receiver Tracker的具体实现

    Spark Streaming揭秘 Day11 Receiver Tracker的具体实现 ReceiverTracker是运行在Driver上Receiver管理程序,今天让我们深入学习一下. 核心 ...

  9. Spark Streaming揭秘 Day5 初步贯通源码

    Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...

随机推荐

  1. 各种电子面单_Api接口

    电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单.   ...

  2. jquery 设置style:display 其实很方便的

    ("#id").css('display','none'); $("#id").css('display','block'); 或 $("#id&qu ...

  3. cocos2d-x之jni使用(对接Android各种sdk)

    游戏弄完了,要发布到各个平台,ios.Android是肯定少不了的,那么本文就来讲讲Android平台对接代理商付费sdk.各渠道.五大运营商.广告.分享.数据统计等等少不了的jni调用,接sdk真是 ...

  4. Java之MySql数据库链接

    一 下载MySql驱动包,下载途径很多,随便Google或度娘一下就有,我下载的是mysql-connector-java-5.1.26版本,下载后把它解压到指定路径 二 在Eclipse中新建项目T ...

  5. Struts2的零配置和rest插件

    1. 零配置使用struts2-convention-plugin-2.3.16.jar,rest使用struts2-rest-plugin-2.3.16.jar 1.1 Struts2的conven ...

  6. [改善Java代码]静态变量一定要先声明后赋值

    建议32: 静态变量一定要先声明后赋值 这标题看着让人很纳闷,什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们先来看一个例子,代码如下 ...

  7. 【线性结构上的动态规划】UVa 11584 - Partitioning by Palindromes

    回文串问题.给出一个字符串,问最少可以划分为多少个字符串子串. 对于判断是否为回文串,对于不是很长的字符串,可以采取直接暴力,即从两边向中间收缩判断字符相等. bool is_pali(int l, ...

  8. javascript深入理解闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...

  9. 获取登录的IP或者信息

    这是转载的,也不想去检查性能,对于这些成熟的代码,发在这里完全是懒,仅此而已! 1.获取客户端IP /// <summary> /// 获取客户端Ip /// </summary&g ...

  10. [转]C#如何在ListView失去焦点的情况下仍然保持Item高亮

    private void listView1_SelectedIndexChanged(object sender, EventArgs e) { foreach(ListViewItem itm i ...