Spark Shuffle原理及源码解析.docx
《Spark Shuffle原理及源码解析.docx》由会员分享,可在线阅读,更多相关《Spark Shuffle原理及源码解析.docx(32页珍藏版)》请在第一文库网上搜索。
1、SparkShuff1e原理及源码解析Shuff1e的产生在Spark作业中当父RDD与子RDD的分区对应关系为多对多或者一对多的情况下会发生宽依赖,也即一个父RDD的分区需要分发到多个子RDD所在的任务中去执行,这种情况就会涉及数据的重新分布,也即产生了ShUffIe。Spark算子是否引入ShUff1e与各算子的具体实现有关,本质上是要看父子RDD的分区器的实现是否相同,例如:在执行聚合类算子reduceByKey时判断是否会引入shuff1e,需要分析父子rdd的分区器partitioner是否一致,如果不一致则创建一个ShUffIeRDD作为子RDD从而产生shuff1e:CrOatC
2、Combinor:二(,BiergeCombiners:(C,C)=C,seria1izer:SeriaiiZer二nu11)(imp1icitct:C1aSSTa1I)*:、)M二二,!i()*)h()IJ;.:一,IInewInterrUPtib1e1terator(Context,aggregator,combiI:1.,,:,-:I,Idr1,!:,-:,;:I.I7MUid:工1;O;,:1II11.,:111类似的再以join算子的实现为例,在CoGroupedRDD的getDependencies方法中遍历所有的父rdd,如果父rdd和子rdd的分区器一致则创建OneToOneD
3、ependency,否则创建Shuff1eDependency并引入shuff1e:MerridedefgetDependencies:SeqDependency_=rdds.maprdd:RDD=IiJ.:小:IogDebUg(AddingShUffIedependencyWith+rdd),newShUffIeDePendCneyK,Any,COGrOu1)CoInbinCrrdd.asInstanceOfRDD_:Product2K,_,part,ShUff1e文件的生成我们首先来看ShUffIe的第一个阶段:ShUffIeWrite阶段。通过SPark任务调度原理的讲解,我们知道在创建
4、taskset的过程中,如果当前的Stage是Shuff1eMapStage,则创建的任务类型为Shuff1eMapTask,否则task的类型为Resu1tTask,两种类型的TaSk均实现了runTask方法;如果发生了ShUffIe则执行Shuff1eMapTask实现的runTask方法,即根据rdd、dependencymapId等信息调用Shuff1ewriteProcessor的write方法执行shuff1e数据的写入:Va1rdd=rddAndDep.Va1dep=rddAndDep.N/WhiIeWeUSetheO1dShUff1efetchPrOtoCo1邛eUSePaI
5、deP.Shuff1eWriterProcessor,write(rdd,dep,map1d,context,Partit选择Shuff1eWriter在Shuff1ewriteProcessor的write方法中首先通过Shuff1eManager获取writer实例,然后再由相应的writer执行具体的write逻辑:IefWritedep:Shuff1eDependencyI1,_,pur1i()n:,;.):,:,【Varwriter:ShUffIeWriterAny,Any二nu11,Va1Inanager=SparkEnv.get.Shuff1eManageijmmjj1,;:,r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Spark Shuffle原理及源码解析 Shuffle 原理 源码 解析