随着大数据的发展,人们对大数据的处理要求也越来越高,原有的批处理框架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的数据重用机制可以得到更高效的容错处理。

转载于:https://www.cnblogs.com/shenh062326/p/3530092.html

Spark Streaming实时计算框架介绍相关推荐

  1. Spark Streaming 实时计算在甜橙金融监控系统中的应用、性能优化、任务监控

    1 写在前面 目前公司对实时性计算的需要及应用越来越多,本文选取了其中之一的 Spark Streaming 来介绍如何实现高吞吐量并具备容错机制的实时流应用.在甜橙金融监控系统项目中,需要对每天亿万 ...

  2. 基于案例贯通 Spark Streaming 流计算框架的运行源码

    本期内容 : Spark Streaming+Spark SQL案例展示 基于案例贯穿Spark Streaming的运行源码 一. 案例代码阐述 : 在线动态计算电商中不同类别中最热门的商品排名,例 ...

  3. Spark:Streaming 实时计算框架理论

    Spark Streaming 实时计算框架 一.实时计算概述 1.1 什么是实时计算? 1.2 常用的实时计算框架 二.Spark Streaming 2.1 Spark Streaming 介绍 ...

  4. Flink or Spark?实时计算框架在K12场景的应用实践

    如今,越来越多的业务场景要求 OLTP 系统能及时得到业务数据计算.分析后的结果,这就需要实时的流式计算如Flink等来保障.例如,在 TB 级别数据量的数据库中,通过 SQL 语句或相关 API直接 ...

  5. 实时计算框架 Spark: Lightning-fast cluster computing

    2019独角兽企业重金招聘Python工程师标准>>> real-time processing framework 实时计算框架 Real-time processing deno ...

  6. 【大数据实时计算框架】Storm框架

    一.大数据实时计算框架 1.什么是实时计算?流式计算? (一)什么是Storm? Storm为分布式实时计算提供了一组通用原语,可被用于"流处理"之中,实时处理消息并更新数据库.这 ...

  7. Spark Streaming 图片处理案例介绍

    Spark Streaming 图片处理案例介绍 本文首先介绍了流式处理框架的设计原理.Spark Streaming 的工作原理,然后通过一个基于 Spark Streaming 编写的读取.分析. ...

  8. 实时计算业务介绍实时日志分析

    4.1 实时计算业务介绍 学习目标 目标 了解实时计算的业务需求 知道实时计算的作用 应用 无 4.1.1 实时计算业务需求 实时(在线)计算: 解决用户冷启动问题 实时计算能够根据用户的点击实时反馈 ...

  9. BATJ大数据架构师带你领略实时计算框架Flink的魅力!

    你是不是经常体验或看到以下这些场景? "小张,你看能不能做个监控大屏实时查看促销活动销售额(GMV)?" "小王,我们现在搞促销活动能不能实时统计销量 Top3 啊?&q ...

最新文章

  1. Android数据存储之SharedPreferences
  2. 常熟理工电气院永不言败
  3. 个人做asp.net时犯过的错或是一点心得什么的(我就经常的更新一下吧)
  4. 前端学习(1992)vue之电商管理系统电商系统之实现搜索和清空
  5. Lync Server 2010标准版系列PART6:启用Lync
  6. 小米上市破发,其生态内部的隐患终于显露了?
  7. linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
  8. linux怎么装vnc插件,linux下安装基于GNOME的VNC连接工具Vinagre
  9. 腾讯225页报告:AI正取代互联网成为新引擎,马化腾提七大关键词
  10. windows c语言 http 状态检测_从软件架构说C语言
  11. 打印快递面单pdf_如何开通使用拼多多电子面单?
  12. 创业型 APP 如何筛选合适的推送平台
  13. Serv-u6.0提权新玩法
  14. python 通过逗号分割字符串_「Python 秘籍」使用多个界定符分割字符串
  15. 零样本学习的相关概念——综述
  16. CUDA核函数share memory
  17. 如何使android应用开机时自动启动,如何使APP开机自启动
  18. 关于未知的USB设备(设备描述符请求失败)的解决方法
  19. python编程题3.5:恺撒密码
  20. 研究意识问题为什么如此困难

热门文章

  1. 如何计算_平整场地如何计算?
  2. java pop邮件 源码_[源码和文档分享]基于JavaMail的邮件收发系统
  3. python图像验证码识别_python 简单图像识别--验证码
  4. div中移除某个元素 js_[JS基础] 13 - 其他 JS 基础
  5. 电脑服务器怎么打开网页,电脑的iis服务器打开网页的方法
  6. 上传附件每次都是上传中。_起标题头疼?每次卡在标题上 我都回顾这7种方法 创作灵感就来了...
  7. gen_caltab自治标定板
  8. bootstrap table 分组_bootstrap-table组合表头的实现方法
  9. 如何提取edit control中输入的数据_如何在Power Query中提取数据——列表篇(1)
  10. GraphQL 初探—面向未来 API 及其生态圈