DStream 生成 RDD 实例详解

本文深入解析Spark Streaming中DStream的工作原理,详细介绍了如何为每个batch生成RDD实例。通过DStream的generatedRDD管理和compute(time)方法,阐述了从InputDStream到一般DStream的compute实现,以及如何通过DStreamGraph生成RDD DAG实例,帮助理解DStream作为RDD模板的本质。
摘要由CSDN通过智能技术生成

引言
我们在前面的文章讲过,Spark Streaming 的 模块 1 DAG 静态定义 要解决的问题就是如何把计算逻辑描述为一个 RDD DAG 的“模板”,在后面 Job 动态生成的时候,针对每个 batch,都将根据这个“模板”生成一个 RDD DAG 的实例。

在 Spark Streaming 里,这个 RDD “模板”对应的具体的类是 DStream,RDD DAG “模板”对应的具体类是 DStreamGraph。

DStream的全限定名是:org.apache.spark.streaming.dstream.DStream
DStreamGraph 的全限定名是:org.apache.spark.streaming.DStreamGraph
本文我们就来详解 DStream 最主要的功能:为每个 batch 生成 RDD 实例。

Quick Example
在这里插入图片描述
在这里插入图片描述

DStream 通过 generatedRDD 管理已生成的 RDD
DStream 内部用一个类型是 HashMap 的变量 generatedRDD 来记录已经生成过的 RDD:
在这里插入图片描述
generatedRDD 的 key 是一个 Time;这个 Time 是与用户指定的 batchDuration 对齐了的时间 —— 如每 15s 生成一个 batch 的话,那么这里的 key 的时间就是 08h:00m:00s,08h:00m:15s 这种,所以其实也就代表是第几个 batch。generatedRDD 的 value 就是 RDD 的实例。

需要注意,每一个不同的 DStream 实例,都有一个自己的 generatedRDD。如在下图中,DStream a, b, c, d 各有自己的 generatedRDD 变量。

DStream 对这个 HashMap 的存取主要是通过 getOrCompute(time: Time) 方法,实现也很简单,就是一个 —— 查表,如果有就直接返回,如果没有就生成了放入表、再返回 —— 的逻辑:
在这里插入图片描述
最主要还是调用了一个 abstract 的 compute(time) 方法。这个方法用于生成 RDD 实例,生成后被放进 generatedRDD 里供后续的查询和使用。这个 compute(time) 方法在 DStream 类里是 abstract 的,但在每个具体的子类里都提供了实现。

(a) InputDStream 的 compute(time) 实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值