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


  • 相关阅读:
    Kubernetes基本概念之Volume
    Kubernetes对象之PersistentVolume,PersistentVolumeClaim和StorageClass
    SSDB高效能缓存系统
    python2升级python3
    pkg-config相关的常用指令
    CISSP考试经验分享
    如何在命令行添加换行符到git commit -m "xxx"
    为什么tcp-wrappers被Redhat Centos Fedora废弃?
    Docker 国内仓库和镜像
    shell脚本对代码执行时间的计时
  • 原文地址:https://www.cnblogs.com/fxjwind/p/3585052.html
Copyright © 2011-2022 走看看