Spark Streaming将流式计算转化为一批批很小的、确定的批处理作业(micro-batch)。以数秒为单位将数据流切分成离散的作业。每批数据看做RDD,可以使用RDD相关操作进行处理。最后结果以RDD为单位返回(写入HDFS或其他系统)。
DStream是连续数据的离散化表示,DStream中每个离散片段都是一个RDD,DStream可以变换成另一个DStream。
编写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()
(1)内置数据源(StreamingContext)
(2)外部数据源
(1)一般的转换
(2)特有转换