开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:SparkStreaming 原理_问题提出】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/692/detail/12135
SparkStreaming 原理_问题提出
内容介绍:
一、Spark Streaming 的特点
二、如何小批量
三、如何处理数据
四、Spark Streaming 是流计算,流计算的数据是无限的
五、总结
一、Spark Streaming 的特点
●Spark Streaming 会源源不断的处理数据,称之为流计算
●Spark Streaming 并不是实时流,而是按照时间切分小批量,一个一个的小批量处理
1. 举例来进行说明实时的流处理:每一个算子相当于河流上横亘的一个水闸,每一个元素流经水闸后会变成另外一种形态,这种就称为实时流处理,因为它会对每一条数据进行处理。
2.小批量:一条河流上有一个横亘的过滤器,但是这个过滤器并不是对于每一滴水都进行处理的,它是先收集一部分的水,这一部分的水单独进行处理,然后转成另一部分的水,这就叫做小批量,总结来说,实时流处理就是来一条处理一条,而来一批处理一批,叫做小批量英文名为 Micro bitch )
●Spark Streaming 是流计算,所以可以理解为数据会源源不断的来,需要长时间运行
二、如何小批量
Spark Streaming 中的编程模型叫做 DStream ,所有的 API 都从 DStream 开始,其作用就类似于 RDD 之于 Spark Core
val lines:Dstream[String]=ssc.socketTextStream(
hostname = args(0) ,
port =args(1).toInt,
storageLevel = storageLevel..MENORY_AND_DISK_SER)
val words :[ DStream[string= lines.flatMap(_.split( regex m " "))
val wordCounts: [Dstream[ (String,Int)j= words.map(x =>(x,1)) .reduceByKey(_+ _)
可以理解为 DStream 是一个管道,数据源源不断的从这个管道进去,被处理,再出去。 Dstream 作为一个管道,将会对每一个流经其内部的数据进行处理。
但是需要注意的是, DStream 并不是严格意义上的实时流,事实上, DStream 并不处理数据,而是处理 RDD。DStream 将会收集一定时间内的 person 对象生成 RDD,然后针对 RDD 进行处理,每一个 RDD 称为一个批次。
以上,可以整理出如下道理
●Spark Streaming 是小批量处理数据,并不是实时流
●Spark Streaming 对数据的处理是按照时间切分为一个又一个小的 RDD ,然后针对 RDD 进行处理所以针对以上的解读,可能会产生—种疑惑:如何切分 RDD?
三、如何处理数据
如下代码
val lines : DStream[String] = ssc.socketTextStream(
hostname = args (0) ,
port = args ( 1).toInt,
storageLevel = StorageLevel. MEMORY_AND_DISK_SER)
val words : DStream[ String] = lines
.flatMap (_.split(""))
RDD 中的 flatmap 与 Spark Streaming 的 flatmap 里面所传的参数都是一样的。
.map ( x =>(x,1))
.reduceByKey(_ + _)
猜测
1.DStream 中其实流动的是 RDD
2.DStream 在调用算子的时候可以猜测为算子最终将作用于 RDD ?
可以看到
●RDD 中针对数据的处理是使用算子,在 DStream 中针对数据的操作也是算子
●DStream 的算子似乎和 RDD 没什么区别
有一个疑惑
●难道 DStream 会把算子的操作交给 RDD 去处理?如何交?
四、Spark Streaming 是流计算,流计算的数据是无限的
因为不好去判断这个系统什么时候会流,什么时候会停,所以可以认为这个系统中的数据是源源不断产生的,所以 spark streaming 会一直运行。
无限的数据一般指的是数据不断的产生,比如说运行中的系统,无法判定什么时候公司会倒闭,所以也无法断定数据什么时候会不再产生数据
那就会产生一个问题
如何不简单的读取数据,如何应对数据量时大时小?
如何数据是无限的,意味着可能要一直运行下去
那就会又产生—个问题
Spark Streaming 不会出错吗?数据出错了怎么办?
五、总结
总结下来,有四个问题
●Dstream 如何对应 RDD?
●如何切 RDD ?
●如何读取数据?
●如何容错?