CN108804224A - 一种基于Spark框架的中间数据权重设置方法 - Google Patents
一种基于Spark框架的中间数据权重设置方法 Download PDFInfo
- Publication number
- CN108804224A CN108804224A CN201810493605.7A CN201810493605A CN108804224A CN 108804224 A CN108804224 A CN 108804224A CN 201810493605 A CN201810493605 A CN 201810493605A CN 108804224 A CN108804224 A CN 108804224A
- Authority
- CN
- China
- Prior art keywords
- key
- rdd
- fragments
- sample
- occurrences
- 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.)
- Granted
Links
Classifications
-
- 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/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Complex Calculations (AREA)
Abstract
本发明公开了一种基于Spark框架的中间数据权重设置方法,采用对RDD分片中的键值对进行采样,并通过采样数据估算出中间数据的分布情况,并根据该分布情况为中间数据设置权重值,从而使得分片更加均衡,总体执行更加均衡,提高执行效率。
Description
技术领域
本发明涉及大数据处理技术领域,尤其涉及一种基于Spark框架的中间数据权重设置方法。
背景技术
近年来,互联网技术在生活中高度的普及和应用吸引了越来越多的网民用户,大量用户的涌入产生了大量的数据,而这些海量的数据包含了巨大的价值,对分析用户的行为习惯具有重要的作用。为了更好地分析蕴藏在这些数据中的信息,很多企业选择将数据迁移到廉价、容错性强的云环境中进行处理。Google提出的MapReduce编程模型,为处理海量数据提供了很好的数据处理方法。作为一种处理大数据的并行编程模型,MapReduce由于其具有很好的可扩展性、可用性、容错性,成为数据库领域的研究热点。Spark和Hadoop均采用了MapReduce计算框架,Spark基于RDD(Resilient distributed datasets)的内存计算的设计使得其性能更加优秀。但是,一些MapReduce框架及并行计算的固有问题依然会成为任务执行的性能瓶颈。
现有技术提出了一些分片优化技术。这些技术通过使数据(每一组数据均为键值对)分片更加均匀来提高任务执行效率。其中一个关键的步骤就是对中间数据的keycluster(键簇)分布进行估计并设定权重。受限于Hadoop框架的思路限制,这些技术直接对中间数据采样并以键值对数量划分。Spark按stage执行作业的方式导致这些基于传统MapReduce框架方法并不完全适用于Spark框架。为了优化这些技术的性能,需要充分结合Spark的特点,设计出最适合Spark自身的中间数据估计方法和key cluster权重定义方式。
虽然直接对中间数据采样会带来巨大的时延和开销,但可以对执行shuffle操作的RDD分片进行采样,然后间接分析出中间数据的key分布。虽然因为map端聚合的存在,两者分布不能完全等同,但是可以根据map端聚合方式,来估计变换后的键值对数量,以此拟合中间数据的key分布。
在得到key分布之后,需要设定key的权重和划分标准。一个Spark的reduce任务可以分为两个部分:shuffle-op(会导致shuffle操作的算子)和normal-op(其他普通算子)。受限于以往Hadoop的MapReduce框架的思考限制,现存的方法都只考虑了shuffle-op的执行。然而在Spark***中,每个reduce任务获取中间数据的输入后开始执行,在执行完shuffle-op后,分片的键值对数量可能已经发生巨大的变化。这意味着,即使中间数据分片均匀,也无法保证normal-op执行时分片依然均匀。因此,设定权重应该权衡shuffle-op与normal-op的均衡,使得整个执行更加均衡。
发明内容
为了解决现有技术中存在的问题,本发明提供了一种基于Spark框架的中间数据权重设置方法,采用对RDD分片中的键值对进行采样,并通过采样数据估算出中间数据的分布情况,并根据该分布情况为中间数据设置权重值,从而使得分片更加均衡,总体执行更加均衡,提高执行效率。
本发明提供了一种基于Spark框架的中间数据权重设置方法,包括:
步骤S1:按照预设抽样比例从原始RDD分片中选取目标RDD分片;
步骤S2:对所述目标RDD分片进行并行采样获得样本键值对,并根据所述样本键值对获取所述目标RDD分片的键出现频率列表和目标RDD分片实际采样率;
步骤S3:根据所述目标RDD分片的键出现频率列表和目标RDD分片采样率,获取所述原始RDD分片的键出现频率列表;
步骤S4:根据所述原始RDD分片的键出现频率列表,设置中间数据的权重;
所述权重为所述原始RDD分片的键出现频率与执行shuffle算子后的键出现频率之和;
其中,所述执行shuffle算子后的键出现频率根据所述原始RDD分片的键出现频率通过预设公式获得。
在Spark框架中,每个shuffle算子会将一个Spark应用切割成两个阶段,map阶段和reduce阶段。如果一个原始RDD分片数量为m,则在map阶段的map任务数量也为m个。经过shuffle操作后,进入reduce阶段,RDD分片数目改变。这个分片数目是由Spark用户自己设定的,或者由Spark***默认设定的。例如,若reduce阶段RDD分片数量设定为r,则ruduce任务数量也为r。而每个map任务处理每一个对应的RDD分片,其处理结果即为中间数据。Shuffle阶段会将这些中间数据分割到不同的新的分片中。产生的每个新的分片,由每一个相应的reduce任务进行处理。
在RDD分片中保存的数据为一组一组的键值对<key,value>,本发明方案从原始RDD分片中抽样取出目标RDD分片,对目标RDD分片中的键值对进行采样,并统计采样键值对中键出现频率(即key的出现频率),然后估算出采样键值对所在的RDD分片中的键出现频率,并估算所有RDD分片中的键出现频率,最后根据所有RDD分片中的键出现频率和经过shuffle算子处理后的键出现频率来设置中间数据的权重值。
根据具体不同的RDD算子,预设公式不同。不同的算子涉及到的RDD数量有所不同。
对于涉及到单个RDD的算子,执行shuffle算子后的键出现频率计算方式见下表。
对于涉及到两个RDD的算子,执行shuffle算子后的键出现频率计算方式见下表。
进一步的,步骤S1中的所述预设抽样比例为ratio,其中,R为抽样比例系数,R为整数,S为执行任务的节点数量,m为原始RDD分片数量。
从原始RDD分片中抽取目标RDD分片的抽样比例ratio设置为执行任务节点数量与原始RDD分片数量的比值的倍数,即其中,R用于调节抽样分片的比例。若Spark应用的输入数据的key均匀分布,并且只包含一个shuffle过程,可以将ratio设置为较小的值,即只对一小部分分片采样。对于其他的应用,须设定较大的ratio。在具体抽样时,首先使用mapPartitionsWithIndex将每个原始RDD分片映射成一个迭代器。然后用filter算子筛选出索引号小于ratio*m的分片作为目标RDD分片。
进一步的,步骤S2中获取目标RDD分片实际采样率的具体步骤为:
步骤S21:随机生成采样步长;
步骤S22:判断所述采样步长是否满足接受条件:当所述采样步长不满足接受条件时,返回步骤S21,当所述采样步长满足接受条件时,以所述采样步长对目标RDD分片进行一次无放回采样,获取一个样本键值对,并将所述样本键值对放入样本集中;
步骤S23:将所述样本键值对的键出现频率增加1,并判断样本集中的样本键值对个数是否达到采样数量:当样本集中的样本键值对个数达到采样数量时,停止采样,获得所述样本集的键出现频率列表,并计算所述目标RDD分片实际采样率,当样本集中的样本键值对个数未达到采样数量时,返回步骤S21;
其中,采样数量为numi,m为原始RDD分片数量,r为Spark框架中的reduce任务数量,leni为目标RDD分片包含的键值对数量,rate为初始预设采样率,φ为预设最低采样个数,i为分片序号,i∈(0,m-1);
采样步长为si,ni表示还需采样的数量,Ni表示目标RDD分片中未处理的键值对数量,u为0到1之间的随机数;
当时,所述接受条件为:
当时,所述接受条件为:
α为预设阈值,v为0到1之间的随机数,j为连乘符号中的变量,j∈(0,si);
实际采样率为ratei,
本发明方案采用基于步长的接受/拒绝采样算法对目标RDD分片的键值对进行抽样。为了避免内存溢出和提高采样数,在对每个分片采样时,选择边采样边统计的方式。其中,最低采样数是为了防止小分片中的键值对数据被忽略,故默认设置为100。具体采样时,随机生成步长,当步长满足接受条件时,按步长进行采样,当一个键值对被选中时,将采样记录中该键值对的key的出现频率加一。直到完成numi个键值对的采样,采样过程结束。然后计算实际采样率其中,预设阈值α的值默认为0.05。
进一步的,步骤S3获取所述原始RDD分片的键出现频率列表的具体步骤为:
步骤S31:每一个目标RDD分片i的键k的出现频率为trans(i,k);
步骤S32:根据每一个目标RDD分片的键出现频率获得原始RDD分片的键出现频率ck;
其中,freqi,k为每一个样本键值对中键k的出现频率,MSC=0表示mapSideCombine为false,MSC=1表示mapSideCombine为true;
m为原始RDD分片的数量,ratio为预设抽样比例。
因为当应用map执行时,可能会进行map端的聚合,即根据键将键值对进行聚合。而是否进行map端聚合则由mapSideCombine的值决定。若mapSideCombine=true则会执行map端的聚合,即key相同的键值对会聚合在一起。mapSideCombine对中间数据的分布会产生很大影响,因此分两种情况来进行计算。因为原始RDD分片的数量与map任务数量相等,故此处m实际上为map任务数量。
进一步的,步骤S4中所述权重为wk,wk=ck+λs(ck);
其中,λ为map任务与reduce任务工作量的比率,s(ck)为执行shuffle算子后的键出现频率。
s(ck)是将ck代入与算子对应的公式计算得出,得到的是执行shuffle算子后的键出现频率。
有益效果
本发明提供了一种基于Spark框架的中间数据权重设置方法。首先采用基于步长的接收/拒绝采样算法对RDD分片中的键值对进行采样。然后,根据是否进行map端键值对聚合,基于采样数据估算出中间数据的分布情况,最后根据该分布情况为中间数据设置权重值。
本发明根据原始RDD分片数据的采样来估计中间数据分布,而无需等待任务执行完成后再对中间数据进行采样。若直接对中间数据采样,计算完分片权重后,还需重新分片。因此,通过采样估计中间数据分布可以大大节省时间上的开销。
本发明在估计中间数据分布的过程中,考虑了Map端键值对聚合的影响,可以获得更加精确的估计数据。若不考虑Map端聚合,在进行计算时,会得到虚假的信息,从而使得分片分割不均,降低任务执行效率。
本发明在设定键权重时,不仅考虑了原始RDD中键的频率,还考虑了shuffle算子执行后键的频率。这为分片提供了更加合理的划分依据,提高了分片均匀程度,并且提高后续Reduce任务的执行效率。
附图说明
图1是本发明提供的一种基于Spark框架的中间数据权重设置方法的步骤图;
图2是本发明提供的方法的整体流程图;
图3是本发明提供的方法中步骤S2的采样流程图。
具体实施方式
为了方便理解本发明方案的内容,下面结合具体实施例进行进一步阐述。
具体而言,假设原始RDD分片一共有10个分片,分片的预设抽样比例ratio为0.2,则我们只选择两个分片(即ratio*m=0.2×10=2)作为目标RDD分片。假设对分片0和分片1进行采样,两个分片的初始预设采样率rate分别为0.2和0.25,采样得到key频率分别为[(A,3),(B,4),(C,6)]和[(A,2),(B,5),(C,1)]。然后,计算各个分片的key频率经过trans(i,k)函数转换的结果。假设在此例中,mapSideCombine为true,那么可知所有key的频率都置为1,比如trans(0,A)=(A,1),则两个分片的key频率变成了[(A,1),(B,1),(C,1)]和[(A,1),(B,1),(C,1)];假设此例中mapSideCombine为false,那么每个key的trans(i,k)函数为比如分片0中key A的则两个分片的频率变成了[(A,15),(B,20),(C,30)]和[(A,8),(B,20),(C,4)]。然后,需要计算所有分片汇集的结果,即估计中间数据中每个key k的频率ck,在此以mapSideCombine为false的结果进行说明。汇集后得到的整体key频率为[(A,115),(B,200),(C,170)]。其中,因为A在两个分片中频率freqi,k分别为15和8,预设抽样比例ratio为0.2,所以A的频率计算过程为B和C计算同理。
之后,计算每个key cluster的权重。根据不用的Spark算子,具有不同的计算方法。假设此时运行的是groupBy算子,即将相同的key的键值对聚合成一个键值对。那么在经历groupby的shuffle之后,key频率变为[(A,1),(B,1),(C,1)]。那么key权重为[(A,115+1λ),(B,200+1λ),(C,170+1λ)],λ设为1,则最终权重分布为[(A,116),(B,201),(C,171)]
综上所述,本发明提供了一种基于Spark框架的中间数据权重设置方法,首先采用基于步长的接收/拒绝采样算法对RDD分片中的键值对进行采样。然后,根据是否进行map端键值对聚合,基于采样数据估算出中间数据的分布情况,最后根据该分布情况为中间数据设置权重值。
本发明根据原始RDD分片数据的采样来估计中间数据分布,而无需等待任务执行完成后再对中间数据进行采样。若直接对中间数据采样,计算完分片权重后,还需重新分片。因此,通过采样估计中间数据分布可以大大节省时间上的开销。
本发明在估计中间数据分布的过程中,考虑了Map端键值对聚合的影响,可以获得更加精确的估计数据。若不考虑Map端聚合,在进行计算时,会得到虚假的信息,从而使得分片分割不均,降低任务执行效率。
本发明在设定键权重时,不仅考虑了原始RDD中键的频率,还考虑了shuffle算子执行后键的频率。这为分片提供了更加合理的划分依据,提高了分片均匀程度,并且提高后续Reduce任务的执行效率。
以上所述仅为本发明的实施例而已,并不用以限制本发明,凡在本发明精神和原则之内,所作任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于Spark框架的中间数据权重设置方法,其特征在于,包括:
步骤S1:按照预设抽样比例从原始RDD分片中选取目标RDD分片;
步骤S2:对所述目标RDD分片进行并行采样获得样本键值对,并根据所述样本键值对获取所述目标RDD分片的键出现频率列表和目标RDD分片实际采样率;
步骤S3:根据所述目标RDD分片的键出现频率列表和目标RDD分片采样率,获取所述原始RDD分片的键出现频率列表;
步骤S4:根据所述原始RDD分片的键出现频率列表,设置中间数据的权重;
所述权重为所述原始RDD分片的键出现频率与执行shuffle算子后的键出现频率之和;
其中,所述执行shuffle算子后的键出现频率根据所述原始RDD分片的键出现频率通过预设公式获得。
2.根据权利要求1所述的方法,其特征在于,步骤S1中的所述预设抽样比例为ratio,其中,R为抽样比例系数,R为整数,S为执行任务的节点数量,m为原始RDD分片数量。
3.根据权利要求1所述的方法,其特征在于,步骤S2中获取目标RDD分片实际采样率的具体步骤为:
步骤S21:随机生成采样步长;
步骤S22:判断所述采样步长是否满足接受条件:当所述采样步长不满足接受条件时,返回步骤S21,当所述采样步长满足接受条件时,以所述采样步长对目标RDD分片进行一次无放回采样,获取一个样本键值对,并将所述样本键值对放入样本集中;
步骤S23:将所述样本键值对的键出现频率增加1,并判断样本集中的样本键值对个数是否达到采样数量:当样本集中的样本键值对个数达到采样数量时,停止采样,获得所述样本集的键出现频率列表,并计算所述目标RDD分片实际采样率,当样本集中的样本键值对个数未达到采样数量时,返回步骤S21;
其中,采样数量为numi,m为原始RDD分片数量,r为Spark框架中的reduce任务数量,leni为目标RDD分片包含的键值对数量,rate为初始预设采样率,φ为预设最低采样个数,i为分片序号,i∈(0,m-1);
采样步长为si,ni表示还需采样的数量,Ni表示目标RDD分片中未处理的键值对数量,u为0到1之间的随机数;
当时,所述接受条件为:
当时,所述接受条件为:
α为预设阈值,v为0到1之间的随机数,j为连乘符号中的变量,j∈(0,si);
实际采样率为ratei,
4.根据权利要求1所述的方法,其特征在于,步骤S3获取所述原始RDD分片的键出现频率列表的具体步骤为:
步骤S31:每一个目标RDD分片i的键k的出现频率为trans(i,k);
步骤S32:根据每一个目标RDD分片的键出现频率获得原始RDD分片的键出现频率ck;
其中,freqi,k为每一个样本键值对中键k的出现频率,MSC=0表示mapSideCombine为false,MSC=1表示mapSideCombine为true;
m为原始RDD分片的数量,ratio为预设抽样比例。
5.根据权利要求4所述的方法,其特征在于,步骤S4中所述权重为wk,wk=ck+λs(ck);
其中,λ为map任务与reduce任务工作量的比率,s(ck)为执行shuffle算子后的键出现频率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810493605.7A CN108804224B (zh) | 2018-05-22 | 2018-05-22 | 一种基于Spark框架的中间数据权重设置方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810493605.7A CN108804224B (zh) | 2018-05-22 | 2018-05-22 | 一种基于Spark框架的中间数据权重设置方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108804224A true CN108804224A (zh) | 2018-11-13 |
CN108804224B CN108804224B (zh) | 2021-06-11 |
Family
ID=64092738
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810493605.7A Active CN108804224B (zh) | 2018-05-22 | 2018-05-22 | 一种基于Spark框架的中间数据权重设置方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108804224B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110033096A (zh) * | 2019-03-07 | 2019-07-19 | 北京大学 | 一种用于强化学习的状态数据生成方法和*** |
CN112000467A (zh) * | 2020-07-24 | 2020-11-27 | 广东技术师范大学 | 一种数据倾斜处理方法、装置、终端设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170235809A1 (en) * | 2016-02-17 | 2017-08-17 | Talentica Software (India) Private Limited | System and method of using replication for additional semantically defined partitioning |
CN107066612A (zh) * | 2017-05-05 | 2017-08-18 | 郑州云海信息技术有限公司 | 一种基于SparkJoin操作的自适应数据倾斜调整方法 |
-
2018
- 2018-05-22 CN CN201810493605.7A patent/CN108804224B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170235809A1 (en) * | 2016-02-17 | 2017-08-17 | Talentica Software (India) Private Limited | System and method of using replication for additional semantically defined partitioning |
CN107066612A (zh) * | 2017-05-05 | 2017-08-18 | 郑州云海信息技术有限公司 | 一种基于SparkJoin操作的自适应数据倾斜调整方法 |
Non-Patent Citations (1)
Title |
---|
TANG Z ET AL.: "An intermediate data placement algorithm for load balancing in Spark computing environment", 《FUTURE GENERATION COMPUTER SYSTEMS-THE INTERNATIONAL JOURNAL OF ESCIENCE》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110033096A (zh) * | 2019-03-07 | 2019-07-19 | 北京大学 | 一种用于强化学习的状态数据生成方法和*** |
CN110033096B (zh) * | 2019-03-07 | 2021-04-02 | 北京大学 | 一种用于强化学习的状态数据生成方法和*** |
CN112000467A (zh) * | 2020-07-24 | 2020-11-27 | 广东技术师范大学 | 一种数据倾斜处理方法、装置、终端设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108804224B (zh) | 2021-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109885397B (zh) | 一种边缘计算环境中时延优化的负载任务迁移算法 | |
CN105446979B (zh) | 数据挖掘方法和节点 | |
CN109740755B (zh) | 一种基于梯度下降法的数据处理方法及相关装置 | |
WO2016101628A1 (zh) | 一种数据建模中的数据处理方法及装置 | |
CN110069502A (zh) | 基于Spark架构的数据均衡分区方法及计算机存储介质 | |
CN106250457B (zh) | 大数据平台物化视图的查询处理方法及*** | |
CN113515351A (zh) | 一种基于能耗与QoS协同优化的资源调度实现方法 | |
CN103559205A (zh) | 基于MapReduce的并行特征选择方法 | |
CN109634744A (zh) | 一种基于云平台资源分配的精确匹配方法,设备及存储介质 | |
CN104765765B (zh) | 一种基于时间窗口可移动的动态数据快速处理方法 | |
Chen et al. | Trace-based analysis and prediction of cloud computing user behavior using the fractal modeling technique | |
CN108804224A (zh) | 一种基于Spark框架的中间数据权重设置方法 | |
Wang et al. | Dynamic and decentralized global analytics via machine learning | |
CN106874332B (zh) | 数据库访问方法和装置 | |
CN108628889B (zh) | 基于时间片的数据抽样方法、***和装置 | |
CN109977977A (zh) | 一种识别***的方法及对应装置 | |
CN109995834A (zh) | 大流量数据处理方法、装置、计算设备及存储介质 | |
CN110191005B (zh) | 一种告警日志处理方法及*** | |
CN105468726B (zh) | 基于本地计算和分布式计算的数据计算方法及*** | |
WO2018098670A1 (zh) | 一种进行数据处理的方法和装置 | |
JP5388134B2 (ja) | 計算機システム、及び、移動データ決定方法 | |
CN116166443A (zh) | 一种游戏任务***的负载优化方法及*** | |
CN106874215B (zh) | 一种基于Spark算子的序列化存储优化方法 | |
WO2023005264A1 (zh) | 一种数据处理方法和装置 | |
CN115314400A (zh) | 网络***异常检测方法、装置、电子设备及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |