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