CN110069502A - 基于Spark架构的数据均衡分区方法及计算机存储介质 - Google Patents
基于Spark架构的数据均衡分区方法及计算机存储介质 Download PDFInfo
- Publication number
- CN110069502A CN110069502A CN201910333549.5A CN201910333549A CN110069502A CN 110069502 A CN110069502 A CN 110069502A CN 201910333549 A CN201910333549 A CN 201910333549A CN 110069502 A CN110069502 A CN 110069502A
- Authority
- CN
- China
- Prior art keywords
- data
- partition
- key assignments
- shuffle
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/484—Precedence
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种基于Spark架构的数据均衡分区方法及计算机存储介质,本方法首先获取应用程序执行过程中的Shuffle中间数据对应的键值分布信息,然后分析Shuffle中间数据分区特性,构建Shuffle中间数据均衡分区模型,最后利用所述的键值分布信息和Spark数据均衡分区算法对均衡分区模型求解,得到Shuffle中间数据分区策略。本发明能够有效避免Shuffle中间数据的倾斜分区,从而进一步提高任务的执行速度,提高Spark的执行性能。
Description
技术领域
本发明涉及一种数据均衡分区方法及计算机存储介质,特别是涉及一种基于Spark架构的数据均衡分区方法及计算机存储介质。
背景技术
随着大数据时代的到来,企业、政府机关,科研机构等每天产生的数据量是可观的。Spark作为一种基于内存的大数据处理的计算框架,其越来越受到企业和科研机构的关注。在Spark计算模型中,弹性分布式数据集(Resilient Distributed DataSets,RDD)作为其核心,其基本组成元素称为数据分区Partition。Spark在执行一个Job过程中,会首先为该Job生成一个有向无环图(Directed Acyclic Graph,DAG)来记录所进行的操作,其中Job的提交执行由Spark中的Action类算子触发,如count和collect等。其次,在任务执行时,其对应的DAG图会根据RDD间的依赖关系被划分成若干个Stage,同一个Stage中的RDD之间的依赖关系均为窄依赖,连接两个Stage的RDD之间的依赖关系为宽依赖。在Spark中,宽依赖将会引发Shuffle操作并且Shuffle操作会被划分成Shuffle Write和Shuffle Read两个阶段分别在两个Stage中顺序执行。其中Shuffle Write阶段输出中间数据并根据数据分区算法对Shuffle中间数据进行预分区,Shuffle Read阶段等待Shuffle Write阶段完成后拉取Shuffle中间数据并生成对应的Partition。
在Shuffle Write阶段中,Shuffle Map Task输出的中间数据可以看作是一个待分配的簇集合。在后续的操作中,Shuffle中间数据对应的簇集合将根据分区规则进行预分配,也即确定好每个簇对应的Reducer,其中同一个Reducer处理的簇集合构成一个Partition。由于Spark属于整体同步并行计算模型(Bulk Synchronous Parallel,BSP),因此在任务执行过程中,保证Partition数据量的均衡性是至关重要的。在Spark Shuffle过程中,中间数据如何进行分区是由当前所采用的数据分区算法决定的,目前Spark中已有的数据分区算法包括HashPartition(基于哈希散列的数据分区算法)以及RangePartition(基于范围划分的数据分区算法),其中HashPartition根据键值的哈希值尽量在各个分区之间均衡分配数据,保证每个分区键值的数量大致相等。该数据分区算法简单易实现,但是当键值散列性较差或者存在某些键值对应的键值对数量较多时,将容易引起数据分区倾斜问题;RangePartition采用基于范围的数据分区方法,该数据分区算法虽然在一定程度上缓解了HashPartition带来的数据分区不均衡问题,但是其分区性能依赖于抽样规模和键之间的排序规则,仍然容易引起分区倾斜问题。
发明内容
发明目的:本发明要解决的技术问题是提供一种基于Spark架构的数据均衡分区方法及计算机存储介质,解决了Spark现有的数据分区算法容易引发分区倾斜从而降低了Spark的执行效率的问题,能有效实现Spark Shuffle阶段中间数据的均衡分区从而提高Spark的计算效率。
技术方案:本发明所述的基于Spark架构的数据均衡分区方法,包括以下步骤:
(1)获取应用程序执行过程中的Shuffle中间数据对应的键值分布信息;
(2)分析Shuffle中间数据分区特性,构建Shuffle中间数据均衡分区模型;
(3)利用步骤(1)中所述的键值分布信息和Spark数据均衡分区算法对步骤(2)中的均衡分区模型求解,得到Shuffle中间数据分区策略。
进一步的,步骤(1)中的获取方法包括:
若存在历史键值对数据信息,在应用程序执行前进行聚合,统计出每个键值对应的键值对数目,获取所述的键值分布信息;
若不存在历史键值对数据信息,使用抽样算法在各个计算节点进行水塘抽样,抽样完成后将本地抽样数据聚合后的结果发送给主控制进程进行整体聚合。
进一步的,所述的抽样算法的步骤为:
(1)指定需要抽取的键值对数量,计算待抽样数据中的每个Partition应该抽取的数据量,应该抽取的数据量为所述键值对数量与分区数的比值;
(2)采取水塘抽样方法在各计算节点中进行局部抽样并且记录已抽样的Partition中包含的数据量,抽样规模为每个Partition应该抽取的数据量;
(3)主控制进程汇总每个计算节点的局部抽样信息以及Partition中包含的数据量,最终估计数据的整体分布。
进一步的,所述Shuffle中间数据均衡分区模型为:在Shuffle中间数据分区策略f下,使得分区倾斜度RT(f)为最小,
其中,n为Shuffle Read阶段包含Reducer的个数,Rj为第j个Reducer,TN(Rj,f)为Rj处理的键值对数目,TNmean(f)为每个Partition平均包含的键值对数目,
m为Shuffle中间数据包含不相同键值的数目,为键值Ki对应的键值对数目,f(Ki)=Rj表示在Shuffle中间数据分区策略f下键值Ki分配给Rj,
进一步的,步骤(3)中的求解步骤为:
(1)将所述键值分布信息构建成Cluster集合,Cluster集合表示包含相同键值的键值对集合,并对Cluster集合按照包含的数据量进行递减排序,对当前的Reducer按照包含数据量的大小构建成最小堆reducerHeap;
(2)从所述Cluster集合中顺序取出Cluster,分配给reducerHeap堆顶对应的Reducer,分配完成后更新reducerHeap;循环进行本步骤,直至所述Cluster集合中的Cluster全部被分配;
(3)判断当前待分区的键值是否在Cluster集合中,如果在则返回该键值所对应的数据分区标识,如果不在则用哈希算法计算该键值所对应的数据分区标识。
本发明所述的计算机存储介质,其上存储有计算机程序,所述计算机程序在被计算机处理器执行时实现上述任一项所述的方法。
有益效果:本发明能够有效避免Shuffle中间数据的倾斜分区,从而进一步提高任务的执行速度,提高Spark的执行性能。
附图说明
图1是本方法的整体流程图;
图2是抽样流程示意图;
图3是水塘抽样示意图;
图4是Shuffle中间数据分配模型示意图;
图5是List-Scheduling任务调度问题示意图;
图6是不同数据倾斜度下各分区算法对应的分区倾斜度示意图;
图7是不同数据倾斜度下各数据分区算法对应的应用执行时间示意图。
具体实施方式
如图1,实施例的方法流程具体包括以下内容。
(一)对数据进行预处理,目的是获取应用程序执行过程中的Shuffle中间数据对应的键值分布信息。Shuffle为Spark中的计算过程,这个过程会产生Shuffle中间数据。获取Spark Shuffle中间数据的键值分布信息的获取方式分为以下两种:
(1)存在历史数据:若存在应用执行过程中的诸如(K,V)形式的历史键值对数据信息,此时可以在应用程序执行前进行一次聚合,即统计出每个键值对应的键值对数目,进而获取应用执行过程中的Shuffle中间数据对应的键值分布信息,其中K表示键值,V表示该键值对应的值。
(2)不存在历史数据:在这种情形下,需要抽取一定量的数据来拟合Shuffle中间数据的键值分布信息。为了获得较好的数据拟合效果并且进一步减少由于数据抽样所带来的额外开销,本专利提出在分布式情况下的局部抽样全局汇总的抽样算法,抽样流程示意图如图2所示,其中Driver表示Spark应用程序中的主控制进程,Worker表示计算节点。
抽样算法具体执行过程描述如下:
(1)输入参数中指定需要抽取的键值对数量sampleSize,若指定的键值对数量多于原始数据量,此时原始数据将作为样本。根据设置的样本容量sampleSize计算待抽样数据中的每个Partition应该抽取的数据量sampleSizePerPartition,抽取的数据量越大,数据拟合程度越好,带来的时间开销也越大。
(2)在各计算节点中进行局部抽样并且记录已抽样的Partition中包含的数据量。具体采用的抽样方法是水塘抽样,抽样规模为sampleSizePerPartition。水塘抽样算法适用于在未知整体数据量的情况下,等概率地从中抽取指定量的数据,水塘抽样示意图如图3所示。在本地抽样过程中,各计算节点完成本地数据抽样后进行数据聚合,并将聚合结果{(Ki,Si),…,(Kj,Sj),…}以及{(Pi,Ti),…,(Pj,Tj),…}通过消息通信发送到Driver端,其中(Ki,Si)表示键值Ki包含的键值对个数为Si,(Pj,Tj)表示Partition Pj包含的键值对数量为Tj。
(3)Driver端汇总每个计算节点的局部抽样信息以及Partition数据量,最终估计数据的整体分布,如采样数据中键值K1对应的键值对数目为C1,采样数据包含的键值对数目为Csample,通过累加各Partition中包含的键值对数目得到原始数据中的整体键值对数目为Ctotal,从而估计得到原始数据中包含键值K1的键值对数目为:C1/Csample*Ctotal。
根据以上所述,抽样算法描述如下所示。该抽样算法在各个计算节点局部进行水塘抽样,抽样完成后,再将本地抽样数据聚合后的结果发送给Driver端再进行整体聚合,其中涉及的网络传输数据量很少,抽样速度较快。
抽样算法的伪代码如下所示:
Input:待抽RDD rdd,rdd中包含的分区数N,抽样的键值对数目sampleSize
Output:键值及其包含的键值对数目的二元组集合
1:procedure SAMPLE(rdd,N,sampleSize)
//计算每个数据分区的抽样容量
2:sampleSizePerPartition←sampleSize/N
//各个计算节点进行本地数据抽样并且在本地对抽样数据进行聚合,然后通过
//网络传输方式将抽样数据返回给Driver端
3:(partitionSizeMap,sampleData)←SAMPLE(sampleSizePerPartition)
//Driver端进行整体数据的聚合,获得整体数据量
4:(totalSize,countMap)←AGGREGATION(partitionSizeMap,sampleData)
//根据整体数据量以及抽样数据量来估计数据的整体分布
5:estimateCountMap←ESTIMATE(totalSize,sampleSize,countMap)
6:return estimateCountMap
7:end procedure
(二)分析Shuffle中间数据分区特性,构建Shuffle中间数据均衡分区模型。
Shuffle Write阶段输出的中间数据包含m个不相同的键值,键值集合记为K={K1,K2,...,Km},键值Ki对应的键值对数目记为Ki包含的值集合记为Shuffle Read阶段包含n个Reducer,Reducer集合记为R={R1,R2,...,Rn},则对于Shuffle Write阶段中输出的中间数据可形式化表示为:
在进行Shuffle中间数据分配操作时,包含相同键值的键值对会分配给同一个Reducer,从而最终分配在同一个Partition中,为了描述Shuffle中间数据的分配模型,引入以下定义:
定义1.Cluster。包含相同键值的键值对集合定义为一个Cluster,则键值Ki对应的Cluster为输出的中间数据则可表示为IR={C1,C2,...,Cm}。
定义2.Shuffle中间数据分区策略。一个数据分区策略可以看作为一个函数f:K→R,即存放键值Ki对应的Cluster的Reducer为f(Ki)。对于任意的一个键值Ki∈K,f(Ki)是唯一的。
在经过Shuffle Write阶段的处理后,Shuffle中间数据可以看作是待分配的Cluster集合,每个Cluster根据分区策略分配到对应的Reducer中。由定义2可知,对于任意的一个Cluster,其对应分配的Reducer是唯一的,也即Cluster在分配过程中不可被分割。Shuffle阶段中间数据的分配按照图4来进行描述。
为了实现Shuffle阶段中间数据的均衡分区,需要使得Shuffle Write阶段的预分配中,各个Reducer拉取的数据量达到均衡。为了衡量数据分区策略的分区性能,引入以下定义:
定义3.均衡分区数据量。在Shuffle中间数据分区策略f下,Reducer Rj处理的键值对数目记为TN(Rj,f),每个Reducer处理的数据最终会形成对应的数据分区Partition。对于产生的每个Partition,其平均包含的键值对数目记为TNmean(f)。
其中f(Ki)=Rj表示在Shuffle中间数据分区策略f下,键值Ki分配给Reducer Rj。
定义4:分区倾斜度。分区倾斜度用于衡量各个数据分区间包含数据量的倾斜程度,分区倾斜度越小,则表示数据分区间包含的数据量越均衡,分区效果越好。在Shuffle中间数据分区策略f下,记为RT(f)。其中:
综上所述,为了实现Shuffle中间数据的均衡分区,需要找到一个Shuffle中间数据分区策略来最小化分区倾斜度,因此以Reducer倾斜度度来构造Shuffle中间数据均衡分区模型:
目标方程:
(三)利用键值分布信息和Spark数据均衡分区算法对Shuffle中间数据均衡分区模型求解,得到Shuffle中间数据分区策略。
如何分配Shuffle中间数据来最小化分区倾斜度是一个NP难问题,其并没有多项式时间的精确算法。通过进一步分析Shuffle过程中的数据分区特性,本文将Shuffle中间数据均衡分区问题转化为List-Scheduling任务调度问题来进行求解,首先引入List-Scheduling任务调度问题。
List-Scheduling任务调度问题是经典的优化任务调度来实现计算节点间的负载均衡问题,该问题可按照图5进行描述:给定m个任务{J1,J2,…,Jm},n个计算节点{W1,W2,…,Wn}。对于任意一个任务Ji,其处理时间为ti>0并且只能由一个计算节点进行处理,每个计算节点在一个时间段内最多只能处理一个任务,最终需要求得一个任务分配策略使得整体任务的完成时间最短。在该问题中,多个计算节点之间可以并行地执行任务,因此为了使得整体任务的执行时间达到最短,需要合理调度任务使得计算节点之间达到负载均衡。在解决List-Scheduling任务调度问题时,其主要思想是采用LPT(Longest Processing Time)规则。在该规则下,具有最长执行时间的任务将会被优先调度到当前工作负载最小的计算节点当中,采用此方法虽然难以保证得到一个最优解,但是其最终解与最优解的比值已被证明不会超过4/3,LPT规则下的List-Scheduling任务调度算法如下所述。List-Scheduling任务调度算法的伪代码为:
Input:任务集合J={j1,j2,…,jm},每个任务的处理时间集合T={t1,t2,...,tm}
计算节点集合W={w1,w2,…,wn},计算节点初始负载集合L={l1,l2,...,ln}
Output:任务分配策略S
为了基于Shuffle中间数据均衡分区模型得到一种均衡的Shuffle中间数据分区策略,通过将Shuffle中间数据的均衡分区问题转化为List-Scheduling任务调度问题,进而提出本发明的数据均衡分区算法,简称为BalancePartition数据均衡分区算法。在将Shuffle中间数据的均衡分区问题转化为List-Scheduling任务调度问题时,待分配的Cluster集合可以看作List-Scheduling任务调度问题中的待分配任务集合,每个Cluster包含的键值对数目对应每个任务的处理时间,每个Reducer可以看作计算节点,Reducer中包含的数据量则对应计算节点执行任务所花费的时间并且两者均满足累加性。在大数据处理环境下,需要快速地完成Spark Shuffle中间数据的分配,虽然采用LPT规则求解无法保证得到最优解,但是其思想实现起来简单快速,能在一个较短的时间内得到一个较优解。因此本发明基于List-Scheduling任务调度问题中的LPT规则设计出BalancePartition数据均衡分区算法,该算法的具体执行步骤如下所述:
(1)根据数据预处理模块来获取获取Shuffle中间数据的键值分布信息。将Shuffle中间数据中的键值分布信息构建成Cluster集合并对Cluster集合按照包含的数据量进行递减排序,对当前的Reducer按照包含数据量的大小构建成小顶堆reducerHeap。
(2)顺序取出已排序的Cluster集合中的Cluster cj,reducerHeap堆顶对应的Reducer ri,将cj分配给ri。每次分配完成后,更新reducerHeap。
(3)迭代执行步骤c直至所有的Cluster全部被分配,得到一种均衡的Shuffle中间数据分区策略f。BalancePartition数据均衡分区算法如下面伪代码所示。
(4)对于当前待分区的键值Key,若其在Shuffle中间分区策略f中,则直接返回该键值对应的数据分区标识f(Key),否则利用哈希算法进行计算,并将分区结果写入f中。
BalancePartition数据均衡分区算法的伪代码为:
Input:键值对<Key,Value>,分区数量N,键值分布keyDistribution,
抽样数据量sampleSize,待抽样RDDrdd
Output:键值对<Key,Value>所在分区标识
为了验证本发明的有效性,设计了与目前Spark中已有的两种数据分区算法HashPartition和RangePartition以及SCIDPartition数据分区算法的对比试验。下面的实验是在拥有1个主节点10个计算结点的Spark Standalone集群环境下进行的,其中每个结点的硬件配置是2.7GHz 8核的CPU和64GB内存。使用TPC-D标准测试工具生成了符合Zipf分布的不同数据倾斜度的测试数据。
图6为在10G数据倾斜度从0.1到1.0之间变化的符合Zipf分布的TPC-D测试数据下,HashPartition、RangePartition,SCIDPartition以及本发明所述的BalancePartition四种数据分区算法在基准测试程序中的分区倾斜度下的实验结果对比。分析实验结果可知,Spark中已有的两种数据分区算法HashPartition和RangePartition对应的分区倾斜度明显大于数据分区算法BalancePartition以及SCIDPartition。随着数据倾斜度的增大,数据分区算法HashPartition和RangePartition对应的分区倾斜度增长较为迅速,而数据分区算法SCIDPartition和BalancePartition虽然随着数据倾斜度的增长,其对应的分区倾斜度也在增长,但是增长速度较为平缓,分区性能较优。相比于SCIDPartition,BalancePartition在数据倾斜度小于0.6时,其对应的分区倾斜度与SCIDPartition基本持平;而当数据倾斜度大于0.6时,BalancePartition的均衡分区效果不如SCIDPartition,这是由于SCIDPartition采用的是均衡分割算法,这种方式虽然能保证较优的数据均衡分区,但是该策略会将相同键值对应的键值对数据分布在不同的Partition中从而会带来一次额外的Shuffle操作,拖慢应用执行速度。
图7为在10G数据倾斜度从0.1到1.0之间变化的符合Zipf分布的TPC-D测试数据下,HashPartition、RangePartition,SCIDPartition以及BalancePartition四种数据分区算法在基准测试程序中的应用完成时间下的对比。分析实验结果可知,在数据倾斜度小于0.3时,数据分区算法HashPartition的执行时间相对于另外三种数据分区算法较短,这是由于另外三种数据分区算法需要进行数据采样从而带来了额外的开销。HashPartition采用基于哈希散列的方式来进行数据分区,当数据倾斜度不断增大时,HashPartition造成的分区倾斜性也越来越大,从而使得HashPatition数据分区算法的执行时间也越来越长。RangePartition的执行时间虽然在数据倾斜度不断增大时较优于HashPartition,但是其带来的应用执行时间也是不容忽视的。对于SCIDPatition和BalancePartition而言,虽然SCIDPatition采用均衡分割思想在分区均衡性方面较优于BalancePartition,然而由于其将相同的键值对应的键值对数据分散在不同的数据分区中,对于groupByKey或者join等操作会带来额外的Shuffle操作,从而导致应用执行时间也显著增大。BalancePartition虽然在分区均衡方面略差于SCIDPartition,但是其采用整体法分配的思想避免了额外的Shuffle操作从而应用执行时间较短。
本实施例的方法如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read Only Memory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本发明实例不限制于任何特定的硬件和软件结合。
相应的,本发明的实施例还提供了一种计算机存储介质,其上存储有计算机程序。当所述计算机程序由处理器执行时,可以实现前述基于Spark架构的数据均衡分区方法。例如,该计算机存储介质为计算机可读存储介质。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
Claims (6)
1.一种基于Spark架构的数据均衡分区方法,其特征在于,包括以下步骤:
(1)获取应用程序执行过程中的Shuffle中间数据对应的键值分布信息;
(2)分析Shuffle中间数据分区特性,构建Shuffle中间数据均衡分区模型;
(3)利用步骤(1)中所述的键值分布信息和Spark数据均衡分区算法对步骤(2)中的均衡分区模型求解,得到Shuffle中间数据分区策略。
2.根据权利要求1所述的基于Spark架构的数据均衡分区方法,其特征在于步骤(1)中的获取方法包括:
若存在历史键值对数据信息,在应用程序执行前进行聚合,统计出每个键值对应的键值对数目,获取所述的键值分布信息;
若不存在历史键值对数据信息,使用抽样算法在各个计算节点进行水塘抽样,抽样完成后将本地抽样数据聚合后的结果发送给主控制进程进行整体聚合。
3.根据权利要求2所述的基于Spark架构的数据均衡分区方法,其特征在于所述的抽样算法的步骤为:
(1)指定需要抽取的键值对数量,计算待抽样数据中的每个Partition应该抽取的数据量,应该抽取的数据量为所述键值对数量与分区数的比值;
(2)采取水塘抽样方法在各计算节点中进行局部抽样并且记录已抽样的Partition中包含的数据量,抽样规模为每个Partition应该抽取的数据量;
(3)主控制进程汇总每个计算节点的局部抽样信息以及Partition中包含的数据量,最终估计数据的整体分布。
4.根据权利要求1所述的基于Spark架构的数据均衡分区方法,其特征在于所述Shuffle中间数据均衡分区模型为:在Shuffle中间数据分区策略f下,使得分区倾斜度RT(f)为最小,
其中,n为Shuffle Read阶段包含Reducer的个数,Rj为第j个Reducer,TN(Rj,f)为Rj处理的键值对数目,TNmean(f)为每个Partition平均包含的键值对数目,
m为Shuffle中间数据包含不相同键值的数目,为键值Ki对应的键值对数目,f(Ki)=Rj表示在Shuffle中间数据分区策略f下,键值Ki分配给Rj,
5.根据权利要求1所述的基于Spark架构的数据均衡分区方法,其特征在于步骤(3)中的求解步骤为:
(1)将所述键值分布信息构建成Cluster集合,Cluster表示包含相同键值的键值对集合,并对Cluster集合按照包含的数据量进行非递增排序,对当前的Reducer集合按照包含数据量的大小构建成最小堆reducerHeap;
(2)从所述Cluster集合中顺序取出Cluster,分配给reducerHeap堆顶对应的Reducer,分配完成后更新reducerHeap;循环进行本步骤,直至所述Cluster集合中的Cluster全部被分配;
(3)判断当前待分区的键值是否在Cluster集合中,如果在则返回该键值所对应的数据分区标识,如果不在则用哈希算法计算该键值所对应的数据分区标识。
6.一种计算机存储介质,其上存储有计算机程序,其特征在于:所述计算机程序在被计算机处理器执行时实现权利要求1至5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910333549.5A CN110069502A (zh) | 2019-04-24 | 2019-04-24 | 基于Spark架构的数据均衡分区方法及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910333549.5A CN110069502A (zh) | 2019-04-24 | 2019-04-24 | 基于Spark架构的数据均衡分区方法及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110069502A true CN110069502A (zh) | 2019-07-30 |
Family
ID=67368755
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910333549.5A Pending CN110069502A (zh) | 2019-04-24 | 2019-04-24 | 基于Spark架构的数据均衡分区方法及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110069502A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502505A (zh) * | 2019-08-29 | 2019-11-26 | 中国农业银行股份有限公司 | 一种数据迁移方法及装置 |
CN110502471A (zh) * | 2019-07-31 | 2019-11-26 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN110673794A (zh) * | 2019-09-18 | 2020-01-10 | 中兴通讯股份有限公司 | 分布式数据的均衡处理方法、装置、计算终端和存储介质 |
CN111382335A (zh) * | 2020-03-19 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 一种数据拉取方法、装置及存储介质 |
CN111753016A (zh) * | 2020-06-28 | 2020-10-09 | 深圳前海微众银行股份有限公司 | 数据处理方法、装置、系统及计算机可读存储介质 |
CN113420066A (zh) * | 2021-06-18 | 2021-09-21 | 南京苏同科技有限公司 | 一种基于并行关联规则的优化方法 |
CN113495679A (zh) * | 2020-04-01 | 2021-10-12 | 孟彤 | 基于非易失存储介质的大数据存储访问与处理的优化方法 |
CN116561171A (zh) * | 2023-07-10 | 2023-08-08 | 浙江邦盛科技股份有限公司 | 一种倾斜数据双时序分布处理方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799486A (zh) * | 2012-06-18 | 2012-11-28 | 北京大学 | 一种MapReduce系统中的数据采样和划分方法 |
CN108572873A (zh) * | 2018-04-24 | 2018-09-25 | 中国科学院重庆绿色智能技术研究院 | 一种解决Spark数据倾斜问题的负载均衡方法及装置 |
-
2019
- 2019-04-24 CN CN201910333549.5A patent/CN110069502A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799486A (zh) * | 2012-06-18 | 2012-11-28 | 北京大学 | 一种MapReduce系统中的数据采样和划分方法 |
CN108572873A (zh) * | 2018-04-24 | 2018-09-25 | 中国科学院重庆绿色智能技术研究院 | 一种解决Spark数据倾斜问题的负载均衡方法及装置 |
Non-Patent Citations (1)
Title |
---|
GUIPENG LIU等: "SP-Partitioner: A novel partition method to handle intermediate data skew in spark streaming", 《ELSEVIER》 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110502471A (zh) * | 2019-07-31 | 2019-11-26 | 联想(北京)有限公司 | 一种数据处理方法及电子设备 |
CN110502505A (zh) * | 2019-08-29 | 2019-11-26 | 中国农业银行股份有限公司 | 一种数据迁移方法及装置 |
CN110673794B (zh) * | 2019-09-18 | 2021-12-17 | 中兴通讯股份有限公司 | 分布式数据的均衡处理方法、装置、计算终端和存储介质 |
CN110673794A (zh) * | 2019-09-18 | 2020-01-10 | 中兴通讯股份有限公司 | 分布式数据的均衡处理方法、装置、计算终端和存储介质 |
WO2021052169A1 (zh) * | 2019-09-18 | 2021-03-25 | 中兴通讯股份有限公司 | 分布式数据的均衡处理方法、装置、计算终端和存储介质 |
CN111382335A (zh) * | 2020-03-19 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 一种数据拉取方法、装置及存储介质 |
CN111382335B (zh) * | 2020-03-19 | 2023-03-17 | 腾讯科技(深圳)有限公司 | 一种数据拉取方法、装置及存储介质 |
CN113495679B (zh) * | 2020-04-01 | 2022-10-21 | 北京大学 | 基于非易失存储介质的大数据存储访问与处理的优化方法 |
CN113495679A (zh) * | 2020-04-01 | 2021-10-12 | 孟彤 | 基于非易失存储介质的大数据存储访问与处理的优化方法 |
CN111753016A (zh) * | 2020-06-28 | 2020-10-09 | 深圳前海微众银行股份有限公司 | 数据处理方法、装置、系统及计算机可读存储介质 |
CN111753016B (zh) * | 2020-06-28 | 2024-06-04 | 深圳前海微众银行股份有限公司 | 数据处理方法、装置、系统及计算机可读存储介质 |
CN113420066A (zh) * | 2021-06-18 | 2021-09-21 | 南京苏同科技有限公司 | 一种基于并行关联规则的优化方法 |
CN116561171A (zh) * | 2023-07-10 | 2023-08-08 | 浙江邦盛科技股份有限公司 | 一种倾斜数据双时序分布处理方法、装置、设备及介质 |
CN116561171B (zh) * | 2023-07-10 | 2023-09-15 | 浙江邦盛科技股份有限公司 | 一种倾斜数据双时序分布处理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110069502A (zh) | 基于Spark架构的数据均衡分区方法及计算机存储介质 | |
CN109993299B (zh) | 数据训练方法及装置、存储介质、电子装置 | |
Mei et al. | Atomnas: Fine-grained end-to-end neural architecture search | |
CN110399222B (zh) | Gpu集群深度学习任务并行化方法、装置及电子设备 | |
US9053067B2 (en) | Distributed data scalable adaptive map-reduce framework | |
CN105446979B (zh) | 数据挖掘方法和节点 | |
CN111966495B (zh) | 数据处理方法和装置 | |
CN103559205A (zh) | 基于MapReduce的并行特征选择方法 | |
CN113515351A (zh) | 一种基于能耗与QoS协同优化的资源调度实现方法 | |
CN110109543A (zh) | 基于被试迁移的c-VEP识别方法 | |
CN115951989B (zh) | 一种基于严格优先级的协同流量调度数值模拟方法与系统 | |
Yuan | An anomaly data mining method for mass sensor networks using improved PSO algorithm based on spark parallel framework | |
Guo et al. | Weighted aggregating stochastic gradient descent for parallel deep learning | |
Kllapi et al. | Elastic processing of analytical query workloads on iaas clouds | |
Wang et al. | Dynamic and decentralized global analytics via machine learning | |
Gong et al. | Evolutionary computation in China: A literature survey | |
CN107066328A (zh) | 大规模数据处理平台的构建方法 | |
CN114297041A (zh) | 网络异构计算平台测试方法、装置和计算机设备 | |
US20160189026A1 (en) | Running Time Prediction Algorithm for WAND Queries | |
CN112232401A (zh) | 一种基于差分隐私及随机梯度下降的数据分类方法 | |
CN113222099A (zh) | 卷积运算方法及芯片 | |
CN114138494B (zh) | 一种结合节点计算能力的负载均衡方法 | |
Ismaeel et al. | A systematic cloud workload clustering technique in large scale data centers | |
CN107103095A (zh) | 基于高性能网络架构的数据计算方法 | |
Hu et al. | Optimizing resource allocation for data-parallel jobs via gcn-based prediction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |