您好,欢迎访问三七文档
深入浅出Spark2015年8月研究院王凤2目录Spark简介核心模块的实现Spark应用Spark与Hadoop的区别与联系Spark总体流程Spark应用库3大数据的电花火石Spark简介什么是SparkApacheSpark™isafastandgeneralengineforlarge-scaledataprocessingSpark是UCBerkeleyAMPLab开发的是一种计算框架,分布式资源工作交由集群管理软件(Mesos、YARN)aMapReduce-likeclustercomputingframeworkdesignedforlow-latencyiterativejobsandinteractiveusefromaninterpreter4Spark简介Spark的发展历程Spark代码贡献者每个月的增长曲线•2009:Spark诞生于伯克利大学AMPLab•2010:开源•2013.6:Apache孵化器项目•2014.2:Apache顶级项目•目前为止,发布的最新版本为Spark1.4.1Spark在最近6年内发展迅速,相较于其他大数据平台或框架而言,Spark的代码库最为活跃。截止2015年6月•Spark的Contributor比2014年涨了3倍,达到730人;•总代码行数也比2014年涨了2倍多,达到40万行•Spark应用也越来越广泛,最大的集群来自腾讯——8000个节点,单个Job最大分别是阿里巴巴和Databricks——1PB5Spark特点Spark简介LogisticregressioninHadoopandSpark高效•提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。•与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快100倍;而基于硬盘的运算也要快10倍!易用•Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。•Spark支持Java,Python和ScalaAPI,支持交互式的Python和Scala的shell。与Hadoop无缝衔接•Spark可以使用YARN作为它的集群管理器•读取HDFS,HBase等一切Hadoop的数据先进架构•Spark采用Scala语言编写,底层采用了actormodel的akka作为通讯框架,代码十分简洁高效。•基于DAG图的执行引擎,减少多次计算之间中间结果写到Hdfs的开销。•建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的大数据处理场景。提供整体解决方案•以其RDD模型的强大表现能力,逐渐形成了一套自己的生态圈,提供了full-stack的解决方案。•主要包括Spark内存中批处理,SparkSQL交互式查询,SparkStreaming流式计算,GraphX和MLlib提供的常用图计算和机器学习算法。OneStacktorulethemall6Spark整体架构Spark简介SparkSQLSparkStreamingGraphX(graph)MLlib(machinelearning)MesosYARNS3SparkStandalone存储层资源调度层计算层工具层CassandraHbase…TachyonHDFS•Spark提供了多种高级工具:SharkSQL应用于即席查询(Ad-hocquery)、SparkStreaming应用于流式计算、MLlib应用于机器学习、GraphX应用于图处理。•Spark可以基于自带的standalone集群管理器独立运行,也可以部署在ApacheMesos和HadoopYARN等集群管理器上运行。•Spark可以访问存储在HDFS、Hbase、Cassandra、AmazonS3、本地文件系统等等上的数据,Spark支持文本文件,序列文件,以及任何Hadoop的InputFormat。7目录Spark简介核心模块的实现Spark应用Spark与Hadoop的区别与联系Spark总体流程Spark应用库8Spark组件•DriverProgram(驱动程序)是Spark的核心组件构建SparkContext(Spark应用的入口,它负责和整个集群的交互,创建需要的变量,还包含集群的配置信息等)将用户提交的job转换为DAG图(类似数据处理的流程图)根据策略将DAG图划分为多个stage,根据分区从而生成一系列tasks根据tasks要求向资源管理器申请资源提交任务并检测任务状态•Executor真正执行task的单元,一个WorkerNode上可以有多个ExecutorSpark任务•应用程序:由一个driverprogram和多个job构成;•job:由多个stage组成;•stage:对应一个taskset,•taskset:对应一组关联的相互之间没有shuffle依赖关系的task组成。•task:任务最小的工作单元资源管理组件•YARN(通用)Master/Slave结构ResourceManager(RM)全局的资源管理器,负责系统的资源管理和分配NodeManager(NM)每个节点上的资源和任务管理器ApplicationMaster(AM)每个应用程序都有一个,负责任务的调度和监视,并与RM调度器协商为任务获取资源。•Standalone(Spark自带)Master/Slave结构Master类似于YARN的RMWorker类似于YARN的NMSpark核心概念Spark任务提供多层分解的概念,Spark组件将用户的应用程序分解为内部执行任务并提供执行容器,资源管理为spark组件提供资源管理和调度。HDFSInput1Input2stage2stage3TaskJobstage19Spark端到端流程整体流程•Spark的DriverProgram(简称Driver)包含用户的应用程序•Driver完成task的解析和生成•Driver向ClusterManager(集群资源管理器)申请运行task需要的资源。•集群资源管理器为task分配满足要求的节点,并在节点按照要求创建Executor•创建的Executor向Driver注册。•Driver将spark应用程序的代码和文件传送给分配的executor•executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质。Spark流程DriveProgram10Driver运行在ClientDriver运行在Worker执行流程描述:1.客户端把作业发布到Master2.Master让一个Worker启动Driver,并将作业推送给Driver3.Driver进程生成一系列task4.Driver向Master申请资源5.Master让调度的Worker启动Exeuctor6.Exeuctor启动后向Driver注册。7.Driver将task调度到Exeuctor执行。8.Executor执行结果写入文件或返回Driver执行流程描述:1..客户端启动后直接运行用户程序,启动Driver2.Driver进程生成一系列task3.Driver向Master申请资源4.Master让调度的Worker启动Exeuctor5.Exeuctor启动后向Driver注册。6.Driver将task调度到Exeuctor执行。7.Executor执行结果写入文件或返回DriverSparkonStandaloneSpark流程Master和Worker是standalone的角色,Driver和Executor是Spark的角色。Master负责分配资源,分配Driver和Executor,让Worker启动driver和executor,只管理到executor层,不涉及任务;Driver负责生成task,并与executor通信,进行任务的调度和结果跟踪,不涉及资源。11SparkonYARNYarnClientYarnClusterDriver运行在AM(ApplicationMaster):1.客户端把作业发布到YARN2.RM为该job在某个NM上分配一个AM,NM启动AppMaster,AppMaster启动Driver。3.AM启动后完成初始化作业。Driver生成一系列Task。4.AM向RM申请资源,RM返回Executor信息。5.AM通过RPC启动相应的SparkExecutor。6.Driver向Executor分配task。7.Executor执行结果写入文件或返回DriverDriver运行在Cleint:1..客户端启动后直接运行用户程序,直接启动Driver。2.Driver初始化并生成一系列Task3.客户端将AppCommands发布到YARN。4.RM为该job在某个NM上分配一个AM。5.AM向RM申请资源,RM返回Executor信息。6.AM通过RPC启动相应的SparkExecutor。7.Exeuctor启动后向Driver注册。8.Driver向Executor分配task。9.Executor执行结果写入文件或返回DriverSpark流程与Standalone类似,不过YARN架构更通用,可以在同一集群部署Hadoop、Spark等。RM、NM和AM是YARN的角色,Driver和Executor是Spark的角色。RM负责资源分配,分配AppMaster和Executor;AM负责向RM申请资源,启动Driver和启动ExecutorDriver负责task的生成,task的调度和结果跟踪12目录Spark简介核心模块的实现Spark应用Spark与Hadoop的区别与联系Spark总体流程Spark应用库13核心模块核心模块的实现Spark的关键运算组件Spark的核心组件包括RDD、Scheduler、Storage、Shuffle四部分:RDD是Spark最核心最精髓的部分,spark将所有数据都抽象成RDD。Scheduler是Spark的调度机制,分为DAGScheduler和TaskScheduler。Storage模块主要管理缓存后的RDD、shuffle中间结果数据和broadcast数据Shuffle分为Hash方式和Sort方式,两种方式的shuffle中间数据都写本地盘14核心模块——RDD整体介绍RDDsarefault-tolerant,paralleldatastructuresthatletusersexplicitlypersistintermediateresultsinmemory,controltheirpartitioningtooptimizedataplacement,andmanipulatethemusingarichsetofoperators.ResilientDistributedDatasetsRDD是Spark的基石,也是Spark的灵魂。RDD是弹性分布式数据集,是只读的分区记录集合。每个RDD有5个主要的属性:一组分片(Partition):数据集的最基本组成单位一个计算每个分片的函数:对于给定的数据集,需要做哪些计算依赖(Dependencies):RDD的依赖关系,描述了RDD之间的lineagepreferredLocations(可选):对于datapartition的位置偏好partitioner(可选)--对于计算出来的数据结果如何分发rdd1=sparkContext.textFile(“hdfs://…”)•rdd1是一个MappedRDD,该RDD是从外部文件创建的。•可以传入分片个数参数,否则采用defaultMinPartitions。rdd2=rdd1.filter(_.startsWith(“
本文标题:深入浅出spark
链接地址:https://www.777doc.com/doc-1227203 .html