18、Spark Streaming程序解读
18.1 Spark Streaming原理
Spark Streaming将流式计算转化为一批批很小的、确定的批处理作业(micro-batch)。以数秒为单位将数据流切分成离散的作业。每批数据看做RDD,可以使用RDD相关操作进行处理。最后结果以RDD为单位返回(写入HDFS或其他系统)。
18.2 DStream
DStream是连续数据的离散化表示,DStream中每个离散片段都是一个RDD,DStream可以变换成另一个DStream。
18.3 Spark Streaming程序模版
编写Spark Streaming程序流程如下:
- 流式上下文
- 流式数据输入
- 流式转换
- 流式数据输出
- 启动流式处理
比如Spark Streaming的样例程序NetworkWordCount可以非常明显地看出上面流程结构。
//1. 流式上下文
val sparkConf = new SparkConf().setAppName("NetworkWordCount")
val ssc = new StreamingContext(sparkConf, Seconds(1))
//2.流式数据输入
val lines = ssc.socketTextStream("localhost", 9999)
//3.流式转换
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
//4.流式输出
wordCounts.print()
//5.启动流式处理
ssc.start()
ssc.awaitTermination()
18.4 流式数据输入
(1)内置数据源(StreamingContext)
- socketStream/rawSocketStream/socketTextStream
- fileStream/textFileStream
- receiverStream
(2)外部数据源
- KafkaUtils:createStream/createDirectStream
- FlumeUtils:createStream
18.5 流式转换
(1)一般的转换
- map/flatMap/filter/reduce
- groupByKey/reduceByKey/sortByKey,join
- count
(2)特有转换
- transform
- window
- mapWithState
灰常灰常感谢原博主的辛苦工作,为防止删博,所以转载,只供学习使用,不做其他任何商业用途。
https://blog.csdn.net/chengyuqiang/article/details/78473913