Spark Streaming的WindowedDStream

原创 2014年04月15日 18:34:48

下面我们一起从源代码的角度探究一下,Spark Streaming怎么实现窗口计算的。

Spark Streaming的 窗口操作的类WindowedDStream。

1.构造函数:

从构造函数来看,需要一个父DStream,和windowDuration窗口大小, slideDuration滑动频率

private[streaming]
class WindowedDStream[T: ClassManifest](
    parent: DStream[T],
    _windowDuration: Duration,
    _slideDuration: Duration)
  extends DStream[T](parent.ssc) {

2.检查倍数:

These two parameters must be multiples of the batch interval of the source DStream
这里的parent其实就是原始的DStream,可以这么理解为batch interval 的size

  if (!_windowDuration.isMultipleOf(parent.slideDuration))
    throw new Exception("The window duration of WindowedDStream (" + _slideDuration + ") " +
    "must be multiple of the slide duration of parent DStream (" + parent.slideDuration + ")")

  if (!_slideDuration.isMultipleOf(parent.slideDuration))
    throw new Exception("The slide duration of WindowedDStream (" + _slideDuration + ") " +
    "must be multiple of the slide duration of parent DStream (" + parent.slideDuration + ")")


3.初始化对象

这里设置了存储级别,和与父RDD的依赖关系

  parent.persist(StorageLevel.MEMORY_ONLY_SER) //设置存储级别为内存only

  def windowDuration: Duration =  _windowDuration //setter

  override def dependencies = List(parent)  //这里我们可以清晰的看到,这是一个On-to-One的依赖

  override def slideDuration: Duration = _slideDuration //setter

  override def parentRememberDuration: Duration = rememberDuration + windowDuration


4. Compute

所有的计算逻辑都在compute里,这里是window的实现:

  override def compute(validTime: Time): Option[RDD[T]] = {
    val currentWindow = new Interval(validTime - windowDuration + parent.slideDuration, validTime)
    Some(new UnionRDD(ssc.sc, parent.slice(currentWindow)))
  }

这里其实就是一个UnionRDD,传入的参数有SparkContext和parent根据cuurentWindow来分片的RDD

即 父RDD按照传入的2个参数分片后的数据集合,进行一个Union操作-->合并一个窗口大小的数据集。


总结:

1.检查参数,设置依赖关系。

2.按照输入的参数对父RDD进行分片,然后将一个窗口大小的数据集进行Union操作,用到了UnionRDD。

3.形成最终的WindowedDStream


原创,转载请注明出处http://blog.csdn.net/oopsoom/article/details/23777843

Spark修炼之道(进阶篇)——Spark入门到精通:第十二节 Spark Streaming—— DStream Window操作

作者:周志湖 微信号:zhouzhihubeyond本节主要内容 Window Operation 入门案例 1. Window OperationSpark Streaming提供窗口操作(Win...
  • lovehuangjiaju
  • lovehuangjiaju
  • 2015年11月29日 15:38
  • 10858

第8课:Spark Streaming源码解读之RDD生成全生命周期彻底研究和思考

第8课:Spark Streaming源码解读之RDD生成全生命周期彻底研究和思考 /* 王家林老师授课http://weibo.com/ilovepains  每天晚上20:00YY频道现场授课频...
  • duan_zhihua
  • duan_zhihua
  • 2016年05月22日 17:20
  • 629

Spark Streaming中的操作函数分析

根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J...
  • dabokele
  • dabokele
  • 2016年09月21日 00:09
  • 8623

Spark Streaming中的操作函数分析

根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transformations Window Operations J...
  • dabokele
  • dabokele
  • 2016年09月21日 00:09
  • 8623

Spark Streaming:性能调优

Spark Streaming:性能调优
  • kwu_ganymede
  • kwu_ganymede
  • 2016年01月25日 10:32
  • 4438

Spark Streaming 流计算优化记录(4)-时间都去哪儿了,关于调度与空转

关于Spark Streaming优化的各种叽里呱啦记录, 这一次是从跑不动, 一直优化到能每秒解决6万条输入消息以及3G数据的Inner Join. 大数据,流计算,spark,kafka,hado...
  • butterluo
  • butterluo
  • 2015年07月27日 14:17
  • 1729

使用Flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【大数据】

  • 2017年10月29日 23:00
  • 14KB
  • 下载

learning-spark-streaming

  • 2017年12月10日 11:04
  • 6.64MB
  • 下载

Learning Spark SQL Architect streaming analytics and machine learning solutions

  • 2017年12月03日 09:24
  • 40.51MB
  • 下载

Real-time big data processing with Spark Streaming

  • 2014年05月29日 14:08
  • 2.31MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spark Streaming的WindowedDStream
举报原因:
原因补充:

(最多只允许输入30个字)