当前位置: 首页 > 专利查询>湖南大学专利>正文

一种基于Spark的抗偏斜的数据分片方法技术

技术编号:19388920 阅读:34 留言:0更新日期:2018-11-10 02:02
本发明专利技术公开了一种基于Spark的抗偏斜的数据分片方法,包括:步骤A:获取预估的中间数据的键簇分布以及Spark应用类型,再基于获取的键簇分布生成与Spark应用类型相匹配的分片策略;键簇为键相同的键值对集合,分片策略包括分别与无需排序、需排序的应用类型相对应的基于键簇重分配的哈希算法策略和基于键簇分割的范围分片算法策略;步骤B:利用生成的分片策略计算出Map输出数据中每个键值对的reduce索引号,再基于reduce索引号的大小顺序将键值对依次写入中间数据文件中。通过上述方法解决了Spark本身的抗偏斜机制问题,解决现有的Hash方法和Range方法无法处理分片偏斜的问题。

An anti skew data fragmentation method based on Spark

The invention discloses an anti-skewed data fragmentation method based on Spark, which includes: step A: obtaining the predicted key cluster distribution of intermediate data and the Spark application type, and then generating a fragmentation strategy matching the Spark application type based on the obtained key cluster distribution; the key cluster is a set of key-value pairs with the same key, and the fragmentation strategy includes: Hash algorithm strategy based on key cluster reallocation and range partitioning algorithm strategy based on key cluster partitioning corresponding to application types without sorting and sorting respectively; Step B: Use the generated partitioning strategy to calculate the reduced index number of each key value pair in Map output data, and then base on the size order of reduced index number to key. The value pairs are written to the intermediate data file in turn. Through the above methods, the anti-deflection mechanism of Spark itself is solved, and the existing Hash and Range methods can not deal with the problem of piecewise deflection.

