首页 理论教育 Spark Streaming概述——从批处理到实时处理

Spark Streaming概述——从批处理到实时处理

时间:2023-06-20 理论教育 版权反馈
【摘要】:在容错数据保证方面的权衡方面,Spark Streaming提供了更好的支持容错状态计算。而Spark Streaming只需要在批处理级别对记录进行跟踪处理,因此可以有效地保证每条记录将完全被处理一次,即便一个结点发生故障。Storm主要是由Clojure语言实现,Spark Streaming是由Scala实现。而Spark Streaming是一个新的项目,并且在2013年仅仅被Sharethrough使用。除此之外,Databricks是为Spark提供技术支持的公司,包括了Spark Streaming。

Spark Streaming概述——从批处理到实时处理

随着大数据技术的快速发展,人们对大数据的处理要求也越来越高,传统的MapRe-duce等批处理框架在某些特定领域(如实时用户推荐,用户行为分析)已经无法满足人们对实时性的需求。因此诞生了一批如S4、Storm这样的流式的、实时的计算框架。作为伯克利实验室云计算软件技术堆栈一部分的Spark Streaming,正是类似于Storm的流式数据处理技术框架。

1.Spark Streaming的原理

Spark Streaming是建立在Spark上的应用框架,利用Spark的底层框架作为其执行引擎,并在其上构建了DStream的行为抽象。它的工作原理是将流式计算分解成一系列短小的批处理作业,也就是把Spark Streaming的输入数据按照batch size(如1 s)分成一段一段的数据(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作变为针对Spark中对RDD的Trans-formation操作,将RDD经过操作变成中间结果保存在内存中。整个流式计算根据业务的需求可以对中间的结果进行叠加,或者存储到外部设备(如图7-1所示)。

978-7-111-52860-9-Chapter07-1.jpg

图7-1 Spark Streaming处理示意图

Spark Streaming属于Spark的核心子框架,它具有对实时流数据处理的高吞吐量和容错能力强的特性。它可以接受来自Kafka、Flume、HDFS/S3、Kinesis和Twitter等数据源的数据,并使用简单丰富的API函数(比如map,reduce,join,window等操作)来实现更加复杂的功能,而计算结果也能保存在很多地方,如HDFS,DataBases等(如图7-2所示)。另外Spark Streaming也能和Spark内置的MLlib(机器学习)以及Graphx(图计算)完美融合,对实时数据进行更加复杂的处理。

978-7-111-52860-9-Chapter07-2.jpg

图7-2 Spark Streaming运行架构图

2.Storm与Spark Streaming的比较

Storm和Spark Streaming都是分布式流处理的开源框架,但是他们之间还是有一些区别的,这里将它们进行比较并指出它们的重要的区别。(www.xing528.com)

(1)处理模型和延迟。虽然这两个框架都提供可扩展性和容错性,但是它们的处理模型从根本上说是不一样的。Storm处理的是每次传入的一个事件,而Spark Streaming是处理某个时间段窗口内的事件流。因此,Storm处理一个事件可以达到亚秒级的延迟,而Spark Streaming则有几秒钟的延迟。

(2)容错和数据保证。在容错数据保证方面的权衡方面,Spark Streaming提供了更好的支持容错状态计算。在Storm中,当每条单独的记录通过系统时必须被跟踪,所以Storm能够至少保证每条记录将被处理一次,但是在从错误中恢复过来时候允许出现重复记录。这意味着可变状态可能不正确地被更新两次。而Spark Streaming只需要在批处理级别对记录进行跟踪处理,因此可以有效地保证每条记录将完全被处理一次,即便一个结点发生故障。虽然Storm的Trident library库也提供了完全一次处理的功能。但是它依赖于事务更新状态,而这个过程是很慢的,并且通常必须由用户实现。

简而言之,如果你需要亚秒级的延迟,Storm是一个不错的选择,而且没有数据丢失。如果你需要有状态的计算,而且要完全保证每个事件只被处理一次,Spark Streaming则更好。Spark Streaming编程逻辑也更容易,因为它类似于批处理程序,特别是在你使用批次(尽管是很小的)时。

(3)实现和编程API。Storm主要是由Clojure语言实现,Spark Streaming是由Scala实现。如果你想看看这两个框架是如何实现的,或者你想自定义一些东西你就得记住这一点:Storm是由BackType和Twitter开发,而Spark Streaming是在UC Berkeley开发的。

Storm提供了Java API,同时也支持其他语言,而Spark Streaming是以Scala编程,同时也支持Java和Python。

Spark Streaming一个好的特性是其运行在Spark上,这样你能够你编写批处理的同样代码,这就不需要编写单独的代码来处理实时流数据和历史数据。

(4)产品支持。Storm已经出现好多年了,而且自从2011年开始就在Twitter内部生产环境中使用,还有其他一些公司也在使用。而Spark Streaming是一个新的项目,并且在2013年仅仅被Sharethrough使用。Storm是Hortonworks Hadoop数据平台中流处理的解决方案,而Spark Streaming出现在MapR的分布式平台和Cloudera的企业数据平台中。除此之外,Databricks是为Spark提供技术支持的公司,包括了Spark Streaming。

(5)集群管理集成。尽管两个系统都运行在它们自己的集群上,Storm也能运行在Me-sos,而Spark Streaming能运行在YARN和Mesos上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