编辑: 山南水北 | 2019-07-03 |
edu.cn 厦门大学计算机科学系 2018版 林子雨 厦门大学计算机科学系 E-mail: [email protected] 主页:http://www.cs.xmu.edu.cn/linziyu 第7章Spark Streaming (PPT版本号:2018年春季学期) 温馨提示:编辑幻灯片母版,可以修改每页PPT的厦大校徽和底部文字 《Spark编程基础》 教材官网: http://dblab.xmu.edu.cn/post/spark/ 扫一扫访问教材官网 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 提纲 7.1 流计算概述 7.2 Spark Streaming 7.3 DStream操作概述 7.4 基本输入源 7.5 高级数据源 7.6 转换操作 7.7 输出操作 7.8 Structured Streaming 百度搜索厦门大学数据库实验室网站访问平台 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 课程配套授课视频 课程在线视频地址:http://dblab.xmu.edu.cn/post/10482/ 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.1 流计算概述 ? 7.1.1 静态数据和流数据 ? 7.1.2 批量计算和实时计算 ? 7.1.3 流计算概念 ? 7.1.4 流计算框架 ? 7.1.5 流计算处理流程 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 很多企业为了支持决策分析而构建的数据仓库系统,其中 存放的大量历史数据就是静态数据.技术人员可以利用数 据挖掘和OLAP(On-Line Analytical Processing)分析工 具从静态数据中找到对企业有价值的信息 7.1.1 静态数据和流数据 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 近年来,在Web应用、网络监控、传感监测等领域,兴 起了一种新的数据密集型应用――流数据,即数据以大量 、快速、时变的流形式持续到达 ? 实例:PM2.5检测、电子商务网站用户点击流 7.1.1 静态数据和流数据 流数据具有如下特征: ?数据快速持续到达,潜在大小也许是无穷无尽的 ?数据来源众多,格式复杂 ?数据量大,但是不十分关注存储,一旦经过处理,要 么被丢弃,要么被归档存储 ?注重数据的整体价值,不过分关注个别数据 ?数据顺序颠倒,或者不完整,系统无法控制将要处理 的新到达的数据元素的顺序 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 对静态数据和流数据的处理,对应着两种截然不同的计算模式:批量 计算和实时计算 7.1.2 批量计算和实时计算 图 数据的两种处理模型 ?批量计算:充裕时间处理静态数据, 如Hadoop ?流数据不适合采用批量计算,因为流 数据不适合用传统的关系模型建模 ?流数据必须采用实时计算,响应时间 为秒级 ?数据量少时,不是问题,但是,在大 数据时代,数据格式复杂、来源众多、 数据量巨大,对实时计算提出了很大 的挑战.因此,针对流数据的实时计 算――流计算,应运而生 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 流计算:实时获取来自不同数据源的海量数据,经过实时 分析处理,获得有价值的信息 7.1.3 流计算概念 图 流计算示意图 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 流计算秉承一个基本理念,即数据的价值随着时间的流逝 而降低,如用户点击流.因此,当事件出现时就应该立即 进行处理,而不是缓存起来进行批量处理.为了及时处理 流数据,就需要一个低延迟、可扩展、高可靠的处理引擎 7.1.3 流计算概念 对于一个流计算系统来说,它应达到如下需求: ?高性能:处理大数据的基本要求,如每秒处理几十万 条数据 ?海量式:支持TB级甚至是PB级的数据规模 ?实时性:保证较低的延迟时间,达到秒级别,甚至是 毫秒级别 ?分布式:支持大数据的基本架构,必须能够平滑扩展 ?易用性:能够快速进行开发和部署 ?可靠性:能可靠地处理流数据 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 当前业界诞生了许多专门的流数据实时计算系统来满足各自需求 ? 目前有三类常见的流计算框架和平台:商业级的流计算平台、开源流 计算框架、公司为支持自身业务开发的流计算框架 ? 商业级:IBM InfoSphere Streams和IBM StreamBase ? 较为常见的是开源流计算框架,代表如下: C Twitter Storm:免费、开源的分布式实时计算系统,可简单、高效、可靠地处理大量的流数据 C Yahoo! S4(Simple Scalable Streaming System):开源流计算 平台,是通用的、分布式的、可扩展的、分区容错的、可插拔的 流式系统 ? 公司为支持自身业务开发的流计算框架: C Facebook Puma C Dstream(百度) C 银河流数据处理平台(淘宝) 7.1.4 流计算框架 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.1.5 流计算处理流程 ? 1. 概述 ? 2. 数据实时采集 ? 3. 数据实时计算 ? 4. 实时查询服务 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 传统的数据处理流程,需要先采集数据并存储在关系数据库等数据管 理系统中,之后由用户通过查询操作和数据管理系统进行交互 7.1.5 流计算处理流程 传统的数据处理流程示意图 ? 传统的数据处理流程隐含了两个前提: C 存储的数据是旧的.存储的静态数据是过去某一时刻的快照,这 些数据在查询时可能已不具备时效性了 C 需要用户主动发出查询来获取结果 1. 概述 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 流计算的处理流程一般包含三个阶段:数据实时采集、数据实时计算 、实时查询服务 7.1.5 流计算处理流程 流计算处理流程示意图 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 数据实时采集阶段通常采集多个数据源的海量数据,需要保证实时性 、低延迟与稳定可靠 ? 以日志数据为例,由于分布式集群的广泛应用,数据分散存储在不同 的机器上,因此需要实时汇总来自不同机器上的日志数据 ? 目前有许多互联网公司发布的开源分布式日志采集系统均可满足每秒 数百MB的数据采集和传输需求,如: C Facebook的Scribe C LinkedIn的Kafka C 淘宝的Time Tunnel C 基于Hadoop的Chukwa和Flume 7.1.5 流计算处理流程 2. 数据实时采集 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 数据实时计算阶段对采集的数据进行实时的分析和计算, 并反馈实时结果 ? 经流处理系统处理后的数据,可视情况进行存储,以便之 后再进行分析计算.在时效性要求较高的场景中,处理之 后的数据也可以直接丢弃 7.1.5 流计算处理流程 数据实时计算流程 3. 数据实时计算 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 实时查询服务:经由流计算框架得出的结果可供用户进行 实时查询、展示或储存 ? 传统的数据处理流程,用户需要主动发出查询才能获得想 要的结果.而在流处理流程中,实时查询服务可以不断更 新结果,并将用户所需的结果实时推送给用户 ? 虽然通过对传统的数据处理系统进行定时查询,也可以实 现不断地更新结果和结果推送,但通过这样的方式获取的 结果,仍然是根据过去某一时刻的数据得到的结果,与实 时结果有着本质的区别 7.1.5 流计算处理流程 4.实时查询服务 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] ? 可见,流处理系统与传统的数据处理系统有如下不同: C 流处理系统处理的是实时的数据,而传统的数据处理 系统处理的是预先存储好的静态数据 C 用户通过流处理系统获取的是实时结果,而通过传统 的数据处理系统,获取的是过去某一时刻的结果 C 流处理系统无需用户主动发出查询,实时查询服务可 以主动将实时结果推送给用户 7.1.5 流计算处理流程 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2 Spark Streaming 7.2.1 Spark Streaming设计 7.2.2 Spark Streaming与Storm的对比 7.2.3 从DHadoop+Storm‖架构转向Spark架构 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.1 Spark Streaming设计 ?Spark Streaming可整合多种输入数据源,如Kafka、 Flume、HDFS,甚至是普通的TCP套接字.经处理后的 数据可存储至文件系统、数据库,或显示在仪表盘里 图Spark Streaming支持的输入、输出数据源 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.1 Spark Streaming设计 Spark Streaming的基本原理是将实时输入数据流以时 间片(秒级)为单位进行拆分,然后经Spark引擎以类 似批处理的方式处理每个时间片数据 图Spark Streaming执行流程 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.1 Spark Streaming设计 Spark Streaming最主要的抽象是DStream(Discretized Stream,离散化数据 流),表示连续不断的数据流.在内部实现上,Spark Streaming的输入数据按 照时间片(如1秒)分成一段一段,每一段数据转换为Spark中的RDD,这些分 段就是Dstream,并且对DStream的操作都最终转变为对相应的RDD的操作 图DStream操作示意图 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.2 Spark Streaming与Storm的对比 ?Spark Streaming和Storm最大的区别在于,Spark Streaming无法实现毫秒级的流计算,而Storm可以实 现毫秒级响应 ?Spark Streaming构建在Spark上,一方面是因为 Spark的低延迟执行引擎(100ms+)可以用于实时 计算,另一方面,相比于Storm,RDD数据集更容易 做高效的容错处理 ?Spark Streaming采用的小批量处理的方式使得它可 以同时兼容批量和实时数据处理的逻辑和算法,因此, 方便了一些需要历史数据和实时数据联合分析的特定 应用场合 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.3 从DHadoop+Storm‖架构转向Spark架构 图 采用Hadoop+Storm部署方式的一个案例 《Spark编程基础》 厦门大学计算机科学系 林子雨 [email protected] 7.2.3 从DHadoop+Storm‖架构转向Spark架构 图用Spark架构满足批处理和流处理需求 采用Spark架构具有如下优点: ?实现一键式安装和配置、线程 级别的任务监控和告警;