Spark Streaming实时计算框架介绍

随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架MapReduce适合离线计算,却无法满足实时性要求较高的业务,如实时推荐、用户行为分析等。 Spark Streaming是建立在Spark上的实时计算框架,通过它提供的丰富的API、基于内存的高速执行引擎,用户可以结合流式、批处理和交互试查询应用。本文将详细介绍Spark Streaming实时计算框架的原理与特点、适用场景。

 

Spark Streaming实时计算框架

 

    Spark是一个类似于MapReduce的分布式计算框架,其核心是弹性分布式数据集,提供了比MapReduce更丰富的模型,可以在快速在内存中对数据集进行多次迭代,以支持复杂的数据挖掘算法和图形计算算法。Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。

Spark Streaming的优势在于:

  • 能运行在100+的结点上,并达到秒级延迟。
  • 使用基于内存的Spark作为执行引擎,具有高效和容错的特性。
  • 能集成Spark的批处理和交互查询。
  • 为实现复杂的算法提供和批处理类似的简单接口。

基于云梯Spark on Yarn的Spark Streaming总体架构如图1所示。其中Spark on Yarn的启动流程我的另外一篇文章(《程序员》2013年11月期刊《深入剖析阿里巴巴云梯Yarn集群》)有详细描述,这里不再赘述。Spark on Yarn启动后,由Spark AppMaster把Receiver作为一个Task提交给某一个Spark Executor;Receive启动后输入数据,生成数据块,然后通知Spark AppMaster;Spark AppMaster会根据数据块生成相应的Job,并把Job的Task提交给空闲Spark Executor 执行。图中蓝色的粗箭头显示被处理的数据流,输入数据流可以是磁盘、网络和HDFS等,输出可以是HDFS,数据库等。

图1 云梯Spark Streaming总体架构

Spark Streaming的基本原理是将输入数据流以时间片(秒级)为单位进行拆分,然后以类似批处理的方式处理每个时间片数据,其基本原理如图2所示。

图2 Spark Streaming基本原理图

首先,Spark Streaming把实时输入数据流以时间片Δt (如1秒)为单位切分成块。Spark Streaming会把每块数据作为一个RDD,并使用RDD操作处理每一小块数据。每个块都会生成一个Spark Job处理,最终结果也返回多块。

下面介绍Spark Streaming内部实现原理。

使用Spark Streaming编写的程序与编写Spark程序非常相似,在Spark程序中,主要通过操作RDD(Resilient Distributed Datasets弹性分布式数据集)提供的接口,如map、reduce、filter等,实现数据的批处理。而在Spark Streaming中,则通过操作DStream(表示数据流的RDD序列)提供的接口,这些接口和RDD提供的接口类似。图3和图4展示了由Spark Streaming程序到Spark jobs的转换图。

图3 Spark Streaming程序转换为DStream Graph

图4 DStream Graph转换为Spark jobs

在图3中,Spark Streaming把程序中对DStream的操作转换为DStream Graph,图4中,对于每个时间片,DStream Graph都会产生一个RDD Graph;针对每个输出操作(如print、foreach等),Spark Streaming都会创建一个Spark action;对于每个Spark action,Spark Streaming都会产生一个相应的Spark job,并交给JobManager。JobManager中维护着一个Jobs队列, Spark job存储在这个队列中,JobManager把Spark job提交给Spark Scheduler,Spark Scheduler负责调度Task到相应的Spark Executor上执行。

Spark Streaming的另一大优势在于其容错性,RDD会记住创建自己的操作,每一批输入数据都会在内存中备份,如果由于某个结点故障导致该结点上的数据丢失,这时可以通过备份的数据在其它结点上重算得到最终的结果。

正如Spark Streaming最初的目标一样,它通过丰富的API和基于内存的高速计算引擎让用户可以结合流式处理,批处理和交互查询等应用。因此Spark Streaming适合一些需要历史数据和实时数据结合分析的应用场合。当然,对于实时性要求不是特别高的应用也能完全胜任。另外通过RDD的数据重用机制可以得到更高效的容错处理。

### 回答1: Spark Streaming 是一个基于 Apache Spark实时计算框架,它可以处理实时数据流,并将其转换为批处理数据进行分析。Spark Streaming 支持多种数据源,包括 Kafka、Flume、Twitter 和 HDFS 等。它提供了高可靠性、高吞吐量和低延迟的实时数据处理能力,适用于各种实时数据处理场景,如实时监控、实时分析和实时预测等。Spark Streaming 还提供了丰富的 API 和工具,方便用户进行数据处理和分析。 ### 回答2: Spark Streaming是一个用于实时计算框架,它是Apache Spark生态系统中的一部分。Spark Streaming使得我们能够在大规模分布式环境中进行实时流数据的处理和分析,它可以处理多种类型的数据,例如网络数据、Web日志、传感器数据和社交媒体数据。 Spark Streaming通过将实时数据流分成小批次数据,并在每个批次中进行数据处理来实现实时计算。这种分批处理的方法称为微批处理,每个批次数据的大小由用户控制,典型的大小为1秒到数秒之间。这种方法使得Spark Streaming能够在高效保证数据实时性的同时,还能利用大部分Spark的批处理能力,从而提高数据处理的效率。 Spark Streaming通过将实时数据流转换成DStream(离散数据流)来表示数据流,DStream是一种抽象的数据结构,在分布式计算时可以对其进行高效的并行计算Spark Streaming提供了丰富的操作和函数来对DStream流进行处理,包括数据过滤、数据转换、聚合和数据输出等。同时,Spark Streaming还支持多种数据源,例如Kafka、Flume、Twitter和TCP socket等。 在实际应用中,Spark Streaming被广泛用于实时数据处理和流分析,例如实时日志分析、实时交易处理、实时预测和实时推荐等场景中。因为它是在Spark生态系统中构建的,Spark Streaming可以与Spark的其他组件良好地融合,例如Spark SQL 和 MLlib等。 总之,Spark Streaming是一个强大的实时计算框架,可以帮助企业快速实现实时数据处理和分析,并将运算结果实时输出到目标系统中,为企业决策提供有效的支持。 ### 回答3: Spark Streaming是Apache Spark生态系统中的实时计算引擎,是一种处理高速数据流的分布式流处理系统,基于Spark引擎构建而成,它能够处理从各种来源(如Kafka、Flume、Twitter等)传入的实时大规模数据,将流数据实时处理并输出到文件系统、数据库和实时仪表盘等目标中。Spark Streaming引擎提供了一种简单且高效的编程模型,可以使用Scala、Java和Python等语言进行开发,同时引擎还提供了建立高可用的集群模式和扩展性强的分布式环境。 在Spark Streaming中,流可以被表示为弹性分布式数据集(RDD),可以使用类似Spark核心API的各种函数对流进行操作,例如map、reduce、join等,甚至支持窗口函数和时间处理, 这使得开发者可以使用大多数Spark核心API提供的功能,更方便地完成复杂的实时计算任务。另外,Spark Streaming还支持完全原子的事务操作,允许将数据引入到一个可重用的中间件数据存储中进行处理,同时也可以对流数据进行持久化保存和检查点。这给实时计算引擎带来了更好的容错性和恢复能力。 总之,Spark Streaming框架不仅提供了高规格的流式处理构架,而且也提供了支持机器学习和图计算的特性,这使得业务逻辑在一个平台内实现,而不需要降低数据“顺利度”,该构架扩展性强,可应用于大数据分析等实时处理场景。使得Spark Streaming成为了处理大量的实时数据,进行特定的计算和分析之后再加入数据流的必要工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值