Spark Streaming
Spark Streaming
一、应用场景
实时计算的,一般使用在实时性要求比较高的场合。但是Spark Streaming内部采用批次计算的机制实现实时计算,一般情况下Spark Streaming也称之为准实时计算框架,批处理框架。
二、核心机制
核心采用了一个新的数据抽象DStream,DStream是多个RDD的集成体,DStream中采用时间批次的概念,将一段时间之间的数据封装为一个RDD,然后统一处理一次
三、Spark Streaming的程序执行入口
3.1 StreamingContext
3.2 StreamingContext的使用步骤
3.2.1 创建程序执行入口
3.2.2 根据数据源创建数据抽象DStream
3.2.3 调用DStream的算子进行数据计算
3.2.4 调用StreamingContext的start方法启动实时计算
3.2.5 调用StreamingContext的awaitxxxx等待实时计算运行
四、DStream的创建
4.1 从网络端口创建DStream
4.2 从外部文件中创建DStream
从外部文件中创建DStream(可以是本地文件系统的,也可以是HDFS文件系统):textFileStream fileStream
文件读取机制采用的是MapReduce中InputFormat机制来读取的
4.3 Flume/Kafka
五、DStream的算子操作
5.1 DStream是由时间批次组成RDD的集合
5.2 无状态算子
算子只对当前批次的数据有效,前一个批次的计算结果不清楚
- RDD中涉及的算子DStream基本都有,这些算子基本上都是无状态算子
transform
算子直接对DStream中的RDD进行运算的
5.3 有状态算子
算子会记录前一个批次的计算结果,然后在和当前批次进行计算updateStateByKey
5.4 窗口算子
将n个批次的数据划分称为一个窗口。然后对窗口统一的运算
window 两个核心参数:
windowDuration
:窗口的宽度(包含多少个批次的数据)slideDuration
:窗口的间隔(从前一个窗口的第批次条数据到第二个窗口的第一批次数据的间隔)
六、DStream的输出操作
6.1 print操作
6.2 saveAsTextFile/ObjectFile
6.3 foreachRDD操作
可以实现Spark Streaming和Spark的其他组件的无缝衔接
七、Spark Streaming的WAL预写日志
Spark Streaming运行的时候需要一个Receiver接收器接受数据,接受的数据设置缓存的地方,Receiver接受的数据一旦丢失,就算Spark有容错机制,无法计算了,因为没有数据源的数据了。
为了保证数据的安全性,防止了Receiver接受的数据丢失,可以开启Spark Streaming的预写日志WAL,WAL可以实现将Receiver每一批次的数据缓存到Spark的检查点目录。 因为一旦开启了WAL,程序的执行效率会非常的低
7.1 如何开启WAL预写日志
7.1.1 设置ssc的检查点目录
7.1.2 给SparkConf中增加一个配置项
spark.streaming.receiver.writeAheadLog.enable = true