zoukankan      html  css  js  c++  java
  • Spark Streaming源码分析 – DStream

    A Discretized Stream (DStream), the basic abstraction in Spark Streaming, is a continuous sequence of RDDs (of the same type) representing a continuous stream of data.
    Dstream本质就是离散化的stream,将stream离散化成一组RDD的list,所以基本的操作仍然是以RDD为基础
    下面看到DStream的基本定义,对于普通的RDD而言,时间对于DStream是更为重要的因素
    将stream切分成RDD的interval时间,stream开始的时间,DStream需要保留的RDD的时间,每个RDD所对于的时间key……

    DStream抽象定义


    getOrCompute
    注意的是,这里是产生RDD对象,而不是真正的进行计算,只有在runjob时才会做真正的计算
    Spark RDD本身是不包含具体数据的,只是定义了workflow(依赖关系),处理逻辑


    generateJob
    对于用getOrCompute产生的RDD对象,需要封装成job
    而Job的关键,jobFunc,其实就是想Spark集群提交一个job
    这里只是使用了emptyFunc,具体的output逻辑是需要被具体的outputDStream改写的


    clearMetadata
    清除过时的RDD对象,其中还会做unpersist,以及调用dependencies的clearMetadata

    具体DStream的定义

    FilteredDStream

     

    WindowedDStream

    image

     

    ShuffledDStream

    PairDStreamFunctions
    以groupByKey为例,和普通Spark里面没啥区别,依赖是基于combineByKey实现
    比较有特点是提供groupByKeyAndWindow,其实就是先使用WindowedDStream将windows中的RDD union,然后再使用combineByKey

    groupByKeyAndWindow

     

    updateStateByKey

    StateDStream
    普通的DStream,都是直接从ParentRDD通过compute来得到当前的RDD
    而StateDStream的特别之处,除了ParentRDD,还需要参考PreviousRDD,这个只存在在stream场景下,只有这个场景下,RDD之间才存在时间关系
    PreviousRDD = getOrCompute(validTime - slideDuration),即在DStream的generatedRDDs上前一个时间interval上的RDD
    处理函数,val finalFunc = (iterator: Iterator[(K, (Seq[V], Seq[S]))]) => { },需要3个参数,key,ParentRDD上的value,PreviousRDD上的value
    处理函数需要考虑,当ParentRDD或PreviousRDD为空的情况

    注意StateDStream,默认需要做persist和checkpoint

    TransformedDStream
    首先这是个比较通用的operation,可以通过自定义的transformFunc,将一组parentRDDs计算出当前的RDD
    需要注意的是,这些parentRDDs必须在同一个streamContext下,并且有相同的slideDuration
    在DStream接口中,可以提供transform和transformWith两种,参考下面源码


  • 相关阅读:
    OM退货接收设置
    分享一个基于D3.js的互动可重用图表javascript类库 NVD3.js
    免费资源下载:12个漂亮简洁的web背景图案
    分享最新收集的免费photoshop笔刷
    免费素材下载:生态相关的矢量图标集
    分享最新收集的免费photoshop笔刷
    最新的wordpress3.4都有什么新特性
    免费素材下载:学校学院相关图标集
    Adobe开发的基于web的开源代码编辑器 Brackets
    GBin1在线实例帮助你更好的了解jQuery功能特性(三)
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3585052.html
Copyright © 2011-2022 走看看