spark简介

esunnyDT12

贡献于2016-11-27

字数:0 关键词: 分布式/云计算/大数据

2015 Spark2.0简介 内部培训 1 Spark简介 Spark核心RDD Spark应用 Spark与Hadoop的区别与联系 Spark总体流程 2 Spark简介--是什么?  Spark是一个快速且通用的集群计算平台。  集群计算 Ps:把一台电脑无法解决的问题,放到多台电脑组成的集群上进行解决,这就是集群计算。 3 Spark简介--特点有哪些?  First:Spark是快速的 Speed 1. 很多任务能够秒级完成,对于一些特定的工作,Spark比Mapreduce(Hadoop的核心)快100倍。 2. Spark扩充了流行的Mapreduce计算模型,使Spark更高效地支持更多类型的计算,包括交互 式查询,和流处理。 3. 速度快的另一个主要原因就是,能够在内存中计算。 4. 提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。 Ps:直白的理解就是spark是内存版的Hadoop 4 Spark简介--特点有哪些?  Second :Spark易用的 Ease of Use 1. Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。 2. Spark支持Java,Python和Scala API,支持交互式的Python和Scala的shell。 Ps:直白的理解就是spark api的支持是多样的 5  Third : Spark是通用的 1. Spark的设计,容纳了之前很多独立的,分布式系统所拥有的功能。独立的分布式系统包括: 批处理,迭代式计算,交互查询和流处理等。 2. 并且,由之前需要维护不同的集群,到现在只需要维护一个Spark集群。 Spark简介--特点有哪些? 6  Four :Spark是高度开放的 1. Spark提供了Python,Java,Scala,SQL的API和丰富的内置库。 2. 同时,Spark和其它的大数据工具整合的很好。尤其,Spark能够运行在Hadoop集群上面, 能够访问Hadoop数据。 3. 读取HDFS,HBase等一切Hadoop的数据 Spark简介--特点有哪些? 7  Important :Spark架构先进的 1. Spark采用Scala语言编写,底层采用了actor model的akka作为通讯框架,代码十分简洁高效。 2. 基于DAG图的执行引擎,减少多次计算之间中间结果写到HDFS的开销。 3. 建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的 大数据处理场景 Spark简介--特点有哪些? 8 • Spark提供了多种高级工具: Shark SQL应用于即席查询(Ad-hoc query)、Spark Streaming应用于流式计算、 MLlib应用于机器学习、GraphX应用于图处理。 • Spark可以基于自带的standalone集群管理器独立运行,也可以部署在Apache Mesos 和 Hadoop YARN 等集群管理器上运行。 • Spark可以访问存储在HDFS、Hbase、Cassandra、Amazon S3、本地文件系统等等 上的数据,Spark支持文本文件,序列文件,以及任何Hadoop的InputFormat。 MesosYARNS3 Spark Standalone 存储层 资源调度层 计算层 Cassandra Hbase HDFS Spark SQL Spark Streaming GraphX (graph) MLlib (machine learning) 工具层 Spark架构 Tachyo 9 Spark简介 Spark核心RDD Spark应用 Spark与Hadoop的区别与联系 Spark总体流程 10 Spark组件 • Driver Program (驱动程序) 是Spark 的核 心组件  构建SparkContext(Spark应 用的入口,它负责和整个集群 的交互,创建需要的变量, 还包含集群的配置信息等)  将用户提交的job转换为 DAG图(类似数据处理的流程 图)  根据策略将DAG图划分为多 个stage,根据分区从而生 成一系列tasks  根据tasks要求向资源管理器 申请资源  提交任务并检测任务状态 • Executor 真正执行task的单元,一个 Worker Node上可以有多个 Executor Spark任务 • 应用程序:由一个driver program和多个job构成; • job:由多个stage组成; • stage:对应一个taskset, • taskset:对应一组关联的相 互之间没有shuffle依赖关系 的task组成。 • task:任务最小的工作单元 资源管理组件 •YARN(通用) Master/Slave结构 Resource Manager(RM) 全局的资源管理器,负责系统的 资源管理和分配 Node Manager(NM) 每个节点上的资源和任务管理器 ApplicationMaster(AM) 每个应用程序都有一个,负责任 务的调度和监视,并与RM调度 器协商为任务获取资源。 •Standalone(Spark自带) Master/Slave结构 Master 类似于YARN的RM Worker 类似于YARN的NM Spark任务提供多层分解的概念,Spark组件将用户的应用程序分解为内部执行任务并 提供执行容器,资源管理为spark组件提供资源管理和调度。 HDFS Input1 Input2 stage2 stage3 Task Job stage1 Spark核心概念 2016年8月11日 游勇编制 11 Spark核心组件 Spark包括多个紧密集成的组件。 12 Spark的组件 紧密集成的优点: 1. 如果Spark底层优化了,那么基于Spark底层的组件,也得到了相应的优化。例如,Spark底 层增加了一个优化算法,那么Spark的SQL和机器学习包也会自动的优化。 2. 紧密集成,节省了各个组件组合使用时的部署,测试等时间。 3. 当向Spark增加新的组件时,其它的组件,可以立刻享用新组件的功能。 4. 无缝连接不同的处理模型。 13 Spark的组件  Spark Core: 1. 包含Spark的基本功能,包含任务调度,内存管理,容错机制等。 2. Spark Core内部定义了RDDs(resilient distributed datasets,弹性分布式数据集)。RDDs代表横 跨很多工作节点的数据集合,RDDs可以被并行的处理。 3. Spark Core提供了很多APIs来创建和操作这些集合(RDDs)。 14 Spark的组件  Spark SQL: 1. 是Spark处理结构化数据的库。它支持通过SQL查询数据,就像HQL(Hive SQL)一样,并且支 持很多数据源,像Hive表,JSON等。Spark SQL是在Spark 1.0版本中新加的。 2. Shark是一种较老的基于Spark的SQL项目,它是基于Hive修改的,它现在已经被Spark SQL替 代了。 15 Spark的组件  Spark Streaming: 1. 是实时数据流处理组件,类似Storm。 2. Spark Streaming提供了API来操作实时流数据。 16 Spark的组件  MLlib: 1. Spark有一个包含通用机器学习功能的包,就是MLlib(machine learning lib)。 2. MLlib包含了分类,聚类,回归,协同过滤算法,还包括模型评估,和数据导入。 3. 它还提供了一些低级的机器学习原语,包括通用梯度下降优化算法。 4. MLlib提供的上面这些方法,都支持集群上的横向扩展。 17 Spark的组件  Graphx: 1. 是处理图的库(例如,社交网络图),并进行图的并行计算。就像Spark Streaming和Spark SQL 一样,Graphx也继承了Spark RDD API,同时允许创建有向图。 2. Graphx提供了各种图的操作,例如subgraph和mapVertices,也包含了常用的图算法,例如 PangeRank等。 金融行业应用中心 2016年8月11日 游勇编制 18 Spark的组件  Cluster Managers: 1. Cluster Managers就是集群管理。Spark能够运行在很多cluster managers上面,包括Hadoop YARN,Apache Mesos和Spark自带的单独调度器。 2. 如果你把Spark安装在了裸机上面,单独调度器能够提供简单的方式,让你开始Spark之旅。 3. 如果你已经有了Hadoop Yarn或者Mesos集群,那么,Spark对这些集群管理工具的支持,使 你的Spark应用程序能够在这些集群上面运行。 19 Spark端到端流程 整体流程 • Spark的Driver Program (简称 Driver)包含用户的应用程序 • Driver完成task的解析和生成 • Driver向Cluster Manager(集 群资源管理器)申请运行task需 要的资源。 • 集群资源管理器为task分配满足 要求的节点,并在节点按照要求 创建Executor • 创建的Executor向Driver注册。 • Driver将spark应用程序的代码 和文件传送给分配的executor • executor运行task,运行完之 后将结果返回给Driver或者写入 HDFS或其他介质。 20 Spark的运行模式  从架构和应用角度上看,spark是一个仅包含计算逻辑的开 发库(尽管它提供个独立运行的master/slave服务,但考虑 到稳定后以及与其他类型作业的继承性,通常不会被采用) ,而不包含任何资源管理和调度相关的实现,这使得spark 可以灵活运行在目前比较主流的资源管理系统上,典型的代 表是mesos和yarn,我们称之为“spark on mesos”和“spark on yarn”。将spark运行在资源管理系统上将带来非常多的收 益,包括:与其他计算框架共享集群资源,资源按需分配, 进而提高集群资源利用率等 21 Spark on Standalon e (独立模式)流 程 Driver 运行在 Client Driver 运行在 Worke r 执行流程描述: 1.客户端把作业发布到Master 2.Master让一个Worker启动Driver,并将作业 推送给Driver 3. Driver进程生成一系列task 4.Driver向Master申请资源 5.Master让调度的Worker启动Exeuctor 6. Exeuctor启动后向Driver注册。 7.Driver将task调度到Exeuctor执行。 8. Executor执行结果写入文件或返回Driver 执行流程描述: 1. .客户端启动后直接运行用户程序,启动 Driver 2. Driver进程生成一系列task 3. Driver向Master申请资源 4. Master让调度的Worker启动Exeuctor 5. Exeuctor启动后向Driver注册。 6. Driver将task调度到Exeuctor执行。 7. Executor执行结果写入文件或返回Driver  Master和Worker是standalone的角色,Driver和Executor是Spark的角色。  Master负责分配资源,分配Driver和Executor,让Worker启动driver和executor,只管 理到executor层,不涉及任务;  Driver负责生成task,并与executor通信,进行任务的调度和结果跟踪,不涉及资源。 Ps:独立模式,自带完整的 服务,可单独部署到一个 集群中,无需依赖任何其 他资源管理系统 22 Spark on YARN 流程 Yarn Client Yarn Cluste r Driver运行在AM(Application Master): 1.客户端把作业发布到YARN 2. RM为该job在某个NM上分配一个AM,NM启 动AppMaster,App Master启动Driver。 3.AM启动后完成初始化作业。Driver生成一系 列Task。 4.AM向RM申请资源,RM返回Executor信息。 5.AM通过RPC启动相应的SparkExecutor。 6.Driver向Executor分配task。 7. Executor执行结果写入文件或返回Driver Driver运行在Cleint : 1. .客户端启动后直接运行用户程序,直接启动 Driver。 2. Driver初始化并生成一系列Task 3.客户端将App Commands发布到YARN。 4. RM为该job在某个NM上分配一个AM 。 5.AM向RM申请资源,RM返回Executor信息。 6.AM通过RPC启动相应的SparkExecutor。 7.Exeuctor启动后向Driver注册。 8.Driver向Executor分配task。 9.Executor执行结果写入文件或返回Driver  与Standalone类似,不过YARN架构更通用,可以在同一集群部署Hadoop、Spark等  RM、NM和AM是YARN的角色,Driver和Executor是Spark的角色。  RM负责资源分配,分配App Master和Executor;AM负责向RM申请资源,启动 Driver和启动Executor  Driver负责task的生成,task的调度和结果跟踪 Ps:Yarn是云操作系统资源管 理模式 23 Spark简介 Spark核心RDD Spark应用 Spark与Hadoop的区别与联系 Spark总体流程Spark总体流程 24 RDD是什么? Resilient Distributed Datasets 1. RDD是弹性分布式数据集,是只读的分区记录集合。 2. 一个RDD就是一个不可改变的分布式集合对象,内部由许多partitions(分片)组成,每个 partition都包括一部分数据,这些partitions可以在集群的不同节点上计算 3. Partitions是Spark中的并行处理的单元。Spark顺序的,并行的处理partitions。 4. RDDs 是 Spark的分发数据和计算的基础抽象类,是Spark的核心概念。 5. RDD可以包含 Python, Java, 或者 Scala中的任何数据类型,包括用户自定义的类。 6. 在Spark中,所有的计算都是通过RDDs的创建,转换,操作完成的。 25 RDD的依赖关系 1. RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。 2. 能从其他RDD通过确定操作创建新的RDD的原因是RDD含有从其他RDD衍生(即计算) 出本RDD的相关信息(即Lineage) 3. Dependency代表了RDD之间的依赖关系,即血缘(Lineage),分为窄依赖和宽依赖。 宽依赖: • 指子RDD的分区依赖于父RDD的所有分 区,这是因为shuffle类操作要求所有 父分区可用。 • 比如groupByKey、reduceByKey、 sort 、partitionBy等; 窄依赖: • 一个父RDD最多被一个子RDD用 • 在一个集群节点上管道式执行。 • 比如map、filter、union等; 26 RDD的容错机制 **如果transformation操作中间发生计算失败 A> 运算是窄依赖 1. 只要把丢失的父RDD分区重算即可,跟其他节点没有依赖,这样可以大大加快场景恢 复的开销。 B> 运算是宽依赖 1. 需要父RDD的所有分区都存在, 重算代价就较高 C>增加检查点 1. 当Lineage特别长时或者有宽依赖时,主动调用 checkpoint把当前数据写入稳定存储, 作为检查点 27 Spark简介 Spark核心RDD Spark应用 Spark与Hadoop的区别与联系 Spark总体流程Spark总体流程 28 Spark与Hadoop的联系 spark是对MapReduce计算模型的 改进,可以说没有HDFS, MapReduce,就没有spark. Spark可以使用YARN作为它的集群管 理器,并且可以处理HDFS的数据。这 对于已经部署Hadoop集群的用户特 别重要,毕竟不需要做任何的数据迁 移就可以使用Spark的强大处理能力。 29 Spark与Hadoop的区别 MapRedcue由Map和Reduce两个阶段, 并通过shuffle将两个阶段连接起来的。 但是套用MapReduce模型解决问题,不得不将问题 分解为若干个有依赖关系的子问题,每个子问题对 应一个MapReduce作业,最终所有这些作业形成一 个DAG。 Spark是通用的DAG框架,可以将多个有 依赖关系的作业转换为一个大的DAG。 核心思想是将Map和Reduce两个操作进一步拆 分为多个元操作,这些元操作可以灵活组合,产 生新的操作,并经过一些控制程序组装后形成一 个大的DAG作业。 框 架 在DAG中,由于有多个MapReduce作业组 成,每个作业都会从HDFS上读取一次数据 和写一次数据(默认写三份),即使这些 MapReduce作业产生的数据是中间数据也 需要写HDFS。 这种表达作业依赖关系的方式比较低效,会浪费大 量不必要的磁盘和网络IO,根本原因是作业之间产 生的数据不是直接流动的,而是借助HDFS作为共享 数据存储系统。 在Spark中,使用内存(内存不够使用本 地磁盘)替代了使用HDFS存储中间结果 。 对于迭代运算效率更高。 中 间 结 果 存 储 方 式 Ps:中间结果是指reduce操作 后生成的结果 30 Spark与Hadoop的区别 Hadoop只提供了Map和Reduce两种操作 所有的作业都得转换成Map和Reduce的操作 Spark提供很多种的数据集操作类型 比如Transformations 包括map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues,sort,partionBy等多种操作 类型,还提供actions操作包括Count,collect, reduce, lookup, save等多种。 这些多种多样的数据集操作类型,给开发上层应用 的用户提供了方便。 操 作 模 型 Hadoop就是唯一的Data Shuffle一种模式 spark用户可以命名,物化,控制中间结果 的存储、分区等,编程方式更灵活 spark使用scala语言,更简洁高效  spark对机器学习算法,图计算能力有很 好的支持。 Hadoop对迭代计算效率低其 他 Hadoop Spark 离线大规模分析处理 Hadoop适用的场景基本上都适合 ( 在只有map操作或者只有一次reduce操作 的场景下,Spark比Hadoop的优势不明显) 对于迭代计算比Hadoop有更大的优势 编程 模型 应用 场景 Hadoop无法缓存数据集 spark的60%内存用来缓存RDD,对于缓存 后的rdd进行操作,节省IO,效率高缓存 PS:总的来说,Spark采用更 先进的架构,使得灵活性、易 用性、性能等方面都比Hadoop 更有优势,有取代Hadoop的趋 势,但其稳定性有待进一步提高。 31 Spark简介 Spark核心RDD Spark应用 Spark与Hadoop的区别与联系 Spark总体流程Spark总体流程 32 Spark的成功案例 •广点通是最早使用 Spark的应用之一。 •腾讯大数据精准推 荐借助Spark快速迭 代的优势,最终成 功应用于广点通 pCTR投放系统上, 支持每天上百亿的 请求量。 •使用Spark SQL,利 用其快速查询以及 内存表等优势,承 担了日志数据的即 席查询工作。在性 能方面,普遍比 Hive高2-10倍,如 果使用内存表的功 能,性能将会比 Hive快百倍。 Yahoo •Yahoo将Spark用在 Audience Expansion 中的应用 •Audience Expansion 是广告中寻找目标 用户的一种方法: 首先广告者提供一 些观看了广告并且 购买产品的样本客 户,据此进行学习 ,寻找更多可能转 化的用户,对他们 定向广告。 •Spark sql用于取代 商业BI/OLAP工具, 承担报表/仪表盘和 交互式/即席查询, 同时与桌面BI工具 对接。 淘宝 •淘宝技术团队使用 了Spark来解决多次 迭代的机器学习算 法、高计算复杂度 的算法等。将Spark 运用于淘宝的推荐 相关算法上。 •同时还利用Graphx 解决了许多生产问 题,包括以下计算 场景:基于度分布 的中枢节点发现、 基于最大连通图的 社区发现、基于三 角形计数的关系衡 量、基于随机游走 的用户属性传播等 。 优酷土豆 •目前Spark已经广泛 使用在优酷土豆的 视频推荐(图计算) 、广告业务等。 •通过实践发现Spark 性能比MapReduce 提升很多。首先, 交互查询响应快, 性能比Hadoop提高 若干倍;模拟广告投 放计算效率高、延 迟小(同hadoop比延 迟至少降低一个数 量级);机器学习、 图计算等迭代计算 ,大大减少了网络 传输、数据落地等 ,极大的提高的计 算性能。 腾讯 雅虎 淘宝 优土 33 Spark能做什么? 适用场景 • Spark是基于内存的迭代计算框架 ,适用于需要多次操作特定数据集 的应用场合。 • 需要反复操作的次数越多,所需读 取的数据量越大,受益越大,数据 量小但是计算密集度较大的场合, 受益就相对较小 • 由于RDD的特性,Spark不适用那 种异步细粒度更新状态的应用。 • 对于增量修改的应用模型不适合。 不适用场景 • 目前大数据在互联网公司主要把Spark应用在广告、报表、推荐系统等 业务上。 • 在广告业务方面需要大数据做应用分析、效果分析、定向优化等 • 在推荐系统方面则需要大数据优化相关排名、个性化推荐以及热点点击 分析等。 这些应用场景的普遍特点是计算量大、效率要求高。Spark恰恰满足了 这些要求。 PS:由于RDD的特性,对内存的要 求高,如果data size超过内存的 Size,速度就是大幅度下降, Spark不适用那种异步细粒度更 新状态的应用,例如web服务的 存储或者是增量的web爬虫和索 引。也就是说对于那种增量修改的 应用模型不适合。 总的来说Spark的适用面 比较广泛且比较通用。 34 Spark在移动网优测试结果 PS:该数据来源自移动 网络优化测试 35 Spark在移动网优测试结果分析 根据spark适合批量处理整个或大部分数据集的特点,重新设计数据模型 问题: 当前业务是从一张大表中筛选出满足指定时间条件的记录进行处理(从上亿条数据集中筛选出 几十万条记录后进行处理),spark会将整个大表读出来,然后筛选出满足要求的记录,按照 目前的实现方式,比较浪费IO损失性能,没有充分利用Spark的优势。 措施: 后续应该重新设计数据分布,按照汇总处理粒度存储文件,并周期性合并文件。如此设计可以 充分利用Spark的机制,提升性能。比如汇总小时级别的数据,就可以考虑1个小时一个文件 ,一天或者一周整合一下文件。 优化spark本身的配置参数 问题: 由于测试时间紧张,在默认配置下进行的测试,没有对Spark参数进行优化 措施: 根据集群的配置情况以及系统的负载情况对Spark参数进行优化,进一步提升系统性能 根据Spark适用于迭代场景的特点,重新设计业务处理流程和sql编写 问题: 原有的业务处理逻辑是根据数据库的特点,建立多张临时表,分级分步多次汇总完成最终的任 务,spark对中间过程的每步操作都看作一个job,没有使用到迭代的特性。 措施: 根据spark适用场景重新设计处理流程和sql编写,使得中间处理数据被迭代使用,提升效率 本次spark测试结果是在没有 修改原有处理逻辑的基础上进 行了spark的测试,提升了部 分性能 36 Spark总结  spark简介 什么是Spark,spark的特点及架构,spark的安装部署  spark流程 Spark端到端流程、Spark on Standalone流程及Spark on YARN流程  spark核心模块的实现 RDD、Scheduler、storage、shuffle等部分的原理及实现  spark与Hadoop的联系与区别 spark与Hadoop的联系以及在框架、中间结果存储方式、操作类型、编程模 型等方面进行比较其区别。  spark应用 spark的应用场景以及在互联网领域、网管领域的应用 372016-8-11 第一稿 c3gen 于 武汉 学习交流请加群 413409965

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档