概述
-
原生流处理
- 数据来一条就立即计算一条
- 代表框架 strom(已淘汰) ,flink
-
微批次处理
- 积攒一段时间间隔的数据,再一次对这些微批次数据做处理,间隔 0.5-5秒
- 积攒一段时间间隔的数据,再一次对这些微批次数据做处理,间隔 0.5-5秒
sparkStreaming数据抽象
sparkStreaming 计算思想
- sparkstreaming就是微批流处理思想
- 官方定义Spark Streaming模块: 可以轻松构建可扩展的容错流应用程序
Dstream的介绍
- 回顾,之前的数据抽象
- sparkCore:RDD
- sparkSQL:DataFrame,DataSet 底层还是RDD
- Spark Streaming的核心是DStream,DStream类似于RDD,它实质上一系列的RDD的集合,DStream可以按照秒、分等时间间隔将数据流进行批量的划分。
- 如下图所示:将流式数据按照【X seconds】划分很多批次Batch,每个Batch数据封装到RDD中进行处理分析,最后每批次数据进行输出。
- 对于目前版本的Spark Streaming而言,其最小的Batch Size的选取在0.5~5秒钟之间,所以Spark Streaming能够满足流式准实时计算场景,对实时性要求非常高的如高频实时交易场景则不太适合。
*DStream代表了一种连续的数据流,要么从某种数据源提取数据,要么从其他数据流映射转换而来。DStream内部是由一系列连续的RDD组成的,每个RDD都包含了特定时间间隔内的一批数据,如下图所示:
-
DStream本质上是一个:一系列时间上连续的RDD(Seq[RDD]),DStream = Seq[RDD]。
DStream = Seq[RDD] DStream相当于一个序列(集合),里面存储的数据类型为RDD (Streaming按照时间间隔划分流式数据)
-
对DStream的数据进行操作也是按照RDD为单位进行的。
-
通过WEB UI界面可知,对DStream调用函数操作,底层就是对RDD进行操作,发现很多时候DStream中函数与RDD中函数一样的。
-
DStream中每批次数据RDD在处理时,各个RDD之间存在依赖关系,DStream直间也有依赖关系,RDD具有容错性,那么DStream也具有容错性。
-
上图相关说明:
- 1、每一个椭圆形表示一个RDD
- 2、椭圆形中的每个圆形代表一个RDD中的一个Partition分区
- 3、每一列的多个RDD表示一个DStream(图中有三列所以有三个DStream)
- 4、每一行最后一个RDD则表示每一个Batch Size所产生的中间结果RDD
-
Spark Streaming将流式计算分解成多个Spark Job,对于每一时间段数据的处理都会经过Spark DAG图分解以及Spark的任务集的调度过程。
DStream Operations
- DStream类似RDD,里面包含很多函数,进行数据处理和输出操作,主要分为两大类:
- Transformations:
- 类似RDD的tranformation,是延迟执行的,只有遇到output算子才会触发
- 将一个DStream转换为另一个DStream
- Dstream 有3种操作
-
第一类:基础函数跟RDD同名,比如 map,flatMap,filter,再额外添加一个新的函数名叫tranform
- 如果要做更复杂的计算,比如排序,需要transform方法,在里面对每个RDD处理
- 如果要做更复杂的计算,比如排序,需要transform方法,在里面对每个RDD处理
-
第二类:跟状态有关的函数:updateStateByKey和mapWithState
-
第三类:窗口函数:window,reduceByKeyAndWindow
-
- Dstream 有3种操作
Output Operations
- DStream只有遇到output操作才会触发执行。
- 主要是将Dstream的数据连续不断的输出
- 主要有print和foreachRDD,对于复杂的输出操作,可以放在foreachRDD中
dstream.foreachRDD((rdd)=>{ rdd.更丰富的各种输出操作比如 foreach,或foreachpartition })
回顾各模块的创建方式
-
SparkCore模块:SparkContext
-
SparkSQL模块:SparkSession
-
SparkStreaming模块:StreamingContext
-
streaming StreamingContext(sparkConf,Seconds(2)) //就是每隔多久对流数据进行一次微批划分
-
streaming 的WEB UI 的任务图