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


  • 相关阅读:
    阿里云SSL证书到期(续期)图文教程
    nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory)
    Mysql读写分离,主从同步实现
    MySQL Waiting for table metadata lock的解决方法
    MYSQL 版本5.7.24 sql_mode=only_full_group_by问题
    CentOS7下PHP7.2安装redis扩展
    每天写点python
    vim 编辑器的光标操作
    【linux使用】bash shell命令行常用快捷键 (转载)
    centos7 cannot find a valid baseurl for repo base (转载)
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3585052.html
Copyright © 2020-2023  润新知