1、2010NJUPT之之 Spark胡楠http:/ 计算机学院云计算技术和大数据云计算技术和大数据2010NJUPT纲要Spark综述综述1核心核心 技术技术2Spark架构架构3BDAS简介简介4函数函数 式编程简介式编程简介 7Spark应用实例应用实例6Spark安装部署安装部署52010NJUPT一、 Spark综述Spark是什么是什么 1Spark是基于内存计算的大数据并行计算框架。 Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将 Spark部署在大量廉价硬件之上,形成集群。Spark于 2009年诞生于加州大学伯克利分校
2、AMPLab。并且于 2010年开源。 2013年 6月 Spark进入Apache孵化器。目前,已经成为Apache软件基金会旗下的顶级开源项目。http:/people.csail.mit.edu/matei/Matai zaharia2010NJUPT一、 Spark综述Spark与与 Hadoop2Spark相比 HadoopMapRedue的优势如下:1、 中间结果输出基于 MapReduce的计算模型会将中间结果序列化到磁盘上 。而 Spark将执行模型抽象为通用的有向无环图执行 计划。 且可以将中间结果缓存内存中 。2、 数据格式和内存布局Spark抽象出分布式内存存储结构 RD
3、D,进行数据存储。 Spark能够控制数据在不同节点上的分区,用户可以自定义分区策略。2010NJUPT一、 Spark综述Spark与与 Hadoop33、执行策略MapReduce在数据 shuffle之前总是花费大量时间来排序。 Spark支持基于 Hash的分布式聚合,在需要的时候再进行实际排序 。4、任务调度的开销MapReduce上的不同作业在同一个节点运行时,会各自启动一个 JVM。而 Spark同一节点的所有任务都可以在一个 JVM上 运行。2010NJUPT一、 Spark综述Spark发展现状发展现状3Spark生态随着 BDAS的完善,已经成型。Spark全面兼容 Had
4、oop的 数据持久层 。从而 让把计算任务从原来的 MapReduce计算 任务 迁移 到 Spark中更加简单 。目前 Spark的工业应用在国内已经大范围落地。包括 BAT在内的一众互联网公司都建立了自己的 Spark集群2010NJUPT纲要Spark综述综述1核心核心 技术技术2Spark架构架构3BDAS简介简介4函数函数 式编程简介式编程简介 7Spark应用实例应用实例6Spark安装部署安装部署52010NJUPT二、 Spark关键技术关键技术 RDD的全称是弹性分布式数据集( resilient distributed dataset)是 Spark的核心数据模型, RDD
5、是 Spark中待处理的数据的抽象,它是逻辑中的实体 。对于 使用者来说,你得到的数据操作接口就是 RDD,在对RDD进行处理的时候不需要考虑底层的分布式集群,就像在单机上一样即可,这也正是 Spark的优势之一。什么什么 是是 RDD12010NJUPT二、 Spark关键技术关键技术 从 Hadoop文件系统输入(比如 HDFS)创建。 从父 RDD转换得到新的 RDD。 将数组或者集合这样的数据结构并行化,转化成 RDD。 通过 cache()函数将计算后的 RDD缓存到内存中。RDD创建方式创建方式22010NJUPT二、 Spark关键技术关键技术 从逻辑上来看, RDD就是数据。而
6、实际上,从物理上来看, RDD是一种分布式内存的抽象。 Spark中的数据实际上是像 HDFS那样分块存储RDD存储结构存储结构32010NJUPT二、 Spark关键技术关键技术 分区列表 计算每个分片的函数 对父 RDD的依赖 对 “键值对 ”数据类型 RDD的分区器,控制分区策略和分区数。 每个数据分区的地址列表。所以 RDD实际上只是一个元数据对象,用于将对数据集的操作映射到物理存储之上。 RDD的重要内部属性如下:2010NJUPT二、 Spark关键技术关键技术 RDD中的依赖关系RDD之间的依赖关系可以分为两类:窄依赖 :每个父 RDD 的分区都至多被一个子 RDD 的分区 使用
7、;窄依赖允许在单个集群节点上 流水线式 执行,这个节点可以计算所有父级分区 。在窄依赖中,节点失败后的恢复更加高效。因为只有丢失的父级分区 需要 重新计算,并且这些丢失的父级分区可以并行地在不同节点上重新计算。宽依赖 :多个子 RDD 的分区依赖一个父 RDD 的分区 。宽依赖需要所有的父 RDD 数据可用并且数据已经通过类 MapReduce 的操作shuffle 完成 。在宽 依赖 的继承关系中,单个失败的节点可能导致一个 RDD 的所有先祖 RDD 中的一些分区丢失, 导致计算 的重新执行。2010NJUPT二、 Spark关键技术关键技术 宽依赖和窄依赖的样例。每一个方框表示一个 RD
8、D,其内的阴影矩形表示 RDD 的分区。2010NJUPT二、 Spark关键技术关键技术 TransformationTransformation操作是延迟计算的,也就是说从一个RDD转换生成另一个 RDD的转换操作不是立即执行的,而是需要等到 Action操作是才真正出发运算。 ActionAction算子会触发 Spark提交作业,并将数据输出到Spark系统。RDD操作 算子, RDD中的操作算子可以分为两类:Transformation(变换) 算子 与 Action(行动)算子。RDD算子算子42010NJUPT二、 Spark关键技术关键技术 RDD算子操作举例 如下:Val l
9、ine = sc.textFile(Test.txt)line.map(n=Integer.parseInt(n)*Integer.parseInt(n).reduce(_+_)2010NJUPT二、 Spark关键技术关键技术 运行逻辑运行逻辑52010NJUPTspark的容错机制的容错机制6二、 Spark关键技术关键技术 基于血统的容错机制( lineage):在 spark中 RDD具有不变性,在数据处理过程中, spark通过 lineage图记录了各个 RDD之间的变换关系,一旦某个数据处理过程出现错误, spark可以根据 lineage图快速进行容错恢复。特别是对于 map操
10、作来说,当某个节点的任务失败, spark只需 要重新计算相应分区的数据,而不必将整个任务重新计算。在很多分布式数据处理系统中通过备份来进行容错,相比于这种会导致巨大存储消耗的容错方式, spark的 lineage图只需要十几 kb的存储空间。Spark允许用户将数据 cache下来,对于将来可能频繁使用的某个计算结果,将这个 RDDcache下来是明智的选择。2010NJUPT二、 Spark关键技术关键技术 检查点支持:虽然 lineage 可用于错误后 RDD 的恢复,但对于很长的 lineage 的 RDD 来说,这样的 恢复耗时 较长。由此 ,可以考虑将 某些 RDD 进行检查点操
11、作(Checkpoint)保存到稳定存储 上。Spark 当前提供了为 RDD 设置 检查点操作 的 API , 让 用户自行 决定需要为哪些数据设置检查点操作 。由于 RDD 的只读特性使得比常用的共享内存更容易做 checkpoint.由于不需要关心 一致性 的问题, RDD 的写出可在后台进行,而不需要程序暂停或进行分布式快照2010NJUPT纲要Spark综述综述1核心核心 技术技术2Spark架构架构3BDAS简介简介4Scala简介简介 7Spark应用实例应用实例6Spark安装部署安装部署52010NJUPT三、 Spark体系架构体系架构 架构组成架构组成1 Master W
12、orker2010NJUPT三、 Spark体系架构体系架构 架构架构 图图 22010NJUPT三、 Spark体系架构体系架构 角色任务3Master进程和 Worker进程,对整个集群进行控制 。Driver 程序是应用逻辑执行的起点,负责作业的调度,即Task任务的 分发Worker用来管理计算节点和创建 Executor并行处理任务 。Executor对相应数据分区的任务进行处理。2010NJUPT三、 Spark体系架构体系架构 执行流程 4Client 提交应用, Master找到一个 Worker启动 DriverDriver向 Master或者资源管理器申请资源,之后将应用转
13、化为 RDD GraphDAGScheduler将 RDD Graph转化为 Stage的有向无环图提交给 TaskSchedulerTaskScheduler提交任务给 Executor执行 。2010NJUPT纲要Spark综述综述1核心核心 技术技术2Spark架构架构3BDAS简介简介4Scala简介简介 7Spark应用实例应用实例6Spark安装部署安装部署52010NJUPT四、 BDAS简介目前, Spark已经发展成为包含众多子项目的大数据计算平台。伯克利将 Spark的整个生态系统称为伯克利数据分析栈(BDAS),目前包含四个已经比较成熟的组件。2010NJUPT四、 BD
14、AS简介 谈到 Spark SQL:首先需要从 Shark说起。Spark SQL1.12010NJUPT四、 BDAS简介Shark起源起源1.2为了 给 熟悉 RDBMS但又不理解 MapReduce的技术人员提供快速上手的工具, Hive应运而生,它是当时唯一运行在 Hadoop上的 SQL-on-Hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的 I/O,降低的运行效率,为了提高 SQL-on-Hadoop的效率,大量的 SQL-on-Hadoop工具开始产生。 其中就包括 Shark2010NJUPT四、 BDAS简介Shark与与 hive1.3S
15、hark基于 Hive修改了内存 管理、物理计划、执行三个模块,并使之能运行在 Spark引擎上,从而使得 SQL查询的速度得到 10-100倍的提升2010NJUPT四、 BDAS简介Spark SQL1.4Shark缺陷:Shark对于 Hive的太多 依赖, 制约了 Spark的 One Stack Rule Them All的既定方针,制约了 Spark各个组件的相互集成SparkSQL抛弃原有 Shark的代码,汲取了 Shark的一些优点,如内存列存储( In-Memory Columnar Storage)、Hive兼容性等,重新开发了 SparkSQL代码 ;由于 摆脱了对 Hive的依赖性, SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便2010NJUPT四、 BDAS简介Spark SQL特点特点1.5*数据兼容方面 不但兼容 Hive,还可以从 RDD、 JSON文件中获取 数据*性能优化方面 采取 In-Memory Columnar Storage、byte-code generation等优化 技术*组件扩展方面 无论是 SQL的语法解析器、分析器还是优化器都可以重新定义,进行扩展。