【技术实现步骤摘要】
一种基于Spark的抗偏斜的数据分片方法
本专利技术属于数据引擎
,具体涉及一种基于Spark的抗偏斜的数据分片方法。
技术介绍
作为一个快速的大数据处理通用引擎,Spark可以将大规模的数据切分成多个分片并且在集群中的多台机器分发运行任务来处理这些数据。Spark强大的计算能力得益于它先进的DAG运算引擎,其支持异步的数据流动和内存计算能力。Shuffle是划分DAG图中stage的依据,它是Spark进行数据处理的一个重要又复杂的过程。正是因为shuffle过程很好地连接了前后两个Stage的数据读写关系,才能使得多台机器协同处理数据。在这个过程中,每个Map任务输出的中间数据将会按键(key)重新分配到指定的redcue分片。如果不同reduce分片间的数据分布不平衡,这将导致一系列的问题:1)远程读取(fetch)数据的时间增加以及数据传输失败的可能性增大。Map任务通常将输出的中间数据存在本地节点,一个reduce任务执行时将需要从不同的节点读取数据。这意味着传输散落在不同节点的中间数据将耗费大量的通信时间,甚至引起传输数据失败。2)作业执行时间增加以及执行性能下降。重新分区难以保证分区间的数据平衡。当一些分区的数据远多于其他分区时,这个分区的执行时间将大大延长整个Stage的执行时间,从而影响作业的执行时间。为了处理数据偏斜的问题,目前的解决方案主要包括以下几个方面:提高数据本地性;减少通信代价;提高资源利用率;减轻分片偏斜。在上述方法中,最直接的方法是实现高效均衡的分片算法使得每个reduce分片数据量相近,因为分片负载不均衡是偏斜问题的根本原因。哈希分片算法(Hash)和范围分片算法(Range)是Spark框架的两种默认方法。Range方法主要用于处理需要排序的操作,而Hash方法则用于无需排序的其他操作。但是,两种分片算法都无法处理分片偏斜的问题。Hash方法仅根据key的哈希值计算键值对的分片索引,虽然简单快速,但这种方法对待分配数据的分布没有任何预先了解,没有任何抵御数据偏斜的能力。Range方法虽然将key按区间划分,但是,当存在高频key时,依然无法做出妥善的调节,无法抵御偏斜导致的问题。因此,Spark本身的抗偏斜机制并不完美,Hash方法需要偏斜预测和处理机制,Range方法需要键簇(keycluster)分割机制以加强偏斜处理能力。
技术实现思路
本专利技术的目的是提供一种基于Spark的抗偏斜的数据分片方法,解决Spark本身的抗偏斜机制问题,解决现有的Hash方法和Range方法无法处理分片偏斜的问题。本专利技术提供一种基于Spark的抗偏斜的数据分片方法,包括如下步骤:步骤A:获取预估的中间数据的键簇分布以及Spark应用类型,再基于获取的键簇分布生成与Spark应用类型相匹配的分片策略;其中,所述键簇为键相同的键值对集合,Spark应用类型包括无需排序的应用类型和需排序的应用类型,所述分片策略包括分别与无需排序、需排序的应用类型相对应的基于键簇重分配的哈希算法策略和基于键簇分割的范围分片算法策略;步骤B:利用生成的分片策略计算出Map输出数据中每个键值对的reduce索引号,再基于reduce索引号的大小顺序将键值对依次写入中间数据文件中,使得每个键值对存在对应的唯一reduce分片;其中,每个reduce索引号对应一个reduce分片,步骤B中计算出每个键值对的reduce索引号的过程为如下步骤a或步骤b:a:利用所述键簇重分配的哈希算法策略中的偏斜分片表和重分配策略表识别出Map输出数据中需采用哈希分片算法获取reduce索引号的键值对以及需利用重分配策略表获reduce索引号的键值对,并分别计算出reduce索引号;所述偏斜分片表包括偏斜分片的索引号,所述重分配策略表包括偏斜分片中待重分配键簇的键和所分配的分片的索引号;b:利用所述基于键簇分割的范围分片算法策略中的边界表获取Map输出数据中每个键值对的键与分界点的键的前后序列关系,再基于所述前后序列关系计算出每个键值对的reduce索引号;所述边界表包括分界点对应的键和分界点的权重,所述分界点是相邻两个分片的分割节点。Map输出数据中的键值对写入中间数据文件之前存在于内存中,因此可以获取预估的中间数据的键簇分布。本专利技术针对不同Spark应用类型生成了相匹配的分片策略,无需排序的应用类型对应了基于键簇重分配的哈希算法策略,需排序的应用类型对应了基于键簇分割的范围分片算法策略。其中,基于键簇重分配的哈希算法策略和基于键簇分割的范围分片算法策略均考虑分片上的负载均衡,基于键簇重分配的哈希算法策略中通过生成偏斜分片表和重分配策略表可以对预测的偏斜分片上的负载进行均衡处理,将部分键簇分配给其他分片,实现分片上的负载均衡;基于键簇分割的范围分片算法策略中通过边界表中的边界点对键簇进行合理分配分片。且由于所谓排序是指基于键簇的键进行排序,因此利用键值对的键与分界点的键的前后序列关系可知键值对与分界点的位置关系,再基于分界点是相邻分片的分割点,进而可以获知键值对所属的分片,即获取到reduce索引号,使得在实际shuffle阶段的读过程中,每个reduce任务,从中间数据文件中读取属于自己的数据,实现分片负载的均衡。应当说明,若同时存在多个中间节点,则存在多个中间数据文件,在将键值对写入中间数据文件时,不论写入哪个中间数据文件,键值对的reduce索引号均是依据本专利技术所述方法来确定的,每个键值对存在唯一对应的reduce分片,实现数据分片,进而使得每个reduce任务从对应中间节点的中间数据文件中读取属于自己的数据。进一步优选,生成基于键簇重分配的哈希算法策略的过程如下:步骤1:利用哈希分片算法给每个键簇分配索引号得到哈希分片,并计算每个哈希分片的权重以及哈希分片的权重均值;其中,同一索引号的键簇构成一个哈希分片;步骤2:基于每个哈希分片的权重预测偏斜分片,并将偏斜分片的索引号记录在偏斜分片表中;其中,哈希分片的权重超过偏斜阈值时,所述哈希分片为预测的偏斜分片;步骤3:将每个偏斜分片中的键簇划分至两个子集;其中,第一子集中的键簇保留在原偏斜分片中,第二子集中的键簇是待重新分配的;步骤4:采用First-Fit算法对每个偏斜分片的第二子集中键簇进行哈希分片的重新分配,并在重分配策略表中记录重分配的键簇的键以及所分配的哈希分片的索引号。索引号的计算方式为((key.hashcod+r)%r)。其中,key.hashcode表示键的哈希码,r表示reduce分片的数量,例如:索引号范围为0至r-1;每个哈希分片的权重为哈希分片中每个键簇的权重之和。键簇的权重是现有方法获取的,要获取键簇的权重,首先需要了解中间数据的键(key)频率。在现有的方法中,key频率可以通过多种方法获取。一种常见的方法是直接对中间数据进行采样,另一种方法是通过对输入数据进行采样来估计中间数据的分布。在设定键簇的权重时,可以基于不同的因素进行计算。在现有的方法中,最常见的方法是基于key频率,除此之外,也可以添加多种其他因素,比如基于任务工作量和数据本地性等多种因素。偏斜阈值P=Wavg*tol。Wavg为哈希分片的权重均值,tol为容忍度,容忍度本文档来自技高网
...

