第9章 Spark概论
大数据技术与应用
பைடு நூலகம்
计算机中心
第9章 Spark概论
导学
一、学习目标
1. 2. 3. 4. 了解Spark的发展与Spark的 开发语言Scala。; 掌握Hadoop的局限与不足; Spark的优点。 了解Spark生态系统的组成 与各个模块的概念与应用; 了解Spark的应用场景与应 用Spark的成功案例。
二、重点、难点
1.重点:Hadoop和Spark的关系; Spark的优点;Spark生态系统的组 成。 2.难点:Spark生态系统中各个模 块的概念与应用。
9.1 Spark平台
Apache Spark通用并行分布式计算框架越来越受 人瞩目。
Spark和Hadoop都属于大数据框架平台,而
Spark是Hadoop的后继产品。由于Hadoop设计
9.3 Spark处理架构及其生态系统
9.3.3高层的应用模块 1.Spark SQL 主要用于结构化数据处理和对Spark数据执行类 SQL的查询,并且与Spark生态的其它模块无缝结 合。Spark SQL兼容SQL,Hive,JSON、JDBC和 ODBC等操作。 2.MLlib MLlib是一个分布式机器学习库,即在Spark平台 上对一些常用的机器学习算法进行了分布式实现, 随着版本的更新,它也在不断扩充新的算法。 MLlib支持多种分布式机器学习算法,如分类、回 归、聚类等。
9.4 Spark的应用
9.4.1 Spark的应用场景 Spark可以解决大数据计算中的批处理、交互查询 及流式计算等核心问题。 下图为Spark大数据处理框架与其他框架的对比。
应用场景
复杂的批量数据 处理 基于历史数据的 交互式查询 基于实时数据流 的数据处理 基于历史数据的 数据挖掘 时间对比 小时级,分钟级 分钟级,秒级
9.3 Spark处理架构及其生态系统
9.3.3高层的应用模块 3.GraphX GraphX是构建于Spark上的图计算模型,利用 Spark框架提供的内存缓存RDD、DAG和基于数 据依赖的容错等特性,实现高效健壮的图计算框架。 GraphX的出现,使得Spark生态系统在大图处理和 计算领域得到了更加的完善和丰富。 4.Spark Streaming Spark Streaming是Spark系统中用于处理流数据的 分布式流处理框架,扩展了Spark流式大数据处理 能力。Spark Streaming将数据流以时间片为单位 进行分割形成RDD,能够以相对较小的时间间隔 对流数据进行处理。
9.1 Spark平台
9.1.3 Scala语言 Scala语言是Spark框架的开发语言,是一种类似 Java的编程语言,设计初衷是实现可伸缩的语言、 并集成面向对象编程和函数式编程的各种特性。 Spark能成为一个高效的大数据处理平台,与其使 用Scala语言编写是分不开的。 尽管Spark支持使用Scala、Java和Python三种开发 语言进行分布式应用程序的开发,但是Spark对于 Scala的支持却是最好的。因为这样可以和Spark的 源代码进行更好的无缝结合,更方便的调用其相 关功能。
9.2 Spark与Hadoop
9.2.3 Spark速度比Hadoop快的原因分解 2.Spark数据抽取运算模型 Spark使用内存(RAM)代替了传统HDFS存储 中间结果,Spark的数据抽取运算模型如下图所示
Spark这种内存型计算框架省去了大量的磁盘I/O操 作,效率也随之大幅提升。比较适合各种迭代算法 和交互式数据分析。
9.4 Spark的应用
9.4.2 应用Spark的成功案例 3.淘宝 淘宝技术团队使用了Spark来解决多次迭代的机器 学习算法、高计算复杂度的算法等。将Spark运用 于淘宝的推荐相关算法上,同时还利用Graphx解 决了许多生产问题。 4.优酷土豆
优酷土豆作为国内最大的视频网站,率先看到大数 据对公司业务的价值,早在2009年就开始使用 Hadoop集群,随着这些年业务迅猛发展,优酷土 豆又率先尝试了仍处于大数据前沿领域的Spark内 存计算框架,很好地解决了机器学习和图计算多次 迭代的瓶颈问题,使得公司大数据分析更加完善。
了解Spark的应用场景与应用Spark的成功案例。
9.3 Spark处理架构及其生态系统
9.3.2 中间层的Spark Runtime 2.RDD的操作类型 RDD提供了丰富的编程接口来操作数据集合,一 种是Transformation操作,另一种是Action操作。 (1)Transformation的返回值是一个RDD。它可 以理解为一个领取任务的过程。如果只提交 Transformation是不会提交任务来执行的,任务只 有在Action提交时才会被触发。 (2)Action返回的结果把RDD持久化起来,是一 个真正触发执行的过程。它将规划以任务(Job) 的形式提交给计算引擎,由计算引擎将其转换为多 个Task,然后分发到相应的计算节点,开始真正的 处理过程。
9.1 Spark平台
9.1.2 Spark发展 Spark的发展速度非常迅速。2009 年,Spark 诞生;2010年,Spark正式开源;2013年成为了 Apache 基金项目;2014 年成为Apache 基金的顶 级项目,整个过程不到五年时间。
下图为截止2014年Spark的开发人员数量每个月 的增长曲线。
本章小结
本章介绍了Spark大数据处理框架。通过本章的学
习了解Spark的概念与发展现状;掌握Spark有哪
些优点(对比Hadoop);掌握Spark速度比
Hadoop快的原因;掌握Spark生态系统的组成;
了解Spark生态系统中的Runtime、Spark SQL、
MLlib、GraphX、Spark Streaming的概念与应用;
9.2 Spark与Hadoop
9.2.3 Spark速度比Hadoop快的原因分解 1.Hadoop数据抽取运算模型 Hadoop的数据抽取运算模型如下图所示
Hadoop中数据的抽取运算是基于磁盘的,中间结 果也存储在磁盘上。所以,MapReduce运算伴随着 大量的磁盘的I/O操作,运算速度严重受到了限制。
9.3 Spark处理架构及其生态系统
9.3.1 底层的Cluster Manager和Data anager (1)集群的资源管理可以选择Yarn、Mesos等。 Mesos是Apache下的开源分布式资源管理框架, 它被称为是分布式系统的内核。Mesos根据资源利 用率和资源占用情况,在整个数据中心内进行任务 的调度,提供类似于YARN的功能。 (2)集群的数据管理则可以选择HDFS、AWS等。 Spark支持两种分布式存储系统:HDFS和AWS。 AWS提供的云服务中支持使用Spark集群进行大数 据分析。Spark对文件系统的读取和写入功能是 Spark自己提供的,借助Mesos分布式实现。
9.3 Spark处理架构及其生态系统
Spark整个生态系统分为三层,如下图所示。
(1)底层的Cluster Manager负责集群的资源 管理;Data Manager负责集群的数据管理。 (2)中间层的Spark Runtime,即Spark 内核。 (3)最上层为四个专门用于处理特定场景的 Spark高层模块:
基于增量数据的 机器学习
基于图计算的数 据处理
分钟级
无
9.4 Spark的应用
9.4.2 应用Spark的成功案例 1.腾讯 腾讯大数据精准推荐借助Spark快速迭代的优势, 围绕“数据+算法+系统”这套技术方案,实现了 在“数据实时采集、算法实时训练、系统实时预测” 的全流程实时并行高维算法,最终成功应用于广点 通上,支持每天上百亿的请求量。 2.Yahoo 在Spark技术的研究与应用方面,Yahoo始终处于 领先地位,它将Spark应用于公司的各种产品之中。 移动App、网站、广告服务、图片服务等服务的后 端实时处理框架均采用了Spark的架构。
上只适合离线数据的计算以及在实时查询和迭
代计算上的不足,已经不能满足日益增长的大
数据业务需求。因而Spark应运而生,Spark具
有可伸缩、在线处理,基于内存计算等特点。
9.1 Spark平台
9.1.1 Spark简介 Spark是一个开源的通用并行分布式计算框架, 2009年由加州大学伯克利分校的AMP实验室开发, 是当前大数据领域最活跃的开源项目之一。 Spark也称为快数据,与 Hadoop的传统计算方式 MapReduce相比,效率至少提高 100倍。比如逻辑回归算法在 Hadoop和Spark上的运行时间对 比,可以看出Spark 的效率有很 大的提升,如右图所示。
9.2 Spark与Hadoop
9.2.2 Spark的优点 与Hadoop进行对比,Spark优点如下:
Hadoop 工作方式 处理速度 兼容性 存储方式 操作类型 非在线、静态 高延迟 开发语言:JAVA语言 最好在Linux系统下搭建,对 Windows的兼容性不好 磁盘 Spark 在线、动态 比Hadoop快数十倍至上百倍 开发语言:以Scala为主的多语言 对Linux和Windows等操作系统的兼容性都 非常好 既可以仅用内存存储,也可以在磁盘上存储
只提供Map和Reduce两个操作,表达 提供很多转换和动作,很多基本操作如Join, GroupBy已经在RDD转换和动作中实现。 力欠缺 只适用数据的批处理,实时处理非常 除了能够提供交互式实时查询外,还可以进 数据处理 差 行图处理、流式计算和反复迭代的机器学习等 处理逻辑隐藏在代码细节中,没有整 代码不包含具体操作的实现细节,逻辑更清 逻辑性 体逻辑 晰 抽象层次 可测试性 抽象层次低,需要手工编写代码完成 不容易 Spark的API更强大,抽象层次更高 容易
9.2 Spark与Hadoop
9.2.1 Hadoop的局限与不足 (1)抽象层次低,需要手工编写代码来完成。 (2)只提供两个操作,Map和Reduce。 (3)处理逻辑隐藏在代码细节中,没有整体逻辑。 (4)中间结果不可见,不可分享。 (5)ReduceTask需要等待所有MapTask都完成 后才可以开始。 (6)延时长,响应时间完全没有保证,只适用批 量数据处理,不适用于交互式数据处理和实时数 据处理。 (7)对于图处理和迭代式数据处理性能比较差。