SparkStreaming:大规模流式数据处理的新贵:大规模流式数据处理的新贵
Spark Streaming是大规模流式数据处理的新贵,将流式计算分解成一系列短小的批处理作业。本文阐释了Spark Streaming的
架构及编程模型,并结合实践对其核心技术进行了深入的剖析,给出了具体的应用场景及优化方案。
提到Spark Streaming,我们不得不说一下BDAS(Berkeley Data Analytics Stack),这个伯克利大学提出的关于数据分析的
软件栈。从它的视角来看,目前的大数据处理可以分为如以下三个类型。
1.复杂的批量数据处理(batch data processing),通常的时间跨度在数十分钟到数小时之间。
2.基于历史数据的交互式查询(interactive query),通常的时间跨度在数十秒到数分钟之间。
3.基于实时数据流的数据处理(streaming data processing),通常的时间跨度在数百毫秒到数秒之间。
目前已有很多相对成熟的开源软件来处理以上三种情景,我们可以利用MapReduce来进行批量数据处理,可以用Impala来进
行交互式查询,对于流式数据处理,我们可以采用Storm。对于大多数互联网公司来说,一般都会同时遇到以上三种情景,那
么在使用的过程中这些公司可能会遇到如下的不便。
1.三种情景的输入输出数据无法无缝共享,需要进行格式相互转换。
2.每一个开源软件都需要一个开发和维护团队,提高了成本。
3.在同一个集群中对各个系统协调资源分配比较困难。
BDAS就是以Spark为基础的一套软件栈,利用基于内存的通用计算模型将以上三种情景一网打尽,同时支持Batch、
Interactive、Streaming的处理,且兼容支持HDFS和S3等分布式文件系统,可以部署在YARN和Mesos等流行的集群资源管理
器之上。BDAS的构架如图1所示,其中Spark可以替代MapReduce进行批处理,利用其基于内存的特点,特别擅长迭代式和
交互式数据处理;Shark处理大规模数据的SQL查询,兼容Hive的HQL。本文要重点介绍的Spark Streaming,在整个BDAS中
进行大规模流式处理。
图1 BDAS软件栈
Spark Streaming构架
计算流程:Spark Streaming是将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,也就是把Spark
Streaming的输入数据按照batch size(如1秒)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的
RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD
的Transformation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠
加,或者存储到外部设备。图2显示了Spark Streaming的整个流程。