【技术保护点】
1.一种基于Spark的抗偏斜的数据分片方法,其特征在于:包括如下步骤:步骤A:获取预估的中间数据的键簇分布以及Spark应用类型,再基于获取的键簇分布生成与Spark应用类型相匹配的分片策略;其中,所述键簇为键相同的键值对集合,Spark应用类型包括无需排序的应用类型和需排序的应用类型,所述分片策略包括分别与无需排序、需排序的应用类型相对应的基于键簇重分配的哈希算法策略和基于键簇分割的范围分片算法策略;步骤B:利用生成的分片策略计算出Map输出数据中每个键值对的reduce索引号,再基于reduce索引号的大小顺序将键值对依次写入中间数据文件中,使得每个键值对存在对应的唯一reduce分片;其中,每个reduce索引号对应一个reduce分片,步骤B中计算出每个键值对的reduce索引号的过程为如下步骤a或步骤b:a:利用所述键簇重分配的哈希算法策略中的偏斜分片表和重分配策略表识别出Map输出数据中需采用哈希分片算法获取reduce索引号的键值对以及需利用重分配策略表获取reduce索引号的键值对,并分别计算出reduce索引号;所述偏斜分片表包括偏斜分片的索引号,所述重分配策略表包括偏斜分片中待重分配键簇的键和所分配的分片的索引号;b:利用所述基于键簇分割的范围分片算法策略中的边界表获取Map输出数据中每个键值对的键与分界点的键的前后序列关系,再基于所述前后序列关系计算出每个键值对的reduce索引号;所述边界表包括分界点对应的键和分界点的权重,所述分界点是相邻两个分片的分割节点。...

