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

相关文章
|
Linux 网络虚拟化 虚拟化
Linux虚拟网络设备深度解析:使用场景、分类与开发者指南
Linux虚拟网络设备支撑着各种复杂的网络需求和配置,从基础的网络桥接到高级的网络隔离和加密🔐。以下是对主要Linux虚拟网络设备的介绍、它们的作用以及适用场景的概览,同时提出了一种合理的分类,并指出应用开发人员应该着重掌握的设备。
Linux虚拟网络设备深度解析:使用场景、分类与开发者指南
Burpsuite系列 -- Repeater和Decoder
Burpsuite系列 -- Repeater和Decoder
314 0
|
存储 数据采集 分布式计算
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)
|
SQL 分布式计算 数据可视化
数据分析案例-数据分析师岗位招聘信息可视化
数据分析案例-数据分析师岗位招聘信息可视化
332 0
|
11月前
|
中间件 Go 数据处理
应用golang的管道-过滤器架构风格
【10月更文挑战第1天】本文介绍了一种面向数据流的软件架构设计模式——管道-过滤器(Pipe and Filter),并通过Go语言的Gin框架实现了一个Web应用示例。该模式通过将数据处理流程分解为一系列独立的组件(过滤器),并利用管道连接这些组件,实现了模块化、可扩展性和高效的分布式处理。文中详细讲解了Gin框架的基本使用、中间件的应用以及性能优化方法,展示了如何构建高性能的Web服务。
261 1
|
JavaScript
【Vue面试题四】、Vue实例挂载的过程中发生了什么?
文章详细分析了Vue实例挂载的过程,包括Vue构造函数的执行、初始化方法`_init`的调用,以及Vue实例从创建到挂载的各个阶段。文章提到了Vue实例初始化过程中的多个关键步骤,如合并选项、初始化数据、事件、生命周期、渲染方法等。同时,还解释了Vue如何处理模板和生成渲染函数,以及如何将虚拟DOM转换为真实DOM并进行页面渲染。最后,文章通过流程图总结了Vue实例挂载的整个过程。
【Vue面试题四】、Vue实例挂载的过程中发生了什么?
|
11月前
|
监控 Java 数据库连接
探索Java中的异常处理机制:最佳实践与常见误区
在Java编程世界里,异常处理是确保应用程序稳定性和健壮性的关键环节。本文深入探讨了Java异常处理的机制,包括异常的分类、异常处理的基本原则以及如何在实际开发中应用这些原则。文章还指出了常见的异常处理误区,并提供了最佳实践建议,帮助开发者避免这些陷阱。通过具体代码示例和情景分析,本文旨在提升读者对Java异常处理的理解和应用能力。
|
机器学习/深度学习 存储 数据可视化
特征选择的艺术:利用Scikit-learn提升模型性能
【7月更文第22天】在机器学习的实践中,特征选择是一项至关重要的步骤,它直接影响到模型的性能、训练速度以及对新数据的泛化能力。特征选择,或称为变量选择,旨在从原始特征集中识别并保留最相关、最有影响力的特征子集,同时剔除冗余或无关紧要的特征。本文将探讨特征选择的重要性,并通过使用Python中的Scikit-learn库演示几种有效的特征选择方法,以提升模型性能。
715 4
|
存储 SQL 分布式计算
【史上最全】Hadoop精选18道面试题(附回答思路)
【史上最全】Hadoop精选18道面试题(附回答思路)
1264 1
【史上最全】Hadoop精选18道面试题(附回答思路)
|
开发框架 JSON 前端开发
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理