大数据分析技术与实战之 Spark Streaming

本文介绍了Spark Streaming作为大数据流式处理框架的特点和优势,对比了与Storm的实时性和吞吐量。Spark Streaming通过批处理时间间隔、窗口时间间隔和滑动时间间隔进行数据处理,提供DStream抽象进行数据操作。文章通过多个示例展示了如何使用Spark Streaming进行文本文件、网络数据和有状态应用的实时统计,并探讨了性能优化策略,包括设置合适的批处理时间、提高并行度和内存管理。
摘要由CSDN通过智能技术生成

Spark是基于内存的大数据综合处理引擎,具有优秀的作业调度机制和快速的分布式计算能力,使其能够更加高效地进行迭代计算,因此Spark能够在一定程度上实现大数据的流式处理。

随着信息技术的迅猛发展,数据量呈现出爆炸式增长趋势,数据的种类与变化速度也远远超出人们的想象,因此人们对大数据处理提出了更高的要求,越来越多的领域迫切需要大数据技术来解决领域内的关键问题。在一些特定的领域中(例如金融、灾害预警等),时间就是金钱、时间可能就是生命!然而传统的批处理框架却一直难以满足这些领域中的实时性需求。为此,涌现出了一批如S4、Storm的流式计算框架。Spark是基于内存的大数据综合处理引擎,具有优秀的作业调度机制和快速的分布式计算能力,使其能够更加高效地进行迭代计算,因此Spark能够在一定程度上实现大数据的流式处理

Spark Streaming是Spark上的一个流式处理框架,可以面向海量数据实现高吞吐量、高容错的实时计算。Spark Streaming支持多种类型数据源,包括Kafka、Flume、trwitter、zeroMQ、Kinesis以及TCP sockets等,如图1所示。Spark Streaming实时接收数据流,并按照一定的时间间隔将连续的数据流拆分成一批批离散的数据集;然后应用诸如map、reducluce、join和window等丰富的API进行复杂的数据处理;最后提交给Spark引擎进行运算,得到批量结果数据,因此其也被称为准实时处理系统。

 

 

图1 Spark Streaming支持多种类型数据源

目前应用最广泛的大数据流式处理框架是Storm。Spark Streaming 最低0.5~2s做一次处理(而Storm最快可达0.1s),在实时性和容错方面不如Storm。然而Spark Streaming的集成性非常好,通过RDD不仅能够与Spark上的所有组件无缝衔接共享数据,还能非常容易地与Kafka、Flume等分布式日志收集框架进行集成;同时Spark Streaming的吞吐量非常高,远远优于Storm的吞吐量,如图2所示。所以虽然Spark Streaming的处理延迟高于Storm,但是在集成性与吞吐量方面的优势使其更适用于大数据背景。

 

 

图2 Spark Streaming与Storm吞吐量比较图

Spark Streaming基础概念

批处理时间间隔

在Spark Streaming中,对数据的采集是实时、逐条进行的,但是对数据的处理却是分批进行的。因此,Spark Streaming需要设定一个时间间隔,将该时间间隔内采集到的数据统一进行处理,这个间隔称为批处理时间间隔。

也就是说对于源源不断的数据,Spark Streaming是通过切分的方式,先将连续的数据流进行离散化处理。数据流每被切分一次,对应生成一个RDD,每个RDD都包含了一个时间间隔内所获取到的所有数据,因此数据流被转换为由若干个RDD构成的有序集合,而批处理时间间隔决定了Spark Streaming需要多久对数据流切分一次。Spark Streaming是Spark上的组件,其获取的数据和数据上的操作最终仍以Spark作业的形式在底层的Spark内核中进行计算,因此批处理时间间隔不仅影响数据处理的吞吐量,同时也决定了Spark Streaming向Spark提交作业的频率和数据处理的延迟。需要注意的是,批处理时间间隔的设置会伴随Spark Streaming应用程序的整个生命周期,无法在程序运行期间动态修改,所以需要综合考虑实际应用场景中的数据流特点和集群的处理性能等多种因素进行设定。

窗口时间间隔

窗口时间间隔又称为窗口长度,它是一个抽象的时间概念,决定了Spark Streaming对RDD序列进行处理的范围与粒度,即用户可以通过设置窗口长度来对一定时间范围内的数据进行统计和分析。如果设批处理时间设为1s,窗口时间间隔为3s,如3图所示,其中每个实心矩形表示Spark Streaming每1秒钟切分出的一个RDD,若干个实心矩形块表示一个以时间为序的RDD序列,而透明矩形框表示窗口时间间隔。易知窗口内RDD的数量最多为3个,即Spark Streming 每次最多对3个RDD中的数据进行统计和分析。对于窗口时间间隔还需要注意以下几点:

以图3为例,在系统启动后的前3s内,因进入窗口的RDD不足3个,但是随着时间的推移,最终窗口将被填满。

不同窗口内所包含的RDD可能会有重叠,即当前窗口内的数据可能被其后续若干个窗口所包含,因此在一些应用场景中,对于已经处理过的数据不能立即删除,以备后续计算使用。

窗口时间间隔必须是批处理时间间隔的整数倍。

 

 

图3 窗口时间间隔示意图

滑动时间间隔

滑动时间间隔决定了Spark Streaming对数据进行统计与分析的频率,多出现在与窗口相关的操作中。滑动时间间隔是基于批处理时间间隔提出的,其必须是批处理时间间隔的整数倍。在默认的情况下滑动时间间隔设置为与批处理时间间隔相同的值。如果批处理时间间隔为1s,窗口间隔为3s,滑动时间间隔为2s,如图4所示,其含义是每隔2s对过去3s内产生的3个RDD进行统计分析。

 

 

图4 滑动时间间隔、窗口时间间隔、批处理时间间隔综合示意图

DStream基本概念

DStream是Spark Streaming的一个基本抽象,它以离散化的RDD序列的形式近似描述了连续的数据流。DStream本质上是一个以时间为键,RDD为值的哈希表,保存了按时间顺序产生的RDD,而每个RDD封装了批处理时间间隔内获取到的数据。Spark Streaming每次将新产生的RDD添加到哈希表中,而对于已经不再需要的RDD则会从这个哈希表中删除,所以DStream也可以简单地理解为以时间为键的RDD的动态序列。设批处理时间间隔为1s,图5为4s内产生的DStream示意图。

 

 

图5 DStream示意图

Spark Streaming编程模式与案例分析

Spark Streaming编程模式

下面以Spark Streaming官方提供的WordCount代码为例来介绍Spark Streaming的使用方式。

示例1:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值