1.概念
数据处理的基本单位:离散流(discretized stream或DStream)
支持容错
支持状态处理
支持窗口操作
2.DStream的基本操作
转化操作
窗口操作
输出操作
3.DStream特有API
参考:http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.dstream.PairDStreamFunctions
http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.streaming.dstream.DStream
①updateStateByKey(func)维持每个键的状态
②countByWindow(windowLength,slideInterval)返回基于滑动窗口的DStream中的元素数量
③reduceByKeyAndWindow(func,windowLength,slideInterval,[num tasks])基于滑动窗口对(K,V)键值对类型的DStream中的值按K使用聚合函数func进行聚合操作,得到新的DStream
④countByValueAndWindow(func,windowLength,slideInterval,[num tasks])基于滑动窗口计算源DStream中每个RDD内每个RDD每个元素出现的频次
4.SparkSteaming示例代码运行
代码保存位置:https://github.com/langyw98/SparkStreamingExample-NetworkWordCount
运行测试方法:
①打开9999端口的监听
nc -l -v 9999
提交编译好的作业
spark-submit --class NetworkWordCount --master local[*] ~/lib/networkwordcountexample_2.10-1.0.jar localhost 9999
5.SparkStreaming对比于离线计算的差别在于数据的来源,SparkStreaming提供了一系列数据的数据流结构,当完成数据读入后,数据的处理方法和Spark的离线计算无差别。
6.带状态的和无状态的流处理
7.带状态的流式操作-检查点-是一个目录名称
ssc.checkPoint(".")
参考代码:example/streaming下的StatefulNetworkWordCount.scala
8.窗口操作的概念
①批处理处理间隔,原始DStream处理间隔
②窗口,包括的DStream的个数就是窗口的长度
窗口必须是原始批处理的整数倍
③窗口解决了1~3,3~5,5~7这种有重叠的处理场景
④窗口的滑动时间间隔,前一个窗口到后一个窗口的时间间隔