SparkStreaming 原理_DStream 的有向无环图 | 学习笔记

简介: 快速学习 SparkStreaming 原理_DStream 的有向无环图

开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:SparkStreaming 原理_DStream 的有向无环图】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/692/detail/12136


SparkStreaming 原理_DStream 的有向无环图

内容介绍:

一、DAG 的定义

二、RDD 与 DStream 的区别

三、DStream 原理的组建

 

一、DAG 的定义

DAG 也叫有向无环图,有向无环图(DAG)=>数据的处理是一环扣着一环的,数据的处理是分步骤的,这叫有向,数据的处理不能首尾交接,如果首尾交接的话就会形成无限循环的执行,这叫做无环。

举例来说,在把数据转换成一种形态的时候,需要分为十个步骤,每一个步骤之间可以连接起来,最终可以生成一个结果,这个结果就可能要把这两个步骤数据集给结合起来,这样的是有项的图。

有向无环图就代表数据的处理是有方向的,但是不能收尾相接。

如果是 RDD 的 wordCount ,代码大致如下

val textRDD = sc.textFile( ...)

val splitRDD = textRDD. flatMap (_.split("“))

val tupleRDD = splitRDD . map((_, 1))

val reduceRDD = tupleRDD . reduceByKey(_ + _)

用图形表示如下(可以理解为有向无环图)

image.png

同样, DStream 的代码大致如下

val lines : Dstream [ String] = ssc.socketTextStream( . . .)

val words : DStream[String] = lines . flatMap(_.split(" ") )

val wordCounts : DStream[ (String,Int)] = words . map(x => (x,1)) . reduceByKey(_+ _)

同理, DStream 也可以形成 DAG 如下

image.png

看起来 DStream 和 RDD 很相似。

1.DStream 内部是由 RDD 组成的

2.DStream 本身也是可以组成 DAG 的,因为 DStream 通过一些转换算子,也是生成了新的 DStream

提问:DStream 内部的 RDD 之间有没有 DAG 呢?


二、RDD 与 DStream 的区别

image.png

val dstream1 = ssc.socketText0

val dstream2 = dstream1.map

val dstream3 = dstream2.flatmap

第—个 RDD

val rdd1 = ..

val rdd2 = rdd1.map

val rdd3 = rdd2.flatmap

第二个 RDD

val rdd1 = ...

val rdd2 = rdd1.mapval

rdd3 = rdd2.flatmap

整个 RDD 的有向无环图,最终构成一个逻辑上的 DStream 有向无环图。每一个RDD 都有相应的有向无环图。

●DStream 的数据是不断进入的,RDD 是针对一个数据的操作

●像 RDD 一样,DStream 也有不同的子类,通过不同的算子生成

●一个 DStream 代表一个数据集,其中包含了针对于上一个数据的操作

●DStream 根据时间切片,划分为多个 RDD ,针对 DStream 的计算函数,会作用于每一个 DStream 中的 RDD

 

三、DStream 原理的组建

搜索“DstreamGrpha ”,可以将 DstreamGraph 理解为是 Dstream 的一个图,Dstream 的 DAG 通过 DstreamGraph 生成,这个图表示了 Dstream 的有向无环图是如何构成的。

DstreamGraph 是先进行定义,然后用 start 进行运行,可以使用 stop 停止运行,可以用 setBatchDuration 指定每个批次的时间间隔,也可以指定入口addInputStream 和出口 addOutputstream

●每个 DStream 都有一个关联的 DStreamGraph 对象

●DstreamGraph 负责表示 DStream 之间的的依赖关系和运行步骤

●DStreamGraph 中会单独记录 InputDStream 和 OutputDStream

相关文章
|
1月前
|
SQL 分布式计算 大数据
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
大数据-91 Spark 集群 RDD 编程-高阶 RDD广播变量 RDD累加器 Spark程序优化
30 0
|
1月前
|
消息中间件 分布式计算 Kafka
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
28 0
|
6月前
|
分布式计算 算法 调度
DAG(有向无环图)在Spark中的应用
DAG(有向无环图)在Spark中的应用
414 0
|
分布式计算
MapReduce编程例子之Combiner与Partitioner
MapReduce编程例子之Combiner与Partitioner
253 0
MapReduce编程例子之Combiner与Partitioner
|
机器学习/深度学习 消息中间件 分布式计算
【Spark Streaming】(三)DStream 算子详解
【Spark Streaming】(三)DStream 算子详解
203 0
【Spark Streaming】(三)DStream 算子详解
|
缓存 分布式计算 Java
学会RDD就学会了Spark,Spark数据结构RDD快速入门
Spark计算框架封装了三种主要的数据结构:RDD(弹性分布式数据集)、累加器(分布式共享只写变量)、广播变量(分布式共享支只读变量)
|
分布式计算 大数据 Spark
Spark 操作算子本质、RDD 容错_1 | 学习笔记
快速学习 Spark 操作算子本质、RDD 容错_1
121 0
Spark 操作算子本质、RDD 容错_1 | 学习笔记
|
分布式计算 大数据 Spark
Spark DAG源码剖析_2 | 学习笔记
快速学习Spark DAG源码剖析_2
117 0