【技术特征摘要】
1.一种基于Spark的抗偏斜的数据分片方法,其特征在于:包括如下步骤:步骤A:获取预估的中间数据的键簇分布以及Spark应用类型,再基于获取的键簇分布生成与Spark应用类型相匹配的分片策略;其中,所述键簇为键相同的键值对集合,Spark应用类型包括无需排序的应用类型和需排序的应用类型,所述分片策略包括分别与无需排序、需排序的应用类型相对应的基于键簇重分配的哈希算法策略和基于键簇分割的范围分片算法策略;步骤B:利用生成的分片策略计算出Map输出数据中每个键值对的reduce索引号,再基于reduce索引号的大小顺序将键值对依次写入中间数据文件中,使得每个键值对存在对应的唯一reduce分片;其中,每个reduce索引号对应一个reduce分片,步骤B中计算出每个键值对的reduce索引号的过程为如下步骤a或步骤b:a:利用所述键簇重分配的哈希算法策略中的偏斜分片表和重分配策略表识别出Map输出数据中需采用哈希分片算法获取reduce索引号的键值对以及需利用重分配策略表获取reduce索引号的键值对,并分别计算出reduce索引号;所述偏斜分片表包括偏斜分片的索引号,所述重分配策略表包括偏斜分片中待重分配键簇的键和所分配的分片的索引号;b:利用所述基于键簇分割的范围分片算法策略中的边界表获取Map输出数据中每个键值对的键与分界点的键的前后序列关系,再基于所述前后序列关系计算出每个键值对的reduce索引号;所述边界表包括分界点对应的键和分界点的权重,所述分界点是相邻两个分片的分割节点。2.根据权利要求1所述的方法,其特征在于:生成基于键簇重分配的哈希算法策略的过程如下:步骤1:利用哈希分片算法给每个键簇分配索引号得到哈希分片,并计算每个哈希分片的权重以及哈希分片的权重均值;其中,同一索引号的键簇构成一个哈希分片;步骤2:基于每个哈希分片的权重预测偏斜分片,并将偏斜分片的索引号记录在偏斜分片表中;其中,哈希分片的权重超过偏斜阈值时,所述哈希分片为预测的偏斜分片;步骤3:将每个偏斜分片中的键簇划分至两个子集;其中,第一子集中的键簇保留在原偏斜分片中,第二子集中的键簇是待重新分配的;步骤4:采用First-Fit算法对每个偏斜分片的第二子集中键簇进行哈希分片的重新分配,并在重分配策略表中记录重分配的键簇的键以及所分配的哈希分片的索引号。3.根据权利要求2所述的方法,其特征在于:步骤B中利用基于键簇重分配的哈希算法策略计算出Map输出数据中每个键值对的reduce索引号的过程如下:步骤5:利用哈希分片算法计算Map输出数据中每个键值对的reduce索引号,并分别判断偏斜分片表中是否存在每个键值对的reduce索引号,若存在,执行步骤6;否则,对应键值对的reduce索引号不变;步骤6:查找重分配策略表中是否存在对应键值对的键,若存在,根据重分配策略表获取所述键值对应的索引号;若不存在,对应键值对的reduce索引号不变。4.根据权利要求2所述的方法,其特征在于:步骤3中将每个偏斜分片中的键簇划分为两个子集时均执行如下步骤:步骤3.1:将偏斜分片中的键簇按照权重大小进行降序排列,并获取偏斜分片的剩余空间值;步骤3.2:按照如下规则按序分配键簇直至偏斜分配中所有的键簇均分配完成;其中,步骤3.2的执行过程如下:C:按序获取一个键簇;D:判断键簇的权重是否小于或等于剩余空间值,若是,将所述键簇划分至第一子集中,并更新剩余空间值;否则,将键簇划分至第二子集中;E,按序获取下一个键簇并返回步骤D,直至偏斜分配中所有的键簇均分配完成;其中,步骤D中将当前剩余空间值减去当前划分至第一子集的键簇的权重得到更新的剩余空间值。5.根据权利要求2所述的方法,其特征在于:步骤3中第一子集和第二子集之间键簇的关系如下:式中,Wavg为哈希分片的权重均值,表示索引号为j的偏斜分片的第一子集,k表示第一子集中键为k的键簇,Ck表示键为k的键簇的权重,表示索引号为j的偏斜分片的第二子集,表示第二子集中键簇的最小权重。6.根据权利要求2所述的方法,其特征在于:步骤4中采用First-Fit算法对每个偏斜分配的第二子集中键簇进行哈希分片的重分配的过程如下:步骤4.1:将所有偏斜分配中第二子集的所有键簇按照权重大小降序排列,以及将所有哈希分片按照权重大小升序排列;步骤4.2:按序获取一个哈希分片,并判断获取的哈希分片的权重是否小于哈希分片的权重均值,若小于,执行步骤4.3;否则,执行步骤4.5;步骤4.3:计算获取的哈希分片的剩余空间值,并依据键簇排列按序处理待分配的键簇;其中,步骤4.3中依据键簇排列按序处理待分配...

【专利技术属性】
技术研发人员:吕葳唐卓李肯立李克勤付仲明肖伟
申请(专利权)人:湖南大学
类型:发明
国别省市:湖南,43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1