一、SparkStreaming 概述
1.1 SparkStreaming 是什么
SparkStreaming 是 Spark Core 的扩展,支持可伸缩、高吞吐量、容错的实时数据流处理。SparkStreaming 可支持很多种数据来源,如 kafka、flume 等,也可以把结果保存到很多地方,如 HDFS、数据库等。
1.2 SparkStreaming 架构及工作流程
1.2.1 架构
二、DStream
2.1 DStream 简介
在 SparkStreaming 中,有一个核心概念加做 DStream(discretized stream,离散化流),它是随时间推移而受到的数据的序列,在内部,每个时间区间收到的数据都作为 RDD 而存在,而 DStream 是由这些 RDD 所组成的序列,因此得名 “离散化”。
因为 SparkStreaming 处理的数据是基于时间区间的 RDD,所以它不是真正的连续,而是微型的批处理。
2.2 DStream 转换
2.2.1 无状态转换
如上图所示,在一个 DStream 里面有多个 RDD,我们可以对每个 RDD 进行操作统计数据,每个 RDD 的计算结果对于后面的 RDD 来说是未知的,这就是无状态转换。
2.2.2 有状态转换
作为一个流式数据的框架,肯定不能只统计当前收到的数据,还要结合以前的数据一起来分析,所以我们要用有状态转换。
2.3 窗口函数
DStream 在采集数据的时候有一个时间间隔,可以设置成 1s,10s 等任意间隔,设置多大的间隔以后就使用这个间隔内的数据。
但我们可能还有其它需求,如 我们统计每个小时内的数据,这时候单用有状态转换是不好实现的,所以 SparkStreaming 又有了新的概念——窗口,例:如果我们想统计 1:00 到 2:00 的数据,那么就把窗口大小成 1 小时就可以统计到了。
自然而然,统计完 1:00 到 2:00 的数据了,我们肯定还要统计 1:10到 2:10 分的数据,这就需要把窗口的滑动步长设置成 10 分钟。