saprk

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一简介Spark是一个高效的分布式计算系统,发源于美国加州大学伯克利分校AMPLab的集群计算平台。Spark立足于内存计算,相比HadoopMapReduce,Spark在性能上要高100倍,而且Spark提供了比Hadoop更上层的API,同样的算法在Spark中实现往往只有Hadoop的1/10或者1/100的长度。Spark基于mapreduce算法模式实现的分布式计算,拥有HadoopMapReduce所具有的优点;但不同于HadoopMapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS目前Spark在全球已有广泛的应用,其中包括阿里巴巴、Cloudera、Databricks、IBM、Intel、雅虎等。Spark自2013年6月进入Apache的孵化器以来,已经有来自25个组织的120多位开发者参与贡献。二与Hadoop对比1,Spark的中间数据放到内存中,一次创建数据集,可以多次迭代运算,减少了IO的开销,对于迭代运算效率更高。2,Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。3,Spark比Hadoop更通用。4,Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map,filter,flatMap,sample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort,partionBy等多种操作类型,允许多种计算模型(包含map-reduce)。5,对机器学习算法,图计算能力有很好的支持。二.1运算模型对比(1)传统Hadoop数据抽取运算模型数据的抽取运算基于磁盘,中间结果也是存储在磁盘上。MR运算伴随着大量的磁盘IO。二.1运算模型对比(2)Spark则使用内存代替了传统HDFS存储中间结果简述:第一代的Hadoop完全使用Hdfs存储中间结果,第二带的Hadoop加入了cache来保存中间结果。而Spark则基于内存的中间数据集存储。可以将Spark理解为Hadoop的升级版本,Spark兼容了Hadoop的API,并且能够读取Hadoop的数据文件格式,包括HDFS,Hbase等。二适用场景Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。例如:(1)迭代算法,包括大部分机器学习算法MachineLearning和比如PageRank的图形算法。(2)交互式数据挖掘,用户大部分情况都会大量重复的使用导入RAM的数据(R、Excel、python)(3)需要持续长时间维护状态聚合的流式计算。三运行模式目前ApacheSpark支持四种分布式部署方式,分别是standalone、sparkonmesos和sparkonYARN、Sparkoncloudstandalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。Spark在standalone模式下单点故障问题是借助zookeeper实现的,思想类似于Hbasemaster单点故障解决方案。SparkOnMesos模式,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。在SparkOnMesos环境中,用户可选择两种调度模式之一运行自己的应用程序,粗粒度模式(Coarse-grainedMode)和细粒度模式(Fine-grainedMode)。SparkOnYARN模式。这是一种最有前景的部署模式。但限于YARN自身的发展,目前仅支持粗粒度模式(Coarse-grainedMode)。SparkOncloud模式。比如AWS的EC2,使用这种模式,方便的访问Amazon的S3三运行模式Spark的几种运行模式local本地模式常用于本地开发测试,本地还分为local和local-clusterstandalone集群模式典型的Master/Slave模式,不过也能看出Master是有单点故障的,Spark支持Zookeeper来实现HAOnYARN集群模式运行在Yarn资源管理器框架之上,由Yarn负责资源管理,Spark负责任务调度和计算OnMesos集群模式运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算Oncloud集群模式比如Aws的EC2,使用这个模式能很方便地访问Amazon的S3;Spark支持多种分布式存储系统,hdfs和S3、hbase等三运行模式总之,这四种分布式部署方式各有利弊,通常需要根据公司情况决定采用哪种方案。进行方案选择时,往往要考虑公司的技术路线(采用Hadoop生态系统还是其他生态系统)、服务器资源(资源有限的话就不要考虑standalone模式了)、相关技术人才储备等。四架构组成四架构组成(1)Bagel(pregelonspark):Bagel是基于Spark的轻量级的Pregel(Pregel是Google鼎鼎有名的图计算框架)的实现。(2)Shark(HiveonSpark):Shark基本上就是在Spark的框架基础上提供和Hive一样的HiveQL命令接口。可以理解为SharkOnSpark,就是HiveOnHadoop,两者地位是一样的。ps:Shark可以通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析功能结合在一起(最大化RDD的重复使用)。(3)Streaming(Spark):SparkStreaming是构建在Spark上的处理实时数据的框架。其基本原理是将Stream数据分成小的时间片段(几秒),以类似batch批处理的方式来处理小部分数据。四架构组成(4)RDD(ResilientDistributedDataset,弹性分布式数据集):RDD是Spark操纵数据的一个高度抽象,即Spark所操作的数据集都是包装成RDD来进行操作的,例如Spark可以兼容处理Hadoop的HDFS数据文件,那么这个HDFS数据文件就是包装成Spark认识的RDD来完成数据抽取和处理的。RDD的一个英文定义是:RDDsarefault-tolerant,paralleldatastructuresthatletusersexplicitlypersistintermediateresultsinmemory,controltheirpartitioningtooptimizedataplacement,andmanipulatethemusingarichsetofoperators.用我RDD是一个能够让用户可以准确的将中间结果数据持久化到内存中的一个可用错的并行数据结构,可以控制(RDD数据集)分区,优化数据存储,并且有一组丰富的操作集可以操作这份数据。RDD是Spark的一个核心抽象,Spark的数据操作都是基于RDD来完成。四架构组成(5)MapReduce:MR是Spark可以支撑的运算模式,比传统的HadoopMR的性能更好,并且操作集更加丰富。Spark的MR计算引擎的架构图:四架构组成(6)Spark的运行模式:apacheMesos和YARN计算两套资源管理框架,Spark最初设计就是跑在这两个资源管理框架之上的,至于Spark的本地运行模式和独立运行模式则是方便了调试。YARN资源管理框架也是Hadoop2.0的产物,大大优化了传统Hadoop通过JobTracker和TaskTracker来调度计算任务的方式,使集群更加平台化,可以部署多种计算引擎,比如传统的HadoopMR和Spark都可以跑在同一个集群上,YARN这类资源管理框架出现之前是做不到的。(7)Spark数据的存储:Spark支持多种数据底层存储,这点比Hadoop支持的数据文件格式广泛的多。Spark可以兼容HDFS,Hbase,AmazonS3等多种数据集,将这些数据集封装成RDD进行操作。五集群运行方式六核心RDDRDD:是Spark的最基本抽象,是对分布式内存的抽象使用,实现了以操作本地集合的方式来操作分布式数据集的抽象实现。RDD是Spark最核心的东西,它表示已被分区,不可变的并能够被并行操作的数据集合,不同的数据集格式对应不同的RDD实现。RDD必须是可序列化的。RDD可以cache到内存中,每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。这对于迭代运算比较常见的机器学习算法,交互式数据挖掘来说,效率提升比较大。RDD的特点:1.它是在集群节点上的不可变的、已分区的集合对象。2.通过并行转换的方式来创建如(map,filter,join,etc)。3.失败自动重建。4.可以控制存储级别(内存、磁盘等)来进行重用。5.必须是可序列化的。6.是静态类型的。六核心RDDRDD的特点(1):Ø创建:只能通过转换(transformation,如map/filter/groupBy/join等,区别于动作action)从两种数据源中创建RDD:1)稳定存储中的数据;2)其他RDD。Ø只读:状态不可变,不能修改Ø分区:支持使RDD中的元素根据那个key来分区(partitioning),保存到多个结点上。还原时只会重新计算丢失分区的数据,而不会影响整个系统。Ø路径:在RDD中叫世族或血统(lineage),即RDD有充足的信息关于它是如何从其他RDD产生而来的。六核心RDDRDD的特点(2):Ø持久化:支持将会·被重用的RDD缓存(如in-memory或溢出到磁盘)Ø延迟计算:像DryadLINQ一样,Spark也会延迟计算RDD,使其能够将转换管道化(pipelinetransformation)Ø操作:丰富的动作(action),count/reduce/collect/save等。关于转换(transformation)与动作(action)的区别,前者会生成新的RDD,而后者只是将RDD上某项操作的结果返回给程序,而不会生成新的RDD;无论执行了多少次transformation操作,RDD都不会真正执行运算(记录lineage),只有当action操作被执行时,运算才会触发。六核心RDDRDD的好处1.RDD只能从持久存储或通过Transformations操作产生,相比于分布式共享内存(DSM)可以更高效实现容错,对于丢失部分数据分区只需根据它的lineage就可重新计算出来,而不需要做特定的Checkpoint。2.RDD的不变性,可以实现类HadoopMapReduce的推测式执行。3.RDD的数据分区特性,可以通过数据的本地性来提高性能,这与HadoopMapReduce是一样的。4.RDD都是可序列化的,在内存不足时可自动降级为磁盘存储,把RDD存储于磁盘上,这时性能会有大的下降但不会差于现在的MapReduce。六核心RDDRDD表现形式每个RDD都包含五部分信息,即数据分区的集合,能根据本地性快速访问到数据的偏好位置,依赖关系,计算方法,是否是哈希/范围分区的元数据:分区、最佳位置、依赖、函数、分区策略:六核心RDDRDD工作原理RDD是如何运行的呢?总高层次来看,主要分为三步:创建RDD对象,DAG调度器创建执行计划,Task调度器分配任务并调度Worker开始运行。六核心RDDRDD工作原理以下面一个按A-Z首字母分类,查找相同首字母下不同姓名总个数的例子来看一下RDD是如何运行起来的。详细运行步骤如下:步骤1:创建RDD。上面的例子除去最后一个collect是个动作,不会创建RDD之外,前面四

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功