最新Spark学习技术重点资料.docx
- 文档编号:11400136
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:12
- 大小:571.45KB
最新Spark学习技术重点资料.docx
《最新Spark学习技术重点资料.docx》由会员分享,可在线阅读,更多相关《最新Spark学习技术重点资料.docx(12页珍藏版)》请在冰豆网上搜索。
最新Spark学习技术重点资料
Spark学习大纲
1.Spark简介
Spark是加州大学伯克利分校AMP实验室(Algorithms,Machines,andPeopleLab)开发通用内存并行计算框架。
Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处,Spark以其先进的设计理念,迅速成为社区的热门项目,围绕着Spark推出了SparkSQL、SparkStreaming、MLLib和GraphX等组件,也就是BDAS(伯克利数据分析栈),这些组件逐渐形成大数据处理一站式解决平台。
从各方面报道来看Spark抱负并非池鱼,而是希望替代Hadoop在大数据中的地位,成为大数据处理的主流标准,不过Spark还没有太多大项目的检验,离这个目标还有很大路要走。
Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala提供一个称为Actor的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:
SharedNothing模型)。
它具有运行速度快、易用性好、通用性强和随处运行等特点。
2.Spark术语
1.1RDD
全称为ResilientDistributedDataset,弹性分布式数据集。
就是分布在集群节点上的数据集,这些集合可以用来进行各种操作。
最重要的一点是,某个操作计算后的数据集可以缓存在内存中,然后给其他计算使用,这种在迭代计算中很常见。
比如:
我们可以从hdfs文件里创建一个数据集,然后经过filter后,会生成一个新的数据集,还可以进行groupby,map函数等操作,得到另一个数据集。
1.2Partition
分片,是RDD的最基本组成单位,与Task一一对应。
1.3迭代
是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。
每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
1.4DAG
有向无环图,将作业分解成若干个阶段,每个阶段都是由若干个task组成,而这些阶段都是有先后顺序的,故将这些阶段组织成DAG,来表示其先后顺序。
1.5Job
作业,即指应用完成某项需求所需要一系列工作,统一称为作业。
1.6Stage
阶段,是指job中的一个结点
1.7Taskset
每个阶段将由若干个task组成,这些task统一称为taskset,与Stage一一对应。
1.8Task
Task是指最终在slave结点上运行的工作。
1.9NarrowDependency
窄依赖,是指childRDD只依赖于parentRDD(s)固定数量的partition。
1.10WideDependency
宽依赖,是指childRDD的每一个partition都依赖于parentRDD(s)所有partition。
1.11Shuffle
Shuffle的本义是洗牌、混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好。
MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据。
3.Spark核心概念
Spark的核心组件包括RDD、Scheduler、Storage、Shuffle四部分:
(1)RDD是Spark最核心最精髓的部分,spark将所有数据都抽象成RDD
(2)Scheduler是Spark的调度机制,分为DAGScheduler和TaskScheduler
(3)Storage模块主要管理缓存后的RDD、shuffle中间结果数据和broadcast数据
(4)Shuffle分为Hash方式和Sort方式,两种方式的shuffle中间数据都写本地盘
3.1RDD
3.1.1基本概念
每个RDD有3个主要的属性:
(1)一组分片(Partition):
数据集的最基本组成单位
(2)一个计算每个分片的函数:
对于给定的数据集,需要做哪些计算
(3)依赖(Dependencies):
RDD的依赖关系,描述了RDD之间的lineage,即血缘,分为窄依赖和宽依赖。
RDD支持2种类型的操作:
转换(transformations):
从已经存在的数据集中创建一个新的数据集
动作(actions):
在数据集上进行计算之后返回一个值到驱动程序
例如,map是一个转换操作,它将每一个数据集元素传递给一个函数并且返回一个新的RDD。
另一方面,reduce是一个动作,它使用相同的函数来聚合RDD的所有元素,并且将最终的结果返回到驱动程序。
(图1)常用函数
根据RDD依赖关系的不同,Spark将每一个job分为不同的stage,stage之间的依赖关系形成了DAG图,窄依赖Spark将其尽量划分在同一个stage中,因为它们可以进行流水线计算,宽依赖往往意味着shuffle操作,这也是Spark划分stage的主要边界。
(图2)stage划分
(1)一个Stage的开始就是从外部存储或者shuffle结果中读取数据;一个Stage的结束就是发生shuffle或者生成结果时。
(2)由于rddF是rddG的宽依赖,所以将F与G分别划分到不同的stage,但是B是G的窄依赖(B的每个分区只被使用一次),所以B与G还保持在一个stage。
(3)由于rddA是rddB的宽依赖,所以A和B划分在不同的stage。
(4)在图中Stage2中,从map到union都是窄依赖,在一个stage,这两步操作可以形成一个流水线操作,通过map操作生成的partition可以不用等待整个RDD计算结束,而是继续进行union操作,这样大大提高了计算的效率。
3.1.2RDD工作原理
以下面一个按A-Z首字母分类,查找相同首字母不同姓名总个数的例子来看看RDD如何运行起来的:
详细运行步骤如下:
步骤1:
创建RDD。
上述例子当中是从hdfs获取文件产生RDD,除去最后一步collect之外,其他四步都产生新的RDD。
因此首先一步是创建RDD。
步骤2:
创建执行计划。
Spark会尽可能的管道化,并基于是否需要重新组织数据来划分(stage),例如本例中groupByKey转换就会将整个job划分为两个阶段执行。
最终会产生一个DAG(有向无环图)作为执行计划。
步骤3:
调度任务。
将各阶段划分成不同的任务(task),每个任务都是数据和计算的合体。
在进行下一阶段任务的计算之前,当前阶段的所有任务的都必须执行完成。
因为下一阶段的第一个转换一定是重新组织数据,所以必须等待当前所有阶段的数据计算出来之后才能继续进行。
3.2Scheduler
Scheduler模块分为两大主要部分,DAGScheduler和TaskScheduler。
DAGScheduler:
把一个spark作业转换成成stage的DAG(DirectedAcyclicGraph有向无环图),根据RDD和stage之间的关系,找出开销最小的调度方法,然后把stage以TaskSet的形式提交给TaskScheduler。
TaskScheduler:
用于与DAGScheduler交互,负责任务的具体调度和运行。
Scheduler的具体流程如下:
区别于yarn,Mesos等外部资源调度管理工具,DAGscheduler和TASKscheduler被称为内部调度器。
3.3Shuffle
Shuffle的本义是洗牌、混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好。
MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据。
400-500元1326%类MapReduce计算框架一般包括两个重要的阶段:
Map是映射,负责数据的过滤分发;Reduce是规约,负责数据的计算归并。
Reduce的数据来源于Map,Map的输出即是Reduce的输入,Reduce需要通过Shuffle来获取数据。
从Map输出到Reduce输入的整个过程可以广义地称为Shuffle。
3.www。
oh/ov。
com/teach/student/shougong/Shuffle是MapReduce框架中的一个特定的phase,介于Mapphase和Reducephase之间,当Map的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。
由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。
下面这幅图清晰地描述了MapReduce算法的整个流程,其中shufflephase是介于Mapphase和Reducephase之间。
图1-2大学生购买手工艺品可接受价位分布
附件
(二):
就算你买手工艺品来送给朋友也是一份意义非凡的绝佳礼品哦。
而这一份礼物于在工艺品店买的现成的礼品相比,就有价值意义,虽然它的成本比较低但它毕竟它是你花心血花时间去完成的。
就像现在最流行的针织围巾,为何会如此深得人心,更有人称它为温暖牌绝大部分多是因为这个原因哦。
而且还可以锻炼你的动手能力,不仅实用还有很大的装饰功用哦。
Spark中需要Shuffle输出的每个Map任务会为每个Reduce创建对应的bucket,Map产生的结果会根据设置的partitioner得到对应的bucketId,然后填充到相应的bucket中去。
每个Map的输出结果可能包含所有的Reduce所需要的数据,所以每个Map会创建R个bucket(R是reduce的个数),M个Map总共会创建M*R个bucket。
Map创建的bucket其实对应磁盘上的一个文件,Map的结果写到每个bucket中其实就是写到那个磁盘文件中,这个文件也被称为blockFile,是DiskBlockManager管理器通过文件名的Hash值对应到本地目录的子目录中创建的。
这种方式一个问题就是Shuffle文件过多。
针对上述Shuffle过程产生的文件过多问题,Spark有另外一种改进的Shuffle过程:
consolidationShuffle,以期显著减少Shuffle文件的数量。
在consolidationShuffle中每个bucket并非对应一个文件,而是对应文件中的一个segment部分。
Job的map在某个节点上第一次执行,为每个reduce创建bucket对应的输出文件,把这些文件组织成ShuffleFileGroup,当这次map执行完之后,这个ShuffleFileGroup可以释放为下次循环利用;当又有map在这个节点上执行时,不需要创建新的bucket文件,而是在上次的ShuffleFileGroup中取得已经创建的文件继续追加写一个segment;当前次map还没执行完,ShuffleFileGroup还没有释放,这时如果有新的map在这个节点上执行,无法循环利用这个ShuffleFileGroup,而是只能创建新的bucket文件组成新的ShuffleFileGroup来写输出。
(3)个性体现比如一个Job有3个Map和2个reduce:
(1)如果此时集群有3个节点有空槽,每个节点空闲了一个core,则3个Map会调度到这3个节点上执行,每个Map都会创建2个Shuffle文件,总共创建6个Shuffle文件;
(2)如果此时集群有2个节点有空槽,每个节点空闲了一个core,则2个Map先调度到这2个节点上执行,每个Map都会创建2个Shuffle文件,然后其中一个节点执行完Map之后又调度执行另一个Map,则这个Map不会创建新的Shuffle文件,而是把结果输出追加到之前Map创建的Shuffle文件中;总共创建4个Shuffle文件;(3)如果此时集群有2个节点有空槽,一个节点有2个空core一个节点有1个空core,则一个节点调度2个Map一个节点调度1个Map,调度2个Map的节点上,一个Map创建了Shuffle文件,后面的Map还是会创建新的Shuffle文件,因为上一个Map还正在写,它创建的ShuffleFileGroup还没有释放;总共创建6个Shuffle文件。
送人□有实用价值□装饰□
通过上面的介绍,我们了解到,Shuffle过程的主要存储介质是磁盘,尽量的减少IO是Shuffle的主要优化方向。
我们脑海中都有那个经典的存储金字塔体系,Shuffle过程为什么把结果都放在磁盘上,那是因为现在内存再大也大不过磁盘,内存就那么大,还这么多张嘴吃,当然是分配给最需要的了。
如果具有“土豪”内存节点,减少ShuffleIO的最有效方式无疑是尽量把数据放在内存中。
4.Spark生态圈
4.1
4.24、宏观营销环境分析SparkSQL和HiveonSpark
Hive是目前大数据领域,事实上的SQL标准。
其底层默认是基于MapReduce实现的,但是由于MapReduce速度实在比较慢,因此这两年,陆续出来了新的SQL查询引擎。
包括SparkSQL,HiveOnTez,HiveOnSpark等。
SparkSQL与HiveOnSpark是不一样的。
SparkSQL是Spark自己研发出来的针对各种数据源,包括Hive、JSON、Parquet、JDBC、RDD等都可以执行查询的,一套基于Spark计算引擎的查询引擎。
因此它是Spark的一个项目,只不过提供了针对Hive执行查询的功能而已。
适合在一些使用Spark技术栈的大数据应用类系统中使用。
而HiveOnSpark,是Hive的一个项目,它是指,不通过MapReduce作为唯一的查询引擎,而是将Spark作为底层的查询引擎。
HiveOnSpark,只适用于Hive。
在可预见的未来,很有可能Hive默认的底层引擎就从MapReduce切换为Spark了。
适合于将原有的Hive数据仓库以及数据统计分析替换为Spark引擎,作为全公司通用的大数据统计分析引擎。
4.3Streaming
2、消费者分析SparkStreaming是将流式计算分解成一系列短小的批处理作业。
这里的批处理引擎是SparkCore,也就是把SparkStreaming的输入数据按照batchsize(如1秒)分成一段一段的数据(DiscretizedStream),每一段数据都转换成Spark中的RDD(ResilientDistributedDataset),然后将SparkStreaming中对DStream的Transformation操作变为针对Spark中对RDD的Transformation操作,将RDD经过操作变成中间结果保存在内存中。
整个流式计算根据业务的需求可以对中间的结果进行叠加或者存储到外部设备。
4.4Graph
SparkGraphX是一个分布式图处理框架,SparkGraphX基于Spark平台提供对图计算和图挖掘简洁易用的而丰富多彩的接口,极大的方便了大家对分布式图处理的需求。
大家都知道,社交网络中人与人之间有很多关系链,例如Twitter、Facebook、微博、微信,这些都是大数据产生的地方,都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理,SparkGraphX由于底层是基于Spark来处理的,所以天然就是一个分布式的图处理系统。
图的分布式或者并行处理其实是把这张图拆分成很多的子图,然后我们分别对这些子图进行计算,计算的时候可以分别迭代进行分阶段的计算,即对图进行并行计算。
4.5
4.69、如果你亲戚朋友送你一件DIY手工艺制品你是否会喜欢?
ML
机器学习是从已经存在的数据进行学习来对将来进行数据预测,它是基于输入数据集创建模型做数据驱动决策。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 Spark 学习 技术 重点 资料