基于Spark的海量数据排序方法、装置、设备及存储介质制造方法及图纸

技术编号:33247842 阅读:16 留言:0更新日期:2022-04-27 18:03
本发明专利技术涉及大数据领域,公开了一种基于Spark的海量数据排序方法、装置、设备及存储介质。所述方法包括:接收数据排序请求并根据该请求,确定目标弹性分布式数据集,并对其中的每个分区抽样,得到多个样本数据;基于预设分区数量和每个样本数据,计算每个分区的分区边界;根据分区边界,对目标弹性分布式数据集进行数据分区,并对每个分区中的数据排序以得到中间数据序列;从外部存储介质中获取三元组数据,并根据三元组数据对中间数据序列分组全局排序,得到目标数据序列。本发明专利技术先通过计算分区边界从而让分区间有序后再分组排序,从而将任意分组中的数据等概率分发至各个分区,从而避免了分组全局排序时的数据倾斜问题,进而提升了服务器的性能。升了服务器的性能。升了服务器的性能。

【技术实现步骤摘要】
基于Spark的海量数据排序方法、装置、设备及存储介质


[0001]本专利技术涉及大数据领域,尤其涉及一种基于Spark的海量数据排序方法、装置、设备及存储介质。

技术介绍

[0002]在数据量呈指数级增长的态势下,人们对大数据处理的性能有了更高的要求。其中,在大数据处理场景中对数据进行排序是一种常见的需求,当数据量达到一定规模时,基于内存的排序算法已经无法解决生产需要。常规的大数据框架提供的解决方案,例如Spark分布式计算框架,底层采用的是类归并排序的算法进行优化。
[0003]现有基于Spark的海量数据的排序方法,其是将同一个分组的数据分发至同一个分区(同一个分区内允许有多个分组,但是一个分组的数据一定在同一个分区)进行排序。如果一个分组中的数据量过大,必然导致数据倾斜,进而影响服务器的性能。

技术实现思路

