zoukankan      html  css  js  c++  java
  • 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交互的。

    Snip20160515_23

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

    Snip20160515_24

    其中调用了compute方法,而注释中也说明了,每个DStream都会通过compute方法生成RDD!!!

    compute会由各个子类来进行实现,我们找一个常用的MappedDStream看一下。
    Snip20160515_21

    通过这个代码,我们可以发现两点:

    • compute方法中实现了map这个方法的业务逻辑
    • compute方法会调用parent的getOrCompute

    这说明了,RDD从后往前依赖,可以进行回溯,这也解释了为什么在JobScheduler中仅仅是对outputStream进行处理的原因。

    RDD生成的完整过程

    下面引用一张图将上面的说明进行一下串联:
    DStrea

    在各个DStream中,都实现了getOrCompute方法,在数据未缓存的情况下,会调用compute方法向上追溯到DStream的源头,并将结果逐层向下传递,从而实现了完整的业务处理。

    小结

    我们会发现,对DStream的所有操作,其实都是作用在RDD上的Transformation操作,只是要加上一个时间维度。统一通过outputStreams的generateJob方法来触发实际的action调用,而处理逻辑和依赖关系,都封装在了DStream内部实现,充分体现了模块的自治性,非常值得借鉴。

    欲知后事如何,且听下回分解

    DT大数据每天晚上20:00YY频道现场授课频道68917580

  • 相关阅读:
    iframe自动适应高度
    php正则过滤html标签、空格、换行符的代码,提取图片
    destoon使用中的一些心得
    Fiddler 过滤 css,图片等请求url 正则表达式
    不用递归实现无限分类数据的树形格式化
    PHP定时执行任务的实现
    Discuz! X3.1去除内置门户导航/portal.php尾巴的方法
    discuzx完全自定义设计模板门户首页,栏目,专题模板方法
    Apache环境.htaccess伪静态301跳转(www与不带www)
    15万甚至30万以内的SUV值不值得买?
  • 原文地址:https://www.cnblogs.com/dt-zhw/p/5495141.html
Copyright © 2011-2022 走看看