开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:structure_介绍_对比】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/692/detail/12142
structure_介绍_对比
内容介绍
一. 目标和过程
二. Spark Streaming 时代
三. Structured Streaming 时代
四. Spark Streaming 和 Structured Streaming 的对比
五. 总结
一. 目标和过程
1.目标
理解 Spark Streaming 和 Structured Streaming 之间的区别,是非常必要的,从这点上可以理解 Structured Streaming 的过去和产生契机
2.过程
(1)Spark Streaming 时代
(2)Structured Streaming 时代
(3)Spark Streaming 和 Structured Streaming
二. Spark Streaming 时代
Spark Streaming 其实就是 RDD 的 API 的流式工具其本质还是 RDD,存储和执行过程依然类似 RDD。
整个的 Spark 个体系看起来就像这张图。首先最底层是 Spark RDD ,即 Spark core ,基于 Spark core 之上有 Spark SQL ,即
Dataset 。然后基于 Spark core 之上还有 Spark Streaming ,和 Spark Streaming 及 Spark SQL 同级的,还有 MLIib 做机器学习以及 Graph X 做图计算。
三.Structured Streaming 时代
Structured Streaming 是 Dataset 的 API 的流式工具, API 和 Dataset 保持高度一致。
但是自从出现了 Structured Streaming 以后,整个的时代会有一点点不同了。
在 Spark 2.0 以后, Structured Streaming 已经标记为生产可用的了。理论上现阶段做一个新项目,在不考虑历史原因的情况下,不应该再使用 Spark Streaming 了,应该使用 Structured Streaming 。
在这个时代里, Spark SQL 作为整个的底层,整个 RDD 都不再使用了。
在 Spark SQL 之上,可以使用 Dataset ,Data Frame , Structured Streaming ,MLIib 和 Graph Frame 。在上一个时代最底层是 RDD ,在 RDD 之上有 Spark SQL ,Spark Streaming, MLIib 和 Graph X,但是现在已经把 RDD 给淘汰了。 RDD 作为整个的最下层,作为 Spark SQL 的最下层,所有的 API 都是在 Spark SQL 之上提供出来的,比如 Dataset , Structured Streaming , MLIib 和 Graph Frame 。
Spark Streaming 在以上两张图里可以观察到它的底层是 RDD ,而 Structured Streaming 的底层是 Dataset ,这方面是有一点区别的。
首先 Spark Streaming 无论多高级,无论跟原来多像,但是它里面有一些特殊的操作,比如说 Update State ByKey , Windows 操作, foreach RDD ,这些操作都是 RDD 当中没有的。
但是 Structured Streaming 里面 Dataset 和原生的 Spark SQL 代码完全相同,只不过一个是针对流,一个是针对批,只有这一点点区别。所以 Structured Streaming 真正做到了在 API 层面上统一所有的操作。 Spark Streaming 虽然有这样的一个目标,但是它没有做到, Structured Streaming 做到了。
Structured Streaming 也支持了连续流模型, Spark Streaming 只支持小批量的流模型。
但是 Structured Streaming 有一个试验的性质和特点名为连续滤模性。即正常情况下,可以直接一条条数据处理,做到毫秒级的延迟,类似于 Flink 。
在 2.0 以后, Structured Streaming 被标注为稳定,意味着新的 Spark 项目当中不该再使用 Spark Streaming 而使用 Structured Streaming 。
四.Spark Streaming 和 Structured Streaming 的对比
1. Structured Streaming 相比于 Spark Streaming 的进步就类似于 Dataset 相比于 RDD 的进步。
2.另外还有一点, Structured Streaming 已经支持了连续流模型,也就是类似于 Flink 那样的实时流,而不是小批量,但在使用的时候仍然有限制,大部分情况还是应该采用小批量模式。
在 2.2.0 以后 Structured Streaming 被标注为稳定版本,意味着以后的 Spark 流式开发不应该在采用 Spark Streaming 了。
五.总结
Structured Streaming 作用:简单来说就是替代掉 Spark Streaming
进步性:
首先它在 API 层面上和 Dataset 是同一套 API ,没有区别。第二点, Structured Streaming 支持了连续流模型。