[0004]本专利技术的主要目的在于解决现有基于Spark的海量数据排序方法会导致数据倾斜进而影响服务器性能的问题。
[0005]本专利技术第一方面提供了一种基于Spark的海量数据排序方法,包括:
[0006]接收用户发送的数据排序请求,并根据所述数据排序请求,确定目标弹性分布式数据集;
[0007]对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据;
[0008]基于预设分区数量和每个所述样本数据,计算每个所述分区的分区边界;
[0009]根据每个所述分区的分区边界,对所述目标弹性分布式数据集进行数据分区;
[0010]根据所述数据排序请求中的排序方式对数据分区得到的每个分区中的数据进行排序,得到中间数据序列;
[0011]从预设的外部存储介质中获取三元组数据,并根据所述三元组数据对所述中间数据序列进行分组全局排序,得到目标数据序列,其中,所述三元组数据用于表示每个分区对应的分组需求信息。
[0012]可选的,在本专利技术第一方面的第一种实现方式中,所述对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据包括:
[0013]基于预设的计算规则,计算所述目标弹性分布式数据集的抽样数据总量;
[0014]根据所述抽样数据总量和预设分区数量,计算所述目标弹性分布式数据集的分区最大抽样数量;
[0015]基于所述抽样数据总量、所述分区最大抽样数量以及水塘抽样算法,对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据。
[0016]可选的,在本专利技术第一方面的第二种实现方式中,所述基于所述抽样数据总量、所述分区最大抽样数量以及水塘抽样算法,对所述目标弹性分布式数据集中的每个分区分别
进行抽样,得到多个样本数据包括:
[0017]调用Spark算子库中的sketch算子,并将所述抽样数据总量和所述分区最大抽样数量作为所述sketch算子的输入参数进行抽样计算,得到多个样本数据和输出参数,其中,所述输出参数用于描述样本数据的信息和目标弹性分布式数据集的信息。
[0018]可选的,在本专利技术第一方面的第三种实现方式中,所述输出参数包括所述目标弹性分布式数据集的总数据量和每个所述分区的数据量,在所述调用Spark算子库中的sketch算子,并将所述抽样数据总量和所述分区最大抽样数量作为所述sketch算子的输入参数进行抽样计算,得到多个样本数据和输出参数之后,还包括:
[0019]根据所述目标弹性分布式数据集的总数据量和所述抽样数据总量,计算所述目标弹性分布式数据集对应的数据抽样率;
[0020]依次将所述数据抽样率与所述每个所述分区的数据量进行乘积运算,得到每个所述分区对应的实际抽样数量;
[0021]将每个所述分区对应的实际抽样数量与所述分区最大抽样数量进行比较,并对所述实际抽样数据量大于所述分区最大抽样数量的非均衡分区重新进行抽样计算。
[0022]可选的,在本专利技术第一方面的第四种实现方式中,所述基于预设分区数量和每个所述样本数据,计算每个所述分区的分区边界包括:
[0023]获取每个所述样本数据对应的键位值和权重,并根据所述键位值的大小对每个所述样本数据进行排序,得到样本数据序列;
[0024]基于预设分区数量和每个所述样本数据对应的权重,计算分区平均权重;
[0025]对所述样本数据序列进行多次迭代,直至确定所述预设分区数量的分区边界,得到每个所述分区的分区边界,其中,一次所述迭代包括对所述样本数据序列中的样本数据进行遍历,并依次将遍历的样本数据的权重进行累加,直至累加结果不小于所述分区平均权重时,则确定当前样本数据对应的键位值为一个分区边界,以及将所述当前样本数据以及在所述当前样本数据之前的所有样本数据从所述样本数据序列中移除。
[0026]可选的,在本专利技术第一方面的第五种实现方式中,所述根据每个所述分区的分区边界,对所述目标弹性分布式数据集进行数据分区包括:
[0027]若所述预设分区数量不大于预设阈值,则基于所述分区边界,顺序搜索所述目标弹性分布式数据集中每条数据所在的分区;
[0028]若所述预设分区数量大于预设阈值,则基于所述分区边界和二分查找算法,确定所述目标弹性分布式数据集中每条数据所在的分区。
[0029]可选的,在本专利技术第一方面的第六种实现方式中,所述从预设的外部存储介质中获取三元组数据,并根据所述三元组数据对所述中间数据序列进行分组全局排序,得到目标数据序列包括:
[0030]从预设的外部存储介质中获取三元组数据,并将所述三元组数据传输至多核结构的GPU中;
[0031]调用所述GPU对所述三元组数据进行数据解析,并根据数据解析得到的分组需求信息对所述中间数据序列进行分组全局排序,得到目标数据序列,其中,所述分组需求信息用于表示所述目标弹性分布式数据集中每个分区对应的分组需求。
[0032]本专利技术第二方面提供了一种基于Spark的海量数据排序装置,包括:
[0033]数据集确定模块,用于接收用户发送的数据排序请求,并根据所述数据排序请求,确定目标弹性分布式数据集;
[0034]抽样模块,用于对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据;
[0035]分区边界确定模块,用于基于预设分区数量和每个所述样本数据,计算每个所述分区的分区边界;
[0036]分区排序模块,用于根据每个所述分区的分区边界,对所述目标弹性分布式数据集进行数据分区,根据所述数据排序请求中的排序方式,对数据分区得到的每个分区中的数据进行排序,得到中间数据序列;
[0037]分组全局排序模块,用于从预设的外部存储介质中获取三元组数据,并根据所述三元组数据对所述中间数据序列进行分组全局排序,得到目标数据序列,其中,所述三元组数据用于表示每个分区对应的分组需求信息。
[0038]可选的,在本专利技术第二方面的第一种实现方式中,所述抽样模块具体包括:
[0039]第一计算单元,用于基于预设的计算规则,计算所述本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Spark的海量数据排序方法,其特征在于,所述基于Spark的海量数据排序方法包括:接收用户发送的数据排序请求,并根据所述数据排序请求,确定目标弹性分布式数据集;对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据;基于预设分区数量和每个所述样本数据,计算每个所述分区的分区边界;根据每个所述分区的分区边界,对所述目标弹性分布式数据集进行数据分区;根据所述数据排序请求中的排序方式,对数据分区得到的每个分区中的数据进行排序,得到中间数据序列;从预设的外部存储介质中获取三元组数据,并根据所述三元组数据对所述中间数据序列进行分组全局排序,得到目标数据序列,其中,所述三元组数据用于表示每个分区对应的分组需求信息。2.根据权利要求1所述的基于Spark的海量数据排序方法,其特征在于,所述对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据包括:基于预设的计算规则,计算所述目标弹性分布式数据集的抽样数据总量;根据所述抽样数据总量和预设分区数量,计算所述目标弹性分布式数据集的分区最大抽样数量;基于所述抽样数据总量、所述分区最大抽样数量以及水塘抽样算法,对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据。3.根据权利要求2所述的基于Spark的海量数据排序方法,其特征在于,所述基于所述抽样数据总量、所述分区最大抽样数量以及水塘抽样算法,对所述目标弹性分布式数据集中的每个分区分别进行抽样,得到多个样本数据包括:调用Spark算子库中的sketch算子,并将所述抽样数据总量和所述分区最大抽样数量作为所述sketch算子的输入参数进行抽样计算,得到多个样本数据和输出参数,其中,所述输出参数用于描述样本数据的信息和目标弹性分布式数据集的信息。4.根据权利要求3所述的基于Spark的海量数据排序方法,其特征在于,所述输出参数包括所述目标弹性分布式数据集的总数据量和每个所述分区的数据量,在所述调用Spark算子库中的sketch算子,并将所述抽样数据总量和所述分区最大抽样数量作为所述sketch算子的输入参数进行抽样计算,得到多个样本数据和输出参数之后,还包括:根据所述目标弹性分布式数据集的总数据量和所述抽样数据总量,计算所述目标弹性分布式数据集对应的数据抽样率;依次将所述数据抽样率与所述每个所述分区的数据量进行乘积运算,得到每个所述分区对应的实际抽样数量;将每个所述分区对应的实际抽样数量与所述分区最大抽样数量进行比较,并对所述实际抽样数据量大于所述分区最大抽样数量的非均衡分区重新进行抽样计算。5.根据权利要求1所述的基于Spark的海量数据排序方法,其特征在于,所述基于预设分区数量和每个所述样本数据,计算每个所述分区的分区边界包括:获取每个所述样本数据对应的键位值和权重,并根据所述键位值的大小对每个所述样本数据进行排序,得到样本数据序列;
基于预设分区数量和每个所述样本数据对应的权重,计算分区平均权重;对所述样本数据序列进行多次迭...

【专利技术属性】
技术研发人员:赵英龙
申请(专利权)人:平安国际智慧城市科技股份有限公司
类型:发明
国别省市:

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

1