Structured_体系结构_无限扩展的表 | 学习笔记

简介: 快速学习 Structured_体系结构_无限扩展的表

开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:Structured_体系结构_无限扩展的表】学习笔记,与课程紧密联系,让用户快速学习知识。

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


Structured_体系结构_无限扩展的表

内容介绍:

一、目标和过程

二、Dataset 和流式

三、WordCount 的原理

四、总结

 

体系结构更好的进行性能调优,理解越深,代码越好书写,体系结构包含两部分,无限扩展的表、体系结构。

 

一、目标和过程

1.目标

Structured Streaming 是一个复杂的体系,由很多组件组成,这些组件之间也会进行交互,如果无法站在整体视角去观察这些组件之间的关系,也无法理解 Structured Streaming 的全局。

2.步骤

(1)了解 Dataset 这个计算模型和流式计算的关系

(2)如何使用 Dataset 处理流式数据?

(3)WordCount 案例的执行过程和原理


二、Dataset 和流式计算

可以理解为 Spark 中的 Dataset 有两种,一种是处理静态批量数据的 Dataset,一种是处理动态实时流的 Dataset , 这两种 Dataset 之间的区别如下。

流式的 Dataset 使用 readStream 读取外部数据源创建,使用 writeStream 写入外部存储

批式的 Dataset 使用 read 读取外部数据源创建,使用 write 写入外部存储

// 2.数据集的生成,数据读取

val source: DataFrame = spark.readstream

.format( source = "socket" )

.option( "host","192.168.169.1e1")

.option( "port", 9999)

.load()

val sourceDS: Dataset[string] = source.as[string]

//3.数据的处理

val words = sourceDs.flatMap(_.split( regex =”“))

.map((_,1))

.groupByKey(_-_1)

.count()

// 4、结果集的生成和输出 words.writestream

.outputMode(outputMode.complete())

.format( source = "console")

.start()

.awaitTermination()

}

}

首先,用 readstream 读取,然后进行一系列的基于 Dataset 的操作。

其中 map 、flatMap 、groupByKey 等算子与之前 Spark 完全相同。中间第三部分是 Dataset 的操作。尾部用来输出数据。

Dataset 处理流式数据与处理批式数据的区别:

从代码角度分析,Dataset 使用 readstream 创建,批量数据处理使用 read 创建,结果集的生成与输出使用 writestream,批量数据处理的 Dataset 使用 write。

整个数据 API 是相同的。

Dataset 不仅可以处理批量数据,也可以处理流式数据。

谷歌中的论文思想,提出的概念。

一个 Dataset 在逻辑上表示表,一个关系数据图的表不能处理流式数据。

用 Dataset 编程模型表示流式计算

image.png

Dataset 表达的是一张关系型数据表的概念,但是没有规定这个表必须是静态的,不能扩展的。

如果把 Dataset 看做为—张可以无限扩展并且可以无限追加新数据的表,Dataset 在语义的层面上就可以表示流式数据的处理,这就是 Dataset 所遵循的模型。

使用 read 创建的就是—个不能扩展的表格,使用 readStream 创建的就是—个可以无限扩展的表格。

Dataset 可以通过 readStream 创建,创建出的就是—个可以无限扩展的表格。

处理流式和批示都可以使用 Dataset 这—套 API

·可以把流式的数据想象成一个不断增长,无限无界的表

·无论是否有界,全都使用 Dataset 这—套 API

·通过这样的做法,就能完全保证流和批的处理使用完全相同的代码,减少这两种处理方式的差异

 

三、WordCount 的原理

image.png

1.过程

整个计算过程大致上分为如下三个部分

(1) Source ,读取数据源

image.png

数据从外部系统接收

(2)Query ,在流式数据上的查询

image.png

查询即为处理,把一张表查为另一张表

(3)Result ,结果集生成

image.png

2.分析 WordCount 案例

第一次输入的数据为 hello world 和 hello speak,在 00:00 时输入,放入 Input Table 内部中,到 Query 查询,查询完生成 Result Table 这张表,在 Output Mode 输出全局的结果。

image.png

在 01:00 时,输入两条新数据 hello spark 和 hello Hadoop,无限扩展的表格往下扩展了两条数据,在新的表格中执行一次新的查询,查询出新的表格,在数据台输出全局的结果。

image.png

在 02:00 时,输入新的 hello speak,无限扩展的表格扩展一条新的数据,通过查询形成一个新的表格,结果全部输出。

image.png

累加次数

Output Mode 代表输出展示到外部的模式。

整个的过程如下

①随着时间段的流动,对外部数据进行批次的划分

②在逻辑上(前提),将缓存所有的数据,生成一张无限扩展的表,在这张表上进行查询

③根据要生成的结果类型,来选择是否生成基于整个数据集的结果

 

四、总结

image.png

此图用来理解无线扩展表的概念。箭头表示时间的流向,箭头的每一小块代表的数据,左侧是新的数据,数据放在右侧表格,表格是无限扩展的。

Dataset 不仅可以表达流式数据的处理,也可以表达批量数据的处理

表达流式处理,是一个二维表,表达流式处理,是一个无限扩展的表

Dataset 之所以可以表达流式数据的处理,因为 Dataset 可以模拟一张无限扩展的表,外部的数据会不断的流入到其中

相关文章
|
2月前
|
SQL 弹性计算 分布式计算
TiDB计算层详解:分布式计算框架与查询优化机制
【2月更文挑战第26天】本文将深入剖析TiDB的计算层,详细解析其分布式计算框架和查询优化机制。通过了解计算层的核心组件和工作原理,我们可以更好地理解TiDB如何高效处理SQL查询和计算任务。本文将从计算层的架构、任务分发、查询优化等方面展开介绍,帮助读者全面掌握TiDB计算层的关键技术和优势。
|
4天前
|
存储 SQL 缓存
构建高效的矢量数据库查询:查询语言与优化策略
【4月更文挑战第30天】本文探讨了构建高效矢量数据库查询的关键点,包括设计简洁、表达性强的查询语言,支持空间操作、函数及索引。查询优化策略涉及查询重写、索引优化、并行处理和缓存机制,以提升查询效率和准确性。这些方法对处理高维空间数据的应用至关重要,随着技术进步,矢量数据库查询系统将在更多领域得到应用。
|
11月前
|
分布式计算 关系型数据库 BI
KYLIN 建模设计学习总结(概念、空间优化、查询性能优化)
KYLIN 建模设计学习总结(概念、空间优化、查询性能优化)
93 0
|
SQL 分布式计算 Java
扩展_Catalyst 优化器_优化过程 | 学习笔记
快速学习扩展_Catalyst 优化器_优化过程
149 0
扩展_Catalyst 优化器_优化过程 | 学习笔记
|
存储
核心特性—分布式线性扩展
史上最优惠活动:阿里云企业云服务器全场2折起
128 0
核心特性—分布式线性扩展
|
cobar 关系型数据库 MySQL
关系型数据的分布式处理系统:Cobar
Cobar简介 Cobar是关系型数据的分布式处理系统,它可以在分布式的环境下像传统数据库一样为您提供海量数据服务。
233 0
关系型数据的分布式处理系统:Cobar