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两种,参考下面源码


  • 相关阅读:
    Ubuntu 16.04安装迅雷(兼容性不高)
    Ubuntu 16.04安装QQ(不一定成功)
    Ubuntu查看隐藏文件夹的方法
    Ubuntu下非常规方法安装绿色软件(压缩包)
    Ubuntu下常规方法安装软件
    Ubuntu 16.04下截图工具Shutter
    java中 awt Graphics2D
    Vue2.0总结———vue使用过程常见的一些问题
    MySQL 中隔离级别 RC 与 RR 的区别
    DBAplus社群线上分享----Sharding-Sphere之Proxy初探
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3585052.html
Copyright © 2011-2022 走看看