[发明专利]一种面向Spark并行计算框架的迭代式数据均衡优化方法在审
申请号: | 201710623289.6 | 申请日: | 2017-07-27 |
公开(公告)号: | CN107506388A | 公开(公告)日: | 2017-12-22 |
发明(设计)人: | 张元鸣;蒋建波;黄浪游;沈志鹏;项倩红;肖刚;陆佳炜;高飞 | 申请(专利权)人: | 浙江工业大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30;G06F9/50;G06F12/02 |
代理公司: | 杭州天正专利事务所有限公司33201 | 代理人: | 王兵,黄美娟 |
地址: | 310014 浙江省杭*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 spark 并行 计算 框架 迭代式 数据 均衡 优化 方法 | ||
1.一种面向Spark并行计算框架的迭代式数据均衡优化方法,包括以下步骤:
(1)创建微分区和微分区索引
(1.1)创建细粒度数据块
在Spark框架中,默认的数据处理单位是粗粒度数据块Block,如其大小一般设置为128M,对Block进一步细分,得到多个细粒度数据块(Fine-grained block,FG-Block),对这些FG-Block进行迭代处理;
(1.2)创建微分区
在Mapper阶段,对FG-Block转换处理之后得到的元组存储到缓存Buffer中,合并Key值相同的元组,合并之后的元组集合称为微分区,这是迭代分区的基本单位;
(1.3)创建微分区索引
根据微分区的Key值创建索引,索引是用于记录微分区将要被分配到哪个Reducer上的结构;
(1.4)设计Bucket结构
根据Reducer的数量创建出等量的Bucket,Reducer与Bucket具有一对一的依赖关系,将Bucket从逻辑上划分为多个Segment,每个Segment只能够存储一个微分区,将每次迭代得到的元组集合称为微分区迭代块,不同迭代块存储在Segment的Slot中,而多个微分区可以被分配到相同的Reducer上;
(1.5)创建微分区向量
将每次微分区的元组数量称为元组因子,在索引与元组因子、分配情况之间建立关联,创建一个记录索引及其元组因子、分配情况的微分区向量α:
α=(t1,t2,t3,…,tn),
其中ti=(index,factor,bno,sno)(i∈[1,n]),index为索引值,factor为元组因子,bno为Bucket的编号,sno为Segment的段号;
(2)确定迭代式数据分区的时机与数量
当Mapper对FG-Chunk处理完成,创建得到微分区的索引之后,开始进行本次迭代的数据分配,将分区的数量设置为Bucket的数量;
当某一个微分区的元组因子远大于其他微分区的元组因子时,将不对其进行拆分处理,该情况下通过另选属性作为Key进行分区处理;
(3)确定迭代式数据分区的准则
当微分区数量较多时,优先选择元组因子大的微分区,目的是将元组数量较多的微分区尽快的传输到依赖的Reducer上,并让元组数量较少的微分区稍后传输,使得有效计算与数据传输能重叠执行,并有助于减少Bucket占用的存储空间;
按照以上方法,将根据元组因子对尚未分配的微分区进行倒排,然后选择前面的若干个微分区分配到Reducer上;
(4)记录局部与全局的数据分配情况
(4.1)记录局部数据分配情况
微分区向量α记录了一个Mapper当前迭代轮次上所有微分区的元组因子向量,通过该向量描述该Mapper当前迭代的数据分区情况;
(4.2)记录全局数据分配情况
将每个Mapper上的α中对应的分量进行累加得到全局的数据分布,用二维向量AM表示:
AM=Σαs(s∈[1,m])
每次Mapper迭代结束时,将微分区向量α发送给Master,然后将α累加到二维向量AM中,即可得到截至当前迭代轮次全局的数据分布情况;
由于Reducer与Bucket是一对一的,因此各个Reducer上分配的元组数量可以通过统计各个Bucket上元组数量得到,定义一个数据分配向量AB:
AB=(B1,B2,B3,…,Bb)
其中Br=(f1,f2,f3,…,fn)(r∈[1,b]),该向量用于记录每个微分区在Bucket中的分配情况:每一行表示一个Bucket,每一行包含的元素代表着分配到该Bucket上微分区的索引值;
通过累加向量AB的每一行的索引因子对应的元组因子得到各个Bucket已被分配的元组总数;
(5)设计数据均衡分区算法
数据均衡分区算法的任务是在未来数据分布情况未知的情况下,根据已经分配到各个Bucket的微分区及其元组数量,将当前迭代所选择的p个微分区分配给b个Bucket,并使分配后的Bucket的数据量尽可能平衡;
数据分配的实现算法如下:
步骤a1:累加FG-Block的微分区向量α得到AM;
步骤a2:对AM中的未分配的微分区从大到小排序;
步骤a3:根据已分配的数据对Bucket从小到大排序;
步骤a4:取出AM的前面p个未分配的微分区,将其分配给前b个Bucket;
步骤a5:如果存在下一个FG-Block,则结束;否则,转步骤a6;
步骤a6:根据已分配的数据对Bucket从小到大排序;
步骤a7:取出AM的前面p个未分配的微分区,将其分配给前b个Bucket;
步骤a8:如果AM中存在未分配的微分区,则转步骤a6;否则,结束;
按照以上过程对细分得到的多个细粒度数据块FG-Block进行迭代处理,使得分配到各个Reducer上的数据均衡达到最优化,减少数据倾斜,提高Spark的数据处理性能。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江工业大学,未经浙江工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710623289.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种互联网大数据匹配方法
- 下一篇:一种提取职位技能需求的方法和装置