CN104346380B - 基于MapReduce模型的数据排序方法和*** - Google Patents
基于MapReduce模型的数据排序方法和*** Download PDFInfo
- Publication number
- CN104346380B CN104346380B CN201310330196.6A CN201310330196A CN104346380B CN 104346380 B CN104346380 B CN 104346380B CN 201310330196 A CN201310330196 A CN 201310330196A CN 104346380 B CN104346380 B CN 104346380B
- Authority
- CN
- China
- Prior art keywords
- reduce
- stages
- map
- fifo buffer
- extremum
- 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.)
- Expired - Fee Related
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
基于MapReduce模型的数据排序方法和***,其中排序方法包括步骤:在MAP阶段每个MAP模块在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入先入先出数据结构中;在Reduce阶段Reduce模块获取所有先入先出数据结构中的当前元素;获取当前全局极值元素;将当前全局极值元素作为排序结果输出;将输出的当前全局极值元素从所述Reduce阶段元素集中移除,并更新Reduce阶段元素集。通过本申请,不必要等待MAP阶段的排序过程完成,即可在Reduce阶段根据先入先出缓存队列中的当前元素中选取极值元素,并流式的输出排序结果,所以可以提前输出排序结果,以减少用户的等待时间。
Description
技术领域
本发明属于数据处理领域,尤其涉及基于MapReduce模型的数据排序方法和***。
背景技术
MapReduce是一种编程模型,可以用于大规模数据集的并行运算。MapReduce模型把对数据集的大规模操作分发给网络上的每个节点;每个节点并行的执行相应的操作并返回工作结果。MapReduce模型可以极大地方便编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式***上。
在程序应用中,排序操作使用频繁,一般是,首先在MAP阶段在每个节点并行的进行局部排序以生成局部排序结果,然后在Reduce阶段根据所有节点的局部排序结果进行全排序,在全排序完成后生成排序结果。
但是,随着计算机互联网技术的发展,网上的文本、图像、音频和视频数据成数量级的增长,而在大规模数据集的处理中,大规模数据的排序是一项十分耗时的操作,所以,采用现有技术中基于MapReduce模型实现排序的方法时,用户需要等待较长的时间才能够获得排序结果。
发明内容
有鉴于此,本发明提供了基于MapReduce模型的数据排序方法和***,以实现快速输出用户所需排序结果的目的。
本申请是这样实现的:
第一方面,本发明实施例提供了一种基于MapReduce模型的数据排序方法,包括步骤:
在MAP阶段:
S11、每个MAP模块在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;
在Reduce阶段:
S12、Reduce模块获取所有先入先出数据结构中的当前元素;
S13、在包括所有先入先出数据结构中当前元素构成的所述Reduce阶段元素集中获取当前全局极值元素;
S14、将所述当前全局极值元素作为排序结果输出;
将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出数据结构的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集;
S16、当所述Reduce阶段元素集不为空时,返回步骤S13。
在第一方面的第一种可能的实现方式中,所述排序包括:将所述数据分块中的元素由小到大进行排序。
在第一方面的第一种可能的实现方式中,所述先入先出数据结构包括:
先入先出缓存队列。
在第一方面的第一种可能的实现方式中,所述MAP阶段的步骤,具体包括:
S21、每个MAP模块从包括数据分块中元素构成的MAP阶段元素集中获取当前局部极值元素;
S22、将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中;
S23、将所述当前局部极值元素从所述MAP阶段元素集中移除以更新所述MAP阶段元素集;
S24、当所述MAP阶段元素集不为空时,返回步骤S21。
在第一方面的第一种可能的实现方式中,所述从所述MAP阶段元素集中获取当前局部极值元素,包括:
通过冒泡排序法获取所述MAP阶段元素集中的当前局部极值元素。
在第一方面的第一种可能的实现方式中,所述将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中,包括:
将所述当前局部极值元素通过与所述MAP模块对应的通信管道加入与所述MAP模块对应的先入先出缓存队列中。
在第一方面的第一种可能的实现方式中,所述Reduce阶段的步骤,具体包括:
S31、获取每个先入先出缓存队列中的当前元素;标识所述当前元素的所属先入先出缓存队列;
S32、在所述Reduce阶段元素集中获取当前全局极值元素;
S33、将所述当前全局极值元素作为排序结果输出;
S34、将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并根据所述当前元素的标识,确定所述当前全局极值元素对应的先入先出缓存队列;当所述当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列的当前元素加入所述Reduce阶段元素集,以更新所述Reduce阶段元素集;当所述当前全局极值元素为其所属MAP阶段元素集中最后元素时,保持所述Reduce阶段元素集不变;
S35、当由所有先入先出缓存队列的当前元素构成的Reduce阶段元素集不为空时,返回步骤S32。
在第一方面的第一种可能的实现方式中,所述从所述Reduce阶段元素集中获取全局极值元素,包括:
通过胜者树排序法或冒泡排序法从所述Reduce阶段元素集中获取全局极值元素。
在第一方面的第一种可能的实现方式中,其特征在于,还包括任务中止控制阶段,包括步骤:
S41、接收任务中止指令;
S42、中止所述MAP阶段的步骤;
S43、将所有先入先出缓存队列和所述Reduce阶段元素集存入磁盘;
S44、中止所述Reduce阶段的步骤。
在第一方面的第一种可能的实现方式中,还包括任务恢复控制阶段,包括步骤:
S51、接收任务恢复指令;
S52、将存于磁盘的所有先入先出缓存队列和所述Reduce阶段元素集存入内存;
S53、启动所述MAP阶段的步骤;
S54、启动所述Reduce阶段的步骤。
第二方面,本发明实施例提供了一种基于MapReduce模型的数据排序***,包括:
多个MAP模块,用于依次将数据分块中的各元素由大到小陆续加入与所述MAP模块对应的先入先出数据结构中;
Reduce模块,包括:
当前元素获取单元,用于获取每个先入先出数据结构中的当前元素;
全局元素获取单元,用于当由当前元素构成的Reduce阶段元素集不为空时,在由所述Reduce阶段元素集中获取当前全局极值元素;
输出单元,用于将每个所述当前全局极值元素作为排序结果陆续输出;
全局更新单元,用于将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集。
在第二方面的第一种可能的实现方式中,所述先入先出数据结构包括:
先入先出缓存队列。
在第二方面的第一种可能的实现方式中,所述MAP模块,包括:
局部元素获取单元,用于当由数据分块中元素构成的MAP阶段元素集不为空时,依次从所述MAP阶段元素集中获取当前局部极值元素;
局部元素发送单元,用于将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中;
局部更新单元,用于将所述当前局部极值元素从所述MAP阶段元素集中移除以更新所述MAP阶段元素集。
在第二方面的第一种可能的实现方式中,所述局部元素发送单元包括:
冒泡排序法执行组件,用于通过冒泡排序法获取MAP阶段元素集中的当前局部极值元素。
在第二方面的第一种可能的实现方式中,包括:
所述当前局部极值元素通过与所述MAP模块对应的通信管道加入与所述MAP模块对应的先入先出缓存队列中。
在第二方面的第一种可能的实现方式中,
所述当前元素获取单元包括元素提取组件和元素标识组件:
所述元素提取组件用于获取每个先入先出缓存队列中的当前元素;
所述元素标识组件用于标识所述当前元素的所属先入先出缓存队列;
所述全局元素获取单元包括Reduce阶段元素集判定组件和排序执行组件:
所述Reduce阶段元素集判定组件用于判断所述Reduce阶段元素集是否为空;
所述排序执行组件用于当所述Reduce阶段元素集判定组件的判定结果为否时,获取所述Reduce阶段元素集中的当前全局极值元素;
所述全局更新单元包括队列确定组件和元素添加组件:
所述队列确定组件用于将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并根据所述当前元素的标识,确定所述当前全局极值元素对应的先入先出缓存队列;
所述元素添加组件用于当所述当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列的当前元素加入所述Reduce阶段元素集。
在第二方面的第一种可能的实现方式中,所述排序执行组件包括:
胜者树排序法执行单元或冒泡排序法执行单元。
在第二方面的第一种可能的实现方式中,还包括任务中止控制模块,包括:
任务中止指令获取单元,用于接收任务中止指令;
MAP中止单元,用于中止所述MAP模块的操作;
数据保存单元,用于当任一先入先出缓存队列为空时,将所有先入先出缓存队列和所述Reduce阶段元素集存入磁盘;
Reduce中止单元,用于中止所述Reduce模块的操作。
在第二方面的第一种可能的实现方式中,还包括任务恢复控制模块,包括:
任务恢复指令获取单元,用于接收任务恢复指令;
数据恢复单元,用于将存于磁盘的所有先入先出缓存队列和所述Reduce阶段元素集存入内存;
MAP启动单元,用于启动所述MAP模块的操作;
Reduce启动单元,用于启动所述Reduce模块的操作。
从上述的技术方案可以看出,本申请在MAP阶段的排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;当先入先出数据结构存在了可以取出的当前元素后,即可启动Reduce阶段,进而可以实时的在包括了所有先入先出数据结构中的当前元素的Reduce阶段元素集中选取极值元素,并将每次选取的极值元素陆续的输出为流式的排序结果。由于通过本申请中的技术方案,可以实现在MAP阶段的排序与Reduce阶段同时进行,不必要等待MAP阶段的排序过程完成,即可在Reduce阶段根据先入先出缓存队列中的当前元素中选取极值元素,并流式的输出排序结果,所以可以提前输出排序结果,以减少用户的等待时间。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请中所述数据排序方法的流程示意图;
图2为本申请中所述数据排序方法的又一流程示意图;
图3为本申请中所述数据排序方法的又一流程示意图;
图4为本申请中所述数据排序方法的又一流程示意图;
图5为本申请中所述数据排序方法的又一流程示意图;
图6为本申请中所述数据排序***的结构示意图;
图7为本申请中所述数据排序***的又一结构示意图;
图8为本申请中所述数据排序***的又一结构示意图;
图9为本申请中所述数据排序***的又一结构示意图;
图10为本申请中所述数据排序***的又一结构示意图;
图11为本申请中所述数据排序***的又一结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围
为实现快速输出用户所需排序结果的目的,本发明提供一种基于MapReduce模型的数据排序方法,如图1所示,包括步骤:
在MAP阶段:
S11、每个MAP模块在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;
在Reduce阶段:
S12、Reduce模块获取所有先入先出数据结构中的当前元素;
S13、在所述Reduce阶段元素集中获取当前全局极值元素;
S14、将所述当前全局极值元素作为排序结果输出;
将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出数据结构的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集;
S16、当包括当前元素构成的Reduce阶段元素集不为空时,返回步骤S13。
本申请的核心发明思路为,每个MAP模块在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即,将该元素加入与MAP模块对应的先入先出数据结构中的过程是持续的,每确定一个元素的排序结果就加入该元素至先入先出数据结构中;再根据排序结果将元素陆续加入与MAP模块对应的先入先出数据结构中后,在Reduce阶段,实时的在由所有的先入先出缓存队列中的当前元素构成的Reduce阶段元素集中选取极值元素,并将每次选取的极值元素陆续的输出为排序结果。由于通过本申请中的技术方案可以使MAP阶段的排序过程与Reduce阶段中排序结果生成的过程同步进行,即,本申请中的Reduce阶段不必要等待所有的MAP阶段全部完成后才能进行,而是可以通过各个先入先出缓存队列的当前元素中进行排序即可生成流式的排序结果,进而可以使用户快速的获得排序结果,以减少用户的等待时间,具体的:
在MAP阶段:
在MapReduce模型中,对大规模数据集的排序首先需要对大规模数据集进行分割,根据MAP模块的数量将划分大规模数据集为设定的数据分块。
设MAP模块的数量为M,可以将大规模数据集划分为M个数据分块,这M个MAP模块分别处理其中的一个数据分块,从而实现对大规模数据集的分布式并行处理。
现有技术中,一般的排序方式需要每个MAP模块均执行完各自的处理流程,得到MAP模块结果后,Reduce模块在汇集所有MAP模块结果的基础上再生成最终结果。而在本申请中,MAP模块不再生成完整的排序结果,而是在对分配给自己的数据分块中元素进行排序的过程中,就同时将已经选择出的极值元素陆续的加入与MAP模块对应的先入先出数据结构中。先入先出数据结构包括所有对于数据的存取方式为先入先出的数据存储单元,比如,可以是先入先出缓存队列。
优选的,本申请为每个MAP模块分别设有了对应的先入先出数据结构,具体可以是先入先出缓存队列;M个MAP模块分别对应有M个先入先出缓存队列;每个MAP模块分别在对自己的数据分块中的元素进行排序过程,以将数据分块中的元素由小到大排序为例:
一般是首先通过排序算法来查找到所有元素中最大的元素,然后再从剩余的元素中找到次大的元素,依此循环直至查找完所有的元素,这种排序法中,比较典型的是冒泡排序法。
在本申请所使用的排序方法中,包括了当前局部极值元素这一概念,此外,每个MAP模块还可以对应包括有MAP阶段元素集,MAP阶段元素集为MAP模块中的数据分块中元素,通过对MAP阶段元素集中的元素进行排序和更新,来实现陆续的生成流式的排序结果。比如,在MAP模块中,可以通过冒泡排序法,在当前的数据分块中元素所构成的MAP阶段元素集中,第一次找到的最大的元素,此时,即可视为得到了该元素的排序结果,在该元素没有被从MAP阶段元素集中移除前,即可称之为当前局部极值元素,即,当前局部极值元素为当前的MAP阶段元素集中最大的元素。在获得当前局部极值元素后,即将该当前局部极值元素加入与MAP模块对应的先入先出缓存队列中;比如,将属于MAP模块M1的数据分块中元素的当前局部极值元素加入先入先出缓存队列N1中,将属于MAP模块M2的数据分块中元素的当前局部极值元素加入先入先出缓存队列N2中,以此类推,直至将属于MAP模块MM的数据分块中元素的当前局部极值元素加入先入先出缓存队列NM中。
具体到每个MAP模块中,每个先入先出缓存队列都会陆续的接收从对应的MAP模块的数据分块的元素中选出的当前局部极值元素,具体的,在MAP模块M1的数据分块中元素的当前局部极值元素是Y1为例,元素Y1加入先入先出缓存队列N1中后,可以将元素Y1移除MAP阶段元素集,然后再通过冒泡排序法查找到了剩余的元素中的当前局部最大的元素,比如,以第二次查找到的当前局部最大的元素是Y2为例,在将元素Y2加入先入先出缓存队列N1中后,再将元素Y2移除MAP阶段元素集,然后再通过冒泡排序法查找到了剩余的元素中的当前局部极值元素,以此类推,直至MAP阶段元素集为空,即,将MAP模块的数据分块中的所有元素排序完毕为止。例如,先入先出缓存队列N1中的元素可以是由大到小排列为:Y1、Y2、Y3......Yn。
在MAP阶段的步骤,具体可以如图2所示,包括:
S21、每个MAP模块从由数据分块中元素构成的MAP阶段元素集中获取当前局部极值元素;
每次排序的范围以MAP阶段元素集中的元素为准,已经查找到并且加入了先入先出缓存队列中的元素,即,曾经成为过当前局部极值元素的元素并不在此范围中。
S22、将当前局部极值元素加入与MAP模块对应的先入先出缓存队列中;
每个成为当前局部极值元素的元素均为目前在MAP阶段元素集中最大的元素,通过陆续的将查找到的当前局部极值元素加入先入先出缓存队列,从而使得每个先入先出缓存队列中即为该数据分块中元素的排序。
由于先入先出缓存队列的特性,即,需要根据存入队列的顺序来取出元素,先进的先出,从而使得每次从该先入先出缓存队列中取出的当前元素都是该数据分块中未取出元素中的极值元素。
S23、将当前局部极值元素从MAP阶段元素集中移除以更新MAP阶段元素集。
之所以需要将当前局部极值元素从MAP阶段元素集中移除以更新MAP阶段元素集,是为了是排序的范围以MAP阶段元素集中的元素为准,每次所查找到的当前局部极值元素不会重复。
S24、当所述MAP阶段元素集不为空时,返回步骤S21。
MAP阶段元素集不为空表示数据分块中元素的排序没有全部完成,需要返回步骤S21继续执行MAP阶段的排序,直至数据分块中的所有元素排序完成。
以上为本申请中的MAP阶段,其目的是使每个MAP模块在每个元素的排序结果确定后即将该元素加入到对应的先入先出缓存队列中;在实际应用中,MAP模块一般都是和Reduce模块呈分布式构成,即,MAP模块和Reduce模块并不在同一设备中,互为远程;为此,可以以通过将当前局部极值元素通过与MAP模块对应的通信管道加入与MAP模块对应的先入先出缓存队列中的方式来实现元素数据的传输,即,各个MAP模块对应的先入先出缓存队列均存储于Reduce模块端所属的设备中,每当MAP模块端获取到当前局部极值元素时,均通过对应的通信管道将该元素传输至Reduce模块端所属的设备中的先入先出缓存队列。
通过将先入先出缓存队列设于Reduce模块端所属的设备中,可以有效地提高Reduce模块对于先入先出缓存队列中元素的提取速度,从而可以提高排序结果的生成效率。
在各个MAP模块进行排序并陆续向先入先出缓存队列加入当前局部极值元素的同时,在Reduce阶段可以进行的后续的步骤,具体包括:
首先获取所有先入先出缓存队列中的当前元素;还是以包括M个MAP模块为例,当所有的先入先出缓存队列,即,M个先入先出缓存队列均加入了各自数据分块中元素的当前局部极值元素后,Reduce模块从每个先入先出缓存队列中取出一个元素,即,获取所有先入先出缓存队列中的当前元素以构成最初的Reduce阶段元素集;。
当由当前元素构成的Reduce阶段元素集不为空时,在Reduce阶段元素集中获取当前全局极值元素;
由于在Reduce阶段元素集中,所包括的是先入先出缓存队列的当前元素,也就是每个数据分块的元素中的局部最大的元素,所以,由这些局部最大的元素所构成的Reduce阶段元素集中,必然存在整个大规模数据集中所有元素的最大的元素,即,当前全局极值元素。
之所以要判断Reduce阶段元素集是否为空,是因为在Reduce阶段元素集中获取当前全局极值元素是一个从不断更新的Reduce阶段元素集中需要重复多次的过程,直至Reduce阶段元素集中的所有元素均被执行完毕,即,Reduce阶段元素集为空时才会停止获取当前全局极值元素。
将全局极值元素作为排序结果输出;本申请的特点之一即为产生流式的排序结果,具体的,本申请中排序结果的输出不是一次性的向用户呈现全部结果,而是随着全局极值元素的陆续生成,也相应的陆续的输出给用户。
在实际应用中,随着Reduce模块的不断生成流式排序结果,用户也会陆续获得相应的排序结果呈现。
由于通过本申请中的技术方案,MAP阶段的排序在不断地生成中间结果的过程中,Reduce阶段即可利用该已经生成的部分中间结果实施后续的查找过程,并生成流式的最终排序结果。由于本申请中的Reduce阶段不必要等待所有的MAP阶段全部完成后才能进行,而是可以通过各个先入先出缓存队列的当前元素中进行排序即可生成流式的最终排序结果,从而可以使用户快速的获得排序结果,以减少用户的等待时间。
此外,为了可以及时的更新Reduce阶段元素集中,还需要将输出的当前全局极值元素从Reduce阶段元素集中移除,并将当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新Reduce阶段元素集。
在每次将每个先入先出缓存队列的当前元素取出后,每个先入先出缓存队列的当前元素即会变更为,每个先入先出缓存队列中比已取出的元素排名后一个的元素;该当前元素是该先入先出缓存队列中所有没有被取出的元素中最大的元素。
如果在Reduce阶段元素集中,某个元素被选择为当前全局极值元素,则表明只有其对应的先入先出缓存队列中目前的当前元素,才有可能比目前的Reduce阶段元素集中的除所述当前全局极值元素外的其他元素更大,所以,在选出一个当前全局极值元素后,需要在将该全局极值元素从Reduce阶段元素集中移除后,再加入该全局极值元素对应的先入先出缓存队列中的当前元素至Reduce阶段元素集中,以使在进行后续的当前全局极值元素查找时,保证查找结果的准确性。
Reduce阶段的步骤具体可以如图3所示,包括:
S31、获取每个先入先出缓存队列中的当前元素;标识当前元素的所属先入先出缓存队列;
由于在Reduce阶段元素集中的各个元素,在被选为当前全局极值元素后,还需要获取该当前全局极值元素对应的先入先出缓存队列的当前元素加入到Reduce阶段元素集中,所以,可以通过标识当前元素的方式来区别各个加入到Reduce阶段元素集中的元素,即,在当前元素加入先入先出缓存队列的标识,从而可以根据该标志来获取相应的先入先出缓存队列中后续的当前元素。
S32、通过胜者树排序法或冒泡排序法在Reduce阶段元素集中获取当前全局极值元素;
每次排序的范围以Reduce阶段元素集中的元素为准,已经查找到并且输出为排序结果的元素,即,曾经成为过当前全局极值元素的元素并不在此范围中。
S33、将当前全局极值元素作为排序结果输出;
在实际应用中,对于大规模数据集的排序,用户所需要的一般只是排序后前若干名元素,为了使用户可以及时的获取所需的排序结果,本申请采用了流式排序结果的输出方式,即,随着排序结果的不断生成,排序结果将及时的陆续呈献给用户。所以,当获取当前全局极值元素的同时,即生成了排序结果的一部分中间结果,并陆续的将该中间结果作为流式排序结果输出给用户。
S34、将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并根据所述当前元素的标识,确定所述当前全局极值元素对应的先入先出缓存队列;当所述当前全局极值元素不是其所属MAP阶段元素集中最小元素时,将被确定的先入先出缓存队列的当前元素加入所述Reduce阶段元素集,以更新所述Reduce阶段元素集;当所述当前全局极值元素为其所属MAP阶段元素集中最后元素时,保持所述Reduce阶段元素集不变。
在每次将每个先入先出缓存队列的当前元素取出后,每个先入先出缓存队列的当前元素即会变更为,每个先入先出缓存队列中比已取出的元素排名后一个的元素;该当前元素是该先入先出缓存队列中所有没有被取出的元素中最大的元素。比如,以先入先出缓存队列N1中的元素由大到小排列为:Y1、Y2、Y3......Yn为例,当Y1作为当前元素取出后,先入先出缓存队列N1的当前元素及变更为元素Y2。在先入先出缓存队列N1中的元素Y1取出后,元素Y2即为最大的元素。
如果在Reduce阶段元素集中,某个元素被选择为当前全局极值元素,则表明只有其对应的先入先出缓存队列中目前的当前元素,才有可能比目前的Reduce阶段元素集中的除所述当前全局极值元素外的其他元素更大,比如,在先入先出缓存队列N1中的元素Y1取出之后,当前元素及变更为元素Y2;如果包括了Y1元素的Reduce阶段元素集经排序,元素Y1被选择为全局极值元素,那么,由于Reduce阶段元素集中其他的元素均为其所属先入先出缓存队列中最大的元素,所以这些元素所对应的先入先出缓存队列中的当前元素必然不可能成为当前全局极值元素,只有在先入先出缓存队列N1中,仅小于元素Y1的元素Y2才有可能比这些Reduce阶段元素集中其他的元素大;所以,需要在将元素Y1移除于Reduce阶段元素集中后,再通过加入元素Y2来更新Reduce阶段元素集,即,在选出一个当前全局极值元素后,需要在将该全局极值元素从Reduce阶段元素集中移除后,再加入该全局极值元素对应的先入先出缓存队列中的当前元素至Reduce阶段元素集中,以使在进行后续的当前全局极值元素查找时,保证后续查找结果的准确性。
随着排序任务进程的推进,会有MAP模块的数据分块中的所有元素都被作为最终的输出结果输出,即,也就是MAP阶段元素集中最后元素,比如可以是,由大到小排序的最小元素,被选为了当前全局极值元素,这时,该MAP模块所对应的先入先出缓存队列为空,此时,该先入先出缓存队列中最后一个元素作为当前全局极值元素输出后,在剩余的元素中,最大的元素还存在与当前的Reduce阶段元素集中,所以此时无需向Reduce阶段元素集增加其他元素,只要返回当前全局极值元素的获取步骤即可,即,从当前现有的Reduce阶段元素集中的元素中获取当前全局极值元素。
S35、当所述Reduce阶段元素集不为空时,返回步骤S32。
Reduce阶段元素集不为空表示在大规模数据集中的元素的排序没有全部完成,需要返回步骤S32继续执行Reduce阶段的排序。
由于本申请中的技术方案采用了流式排序结果,所以用户在排序过程没有全部完成的时候就可以得到部分的排序结果,由于用户很可能只需要排名在前若干名的排序结果,此时,用户就有可能需要先暂停任务,以查看当前已经得到的排序结果。为此,在本申请中,进一步的,如图4所示,还可以包括任务中止控制阶段,包括步骤:
S41、接收任务中止指令;
用户在需要将任务中止时,可以通过任务中止指令来触发任务中止的操作。
S42、中止MAP阶段的步骤;
在收到任务中止指令后,由于本申请中初始的步骤即为通过MAP阶段的步骤生成先入先出缓存队列中的排序后的元素;所以需要先停止MAP模块的排序,从而停止向先入先出缓存队列发送元素。
S43、将所有先入先出缓存队列和Reduce阶段元素集存入磁盘;
通过将缓存中的数据,包括先入先出缓存队列和Reduce阶段元素集存入磁盘,以保存当前的任务进度。
S44、中止Reduce阶段的步骤。
在保存了任务进度后,就可以中止Reduce阶段的步骤了。此时,整个对于大规模数据集的排序任务进度中止,用户可以查看已经输出了的排序结果。
与任务中止相对应的,本申请还可以包括有任务恢复控制阶段,如图5所示,包括步骤:
S51、接收任务恢复指令;
用户在需要将中止的任务恢复时,可以通过任务恢复指令来触发任务恢复的操作。
S52、将存于磁盘的所有先入先出缓存队列和Reduce阶段元素集存入内存;
在收到任务恢复指令后,首先需要恢复原来先入先出缓存队列中的数据,以及,Reduce阶段元素集中的数据。
S53、启动MAP阶段的步骤;
当先入先出缓存队列和Reduce阶段元素集的数据恢复后,即可恢复整个任务流程,首先需要启动MAP阶段的步骤,即,每个MAP模块依次将数据分块中的各元素由大到小陆续加入与MAP模块对应的先入先出缓存队列中。
S54、启动Reduce阶段的步骤。
当MAP阶段的步骤启动后,在任务中止阶段为空的先入先出缓存队列也就会加入新的元素;
接着,就可以执行图1所对应实施例中的Reduce阶段的各个步骤了。
在本申请的另一面,还提供了一种基于MapReduce模型的数据排序***,如图6所示,包括:Reduce模块01和多个MAP模块02;
多个MAP模块02,用于在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;
Reduce模块01,包括:
当前元素获取单元11,用于获取每个先入先出数据结构中的当前元素;
全局元素获取单元12,用于当由当前元素构成的Reduce阶段元素集不为空时,在由所述Reduce阶段元素集中获取当前全局极值元素;
输出单元13,用于将每个所述当前全局极值元素作为排序结果陆续输出;
全局更新单元14,用于将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集。
在MapReduce模型中,对大规模数据集的排序首先需要对大规模数据集进行分割,根据MAP模块的数量将划分大规模数据集为设定的数据分块。
设MAP模02块的数量可以为M,可以将大规模数据集划分为M个数据分块,这M个MAP模块分别处理其中的一个数据分块,从而实现对大规模数据集的分布式并行处理。
在本申请中,MAP模块02在排序的过程中,就同时将已经选择出的极值元素加入与MAP模块02对应的先入先出数据结构中。先入先出数据结构包括所有对于数据的存取方式为先入先出的数据存储单元,比如,可以是先入先出缓存队列03。
优选的,先入先出数据结构具体可以是先入先出缓存队列03;M个MAP模块02分别对应有M个先入先出缓存队列03;以每个MAP模块002分别在对自己的数据分块中的元素进行由小到大进行排序为例:
一般是首先通过排序算法来查找到所有元素中最大的元素,然后再从剩余的元素中找到次大的元素,依此循环直至查找完所有的元素,这种排序法中,比较典型的是冒泡排序法。
本申请包括了当前局部极值元素这一概念,此外,每个MAP模块02还可以对应包括有MAP阶段元素集,MAP阶段元素集为MAP模块中的数据分块中元素,通过对MAP阶段元素集中的元素进行排序和更新,来实现陆续的生成流式的初级排序结果。比如,在MAP模块02中,可以通过冒泡排序法,在当前的数据分块中元素所构成的MAP阶段元素集中,第一次找到的最大的元素,此时,即可视为得到了该元素的排序结果,在该元素没有被从MAP阶段元素集中移除前,即可称之为当前局部极值元素,即,当前局部极值元素为当前的MAP阶段元素集中最大的元素。在获得当前局部极值元素后,即将该当前局部极值元素加入与MAP模块02对应的先入先出缓存队列03中;比如,将属于MAP模块M1的数据分块中元素的当前局部极值元素加入先入先出缓存队列N1中,将属于MAP模块M2的数据分块中元素的当前局部极值元素加入先入先出缓存队列N2中,以此类推,直至将属于MAP模块MM的数据分块中元素的当前局部极值元素加入先入先出缓存队列NM中。
具体到每个MAP模块02中,每个先入先出缓存队列03都会陆续的接收从对应的MAP模块的数据分块的元素中选出的当前局部极值元素;具体的,在MAP模块M1的数据分块中元素的当前局部极值元素是Y1为例,元素Y1加入先入先出缓存队列N1中后,可以将元素Y1移除MAP阶段元素集,然后再通过冒泡排序法查找到了剩余的元素中的当前局部最大的元素,比如,以第二次查找到的当前局部极值元素是Y2为例,在将元素Y2加入先入先出缓存队列N1中后,再将元素Y2移除MAP阶段元素集,然后再通过冒泡排序法查找到了剩余的元素中的当前局部极值元素,以此类推,直至MAP阶段元素集为空,即,将MAP模块的数据分块中的所有元素排序完毕为止。例如,先入先出缓存队列N1中的元素可以是由大到小排列为:Y1、Y2、Y3......Yn。
优选的,如图7所示,MAP模块02具体可以包括:
局部元素获取单元21,用于当由数据分块中元素构成的MAP阶段元素集不为空时,依次从MAP阶段元素集中获取当前局部极值元素;
MAP阶段元素集不为空表示数据分块中元素的排序没有全部完成,需要继续局部元素获取单元21执行排序;每次排序的范围以MAP阶段元素集中的元素为准,已经查找到并且加入了先入先出缓存队列03中的元素,即,曾经成为过当前局部极值元素的元素并不在此范围中。优选的,局部元素获取单元21可以包括冒泡排序法执行组件,从而可以通过冒泡排序法获取MAP阶段元素集中的当前局部极值元素。
局部元素发送单元22,用于将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中;
每个成为当前局部极值元素的元素均为目前在MAP阶段元素集中最大的元素,通过局部元素发送单元22陆续的将查找到的当前局部极值元素加入先入先出缓存队列03,从而使得每个先入先出缓存队列03中即为该数据分块中元素的排序。
由于先入先出缓存队列03的特性,即,需要根据存入队列的顺序来取出元素,先进的先出,从而使得每次从该先入先出缓存队列03中取出的当前元素都是该数据分块中未取出元素中的极值元素。
局部更新单元23,用于将当前局部极值元素从所述MAP阶段元素集中移除以更新MAP阶段元素集。
之所以需要通过局部更新单元23将当前局部极值元素从MAP阶段元素集中移除以更新MAP阶段元素集,是为了是排序的范围以MAP阶段元素集中的元素为准,每次所查找到的当前局部极值元素不会重复
在实际应用中,MAP模块02一般都是和Reduce模块01呈分布式构成,即,MAP模块02和Reduce模块01并不在同一设备中,互为远程;为此,可以以通过将当前局部极值元素通过与MAP模块对应的通信管道04加入与MAP模块02对应的先入先出缓存队列03中的方式来实现元素数据的传输,即,各个MAP模块02对应的先入先出缓存队列03均存储于Reduce模块01端所属的设备中,每当MAP模块02端获取到当前局部极值元素时,均通过对应的通信管道04将该元素传输至Reduce模块01端所属的设备中的先入先出缓存队列03中。
通过将先入先出缓存队列03设于Reduce模块01端所属的设备中,可以有效地提高Reduce模块01对于先入先出缓存队列03中元素的提取速度,从而可以提高排序结果的生成效率。
在各个MAP模块02进行排序并陆续向先入先出缓存队列03加入当前局部极值元素的同时,在Reduce模块01可以执行的后续的操作,具体包括:
首先,当前元素获取单元11获取所有先入先出缓存队列中的当前元素;还是以包括M个MAP模块为例,当所有的先入先出缓存队列,即,M个先入先出缓存队列均加入了各自数据分块中元素的当前局部极值元素后,Reduce模块从每个先入先出缓存队列中取出一个元素,即,获取每个先入先出缓存队列中的当前元素以构成最初的Reduce阶段元素集。
接着,全局元素获取单元12在Reduce阶段元素集不为空时,在Reduce阶段元素集中获取当前全局极值元素;
由于在Reduce阶段元素集中,所包括的是先入先出缓存队列的当前元素,也就是每个数据分块的元素中的局部极值元素,所以,由这些局部最大的元素所构成的Reduce阶段元素集中,必然存在整个大规模数据集中所有元素的最大的元素,即,当前全局极值元素。
之所以要判断Reduce阶段元素集是否为空,是因为在Reduce阶段元素集中获取当前全局极值元素是一个从不断更新的Reduce阶段元素集中需要重复多次的过程,直至Reduce阶段元素集中的所有元素均被执行完毕,即,Reduce阶段元素集为空时才会停止获取当前全局极值元素。
随着全局元素获取单元12不断地获取到当前全局极值元素,同步进行的,输出单元13陆续的将已获取到的全局极值元素作为排序结果输出;本申请的特点之一即为产生流式的排序结果,具体的,本申请中排序结果的输出不是一次性的向用户呈现全部结果,而是随着全局极值元素的陆续生成,也相应的陆续的输出给用户。
在实际应用中,随着Reduce模块01中的输出单元13不断生成流式排序结果,用户也会陆续获得相应的排序结果呈现。
由于通过本申请中的技术方案,MAP模块02的排序在不断地生成中间结果的过程中,Reduce模块01即可利用该已经生成的部分中间结果实施后续的查找过程,并生成流式的最终排序结果。由于本申请中的Reduce模块不必要等待所有的MAP模块得到完整的MAP结果后才能进行后续操作,而是可以通过各个先入先出缓存队列03的当前元素中进行排序即可生成流式的最终排序结果,从而可以使用户快速的获得排序结果,以减少用户的等待时间。
此外,为了可以及时的更新Reduce阶段元素集中,还需要通过全局更新单元14将输出的当前全局极值元素从Reduce阶段元素集中移除,并将当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新Reduce阶段元素集。
在每次将每个先入先出缓存队列03的当前元素取出后,每个先入先出缓存队列03的当前元素即会变更为,每个先入先出缓存队列03中比已取出的元素排名后一个的元素;该当前元素是该先入先出缓存队列03中所有没有被取出的元素中最大的元素。
如果在Reduce阶段元素集中,某个元素被选择为当前全局极值元素,则表明只有其对应的先入先出缓存队列03中目前的当前元素,才有可能比目前的Reduce阶段元素集中的除所述当前全局极值元素外的其他元素更大,所以,在选出一个当前全局极值元素后,需要在将该全局极值元素从Reduce阶段元素集中移除后,再加入该全局极值元素对应的先入先出缓存队列03中的当前元素至Reduce阶段元素集中,以使在进行后续的当前全局极值元素查找时,保证查找结果的准确性。
优选的,Reduce模块01的各个单元可以如图8所示,具体包括:
当前元素获取单元11具体可以包括元素提取组件111和元素标识组件112,其中:
元素提取组件111用于获取每个先入先出缓存队列中的当前元素;
元素标识组件112用于标识所述当前元素的所属先入先出缓存队列;由于在Reduce阶段元素集中的各个元素,在被选为当前全局极值元素后,还需要获取该当前全局极值元素对应的先入先出缓存队列的当前元素加入到Reduce阶段元素集中,所以,可以通过元素标识组件112标识当前元素的方式来区别各个加入到Reduce阶段元素集中的元素,即,在当前元素加入先入先出缓存队列的标识,从而可以根据该标志来获取相应的先入先出缓存队列中后续的当前元素。
全局元素获取单元12具体可以包括Reduce阶段元素集判定组件121和排序执行组件122:
Reduce阶段元素集判定组件121用于判断所述Reduce阶段元素集是否为空;
所述排序执行组件122用于当Reduce阶段元素集判定组件121的判定结果为否时,获取Reduce阶段元素集中的当前全局极值元素;
Reduce阶段元素集不为空表示在大规模数据集中的元素的排序没有全部完成,需要继续执行排序;每次排序的范围以Reduce阶段元素集中的元素为准,已经查找到并且输出为排序结果的元素,即,曾经成为过当前全局极值元素的元素并不在此范围中。
随着全局元素获取单元12不断地获取到当前全局极值元素,同步进行的,输出单元13陆续的将已获取到的全局极值元素作为排序结果输出。
全局更新单元14具体可以包括队列确定组件141和元素添加组件142:
队列确定组件141用于将输出的当前全局极值元素从Reduce阶段元素集中移除,并根据当前元素的标识,确定当前全局极值元素对应的先入先出缓存队列03;
元素添加组件142用于当当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列03的当前元素加入Reduce阶段元素集,即,当当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列03的当前元素加入Reduce阶段元素集,以更新Reduce阶段元素集;当当前全局极值元素为其所属MAP阶段元素集中最后元素时,保持Reduce阶段元素集不变。
在每次将每个先入先出缓存队列的当前元素取出后,每个先入先出缓存队列的当前元素即会变更为,每个先入先出缓存队列中比已取出的元素排名后一个的元素;该当前元素是该先入先出缓存队列中所有没有被取出的元素中最大的元素。比如,以先入先出缓存队列N1中的元素由大到小排列为:Y1、Y2、Y3......Yn为例,当Y1作为当前元素取出后,先入先出缓存队列N1的当前元素及变更为元素Y2。在先入先出缓存队列N1中的元素Y1取出后,元素Y2即为极值元素。
如果在Reduce阶段元素集中,某个元素被选择为当前全局极值元素,则表明只有其对应的先入先出缓存队列中目前的当前元素,才有可能比目前的Reduce阶段元素集中的除所述当前全局极值元素外的其他元素更大,比如,在先入先出缓存队列N1中的元素Y1取出之后,当前元素及变更为元素Y2;如果包括了Y元素1的Reduce阶段元素集经排序,元素Y1被选择为全局极值元素,那么,由于Reduce阶段元素集中其他的元素均为其所属先入先出缓存队列中最大的元素,所以这些元素所对应的先入先出缓存队列中的当前元素必然不可能成为当前全局极值元素,只有在先入先出缓存队列N1中,仅小于元素Y1的元素Y2才有可能比这些Reduce阶段元素集中其他的元素大;所以,需要在将元素Y1移除于Reduce阶段元素集中后,再通过加入元素Y2来更新Reduce阶段元素集,即,在选出一个当前全局极值元素后,需要在将该全局极值元素从Reduce阶段元素集中移除后,再加入该全局极值元素对应的先入先出缓存队列中的当前元素至Reduce阶段元素集中,以使在进行后续的当前全局极值元素查找时,保证后续查找结果的准确性。
随着排序任务进程的推进,会有MAP模块的数据分块中的所有元素都被作为最终的输出结果输出,即,也就是MAP阶段元素集中最后元素,比如可以是,由大到小排序的最小元素;被选为了当前全局极值元素,这时,该MAP模块所对应的先入先出缓存队列为空,此时,该先入先出缓存队列中最后一个元素作为当前全局极值元素输出后,在剩余的元素中,最大的元素还存在与当前的Reduce阶段元素集中,所以此时无需向Reduce阶段元素集增加其他元素,只要全局元素获取单元12从当前现有的Reduce阶段元素集中的元素中获取当前全局极值元素即可。
由于本申请中的技术方案采用了流式排序结果,所以用户在排序过程没有全部完成的时候就可以得到部分的排序结果,由于用户很可能只需要排名在前若干名的排序结果,此时,用户就有可能需要先暂停任务,以查看当前已经得到的排序结果。为此,在本申请中,进一步的,如图9所示,还可以包括任务中止控制模块05,包括:
任务中止指令获取单元050,接收任务中止指令;
用户在需要将任务中止时,可以通过向任务中止指令获取单元050发送任务中止指令来触发任务中止的操作。
MAP中止单元051,用于中止MAP模块02的操作;
本申请中,首先即为通过MAP模块02的操作生成先入先出缓存队列03中的排序后的元素;所以中止任务需要先通过MAP中止单元051来停止MAP模块02的排序操作,从而停止向先入先出缓存队列03发送元素。
数据保存单元052,用于当任一先入先出缓存队列为空时,将所有先入先出缓存队列03和Reduce阶段元素集存入磁盘;
通过数据保存单元052,将缓存中的数据,包括先入先出缓存队列03和Reduce阶段元素集存入磁盘,以保存当前的任务进度。
Reduce中止单元053,用于中止Reduce模块01的操作;在保存了任务进度后,就可以中止Reduce模块01的操作了。
此时,整个对于大规模数据集的排序任务进度中止,用户可以查看已经输出了的排序结果。
与任务中止相对应的,本申请还可以包括有任务恢复模块06,如图10所示,包括:
任务恢复指令获取单元060。
用户在需要将中止的任务恢复时,可以通过任务恢复指令获取单元060发送任务恢复指令来触发任务恢复的操作。
数据恢复单元061,用于将存于磁盘的所有先入先出缓存队列和所述Reduce阶段元素集存入内存;当需要恢复任务进度的时候,首先需要恢复原来先入先出缓存队列中的数据,以及,Reduce阶段元素集中的数据。
MAP启动单元062,用于启动MAP模块02的操作;当先入先出缓存队列03和Reduce阶段元素集的数据恢复后,即可恢复整个任务,首先需要启动MAP模块02的操作,即,每个MAP模块依次将数据分块中的各元素由大到小陆续加入与MAP模块对应的先入先出缓存队列中。
Reduce启动单元063,用于启动Reduce模块01的操作当MAP模块02的操作启动后,在任务中止阶段为空的先入先出缓存队列03也就会加入新的元素。
进一步地对应方法实施例,本发明实施例还提供了一种排序***70,用于实现数据排序。如图11所示,该排序***70包括:
多个终端702,用于依次将数据分块中的各元素由大到小陆续加入与终端702中MAP模块对应的先入先出数据结构中;
服务器701,用于获取每个先入先出数据结构中的当前元素;当由当前元素构成的Reduce阶段元素集不为空时,在由所述Reduce阶段元素集中获取当前全局极值元素;将每个所述当前全局极值元素作为排序结果陆续输出;将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集。
为了实现流式的输出排序结果,以缩短用户的等待时间,本申请中,在多个终端702各自的MAP模块分别排序的过程中,就同时将已经选择出的极值元素加入与终端702的MAP模块对应的先入先出数据结构中。在各个终端702的MAP模块进行排序并陆续向先入先出数据结构加入当前局部极值元素的同时,获取所有先入先出数据结构中的当前元素;并在Reduce阶段元素集中获取当前全局极值元素;
随着服务器701不断地获取到当前全局极值元素,同步进行的,服务器701还陆续的将已获取到的全局极值元素值作为排序结果输出;本申请的特点之一即为产生流式的排序结果,具体的,本申请中排序结果的输出不是一次性的向用户呈现全部结果,而是随着全局极值元素的陆续生成,也相应的陆续的输出给用户,从而可以有效地缩短用户的等待时间。
进一步的,在本申请中,服务器701还可以用于对于大规模数据集的排序任务进度中止,以及,用于恢复被中止的排序任务进度。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明实施例所提供的用户设备切换的方法以及包括源网络设备、用户设备和目标无线网络控制节点在内的装置进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (19)
1.一种基于MapReduce模型的数据排序方法,其特征在于,包括步骤:
在MAP阶段:
S11、每个MAP模块在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;
在Reduce阶段:
S12、Reduce模块获取所有先入先出数据结构中的当前元素;
S13、在包括所有先入先出数据结构中当前元素构成的Reduce阶段元素集中获取当前全局极值元素;
S14、将所述当前全局极值元素作为排序结果输出;
将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出数据结构的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集;
S16、当所述Reduce阶段元素集不为空时,返回步骤S13。
2.根据权利要求1中所述的数据排序方法,其特征在于,所述排序包括:将所述数据分块中的元素由小到大进行排序。
3.根据权利要求1中所述的数据排序方法,其特征在于,所述先入先出数据结构包括:
先入先出缓存队列。
4.根据权利要求1中所述的数据排序方法,其特征在于,所述MAP阶段的步骤,具体包括:
S21、每个MAP模块从包括数据分块中元素构成的MAP阶段元素集中获取当前局部极值元素;
S22、将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中;
S23、将所述当前局部极值元素从所述MAP阶段元素集中移除以更新所述MAP阶段元素集;
S24、当所述MAP阶段元素集不为空时,返回步骤S21。
5.根据权利要求4中所述的数据排序方法,其特征在于,所述从所述MAP阶段元素集中获取当前局部极值元素,包括:
通过冒泡排序法获取所述MAP阶段元素集中的当前局部极值元素。
6.根据权利要求5中所述的数据排序方法,其特征在于,所述将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中,包括:
将所述当前局部极值元素通过与所述MAP模块对应的通信管道加入与所述MAP模块对应的先入先出缓存队列中。
7.根据权利要求4中所述的数据排序方法,其特征在于,所述Reduce阶段的步骤,具体包括:
S31、获取每个先入先出缓存队列中的当前元素;标识所述当前元素的所属先入先出缓存队列;
S32、在所述Reduce阶段元素集中获取当前全局极值元素;
S33、将所述当前全局极值元素作为排序结果输出;
S34、将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并根据所述当前元素的标识,确定所述当前全局极值元素对应的先入先出缓存队列;当所述当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列的当前元素加入所述Reduce阶段元素集,以更新所述Reduce阶段元素集;当所述当前全局极值元素为其所属MAP阶段元素集中最后元素时,保持所述Reduce阶段元素集不变;
S35、当所述Reduce阶段元素集不为空时,返回步骤S32。
8.根据权利要求7中所述的数据排序方法,其特征在于,所述从所述Reduce阶段元素集中获取全局极值元素,包括:
通过胜者树排序法或冒泡排序法从所述Reduce阶段元素集中获取全局极值元素。
9.根据权利要求3至8中任一所述的数据排序方法,其特征在于,还包括任务中止控制阶段,包括步骤:
S41、接收任务中止指令;
S42、中止所述MAP阶段的步骤;
S43、将所有先入先出缓存队列和所述Reduce阶段元素集存入磁盘;
S44、中止所述Reduce阶段的步骤。
10.根据权利要求9中所述的数据排序方法,其特征在于,还包括任务恢复控制阶段,包括步骤:
S51、接收任务恢复指令;
S52、将存于磁盘的所有先入先出缓存队列和所述Reduce阶段元素集存入内存;
S53、启动所述MAP阶段的步骤;
S54、启动所述Reduce阶段的步骤。
11.一种基于MapReduce模型的数据排序***,其特征在于,包括:
多个MAP模块,用于在对数据分块中的元素排序过程中,每确定一个元素的排序结果后,即将该元素加入与所述MAP模块对应的先入先出数据结构中;
Reduce模块,包括:
当前元素获取单元,用于获取每个先入先出数据结构中的当前元素;
全局元素获取单元,用于当由当前元素构成的Reduce阶段元素集不为空时,在由所述Reduce阶段元素集中获取当前全局极值元素;
输出单元,用于将每个所述当前全局极值元素作为排序结果陆续输出;
全局更新单元,用于将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并将所述当前全局极值元素对应的先入先出缓存队列的当前元素加入Reduce阶段元素集,以更新所述Reduce阶段元素集。
12.根据权利要求11中所述的数据排序***,其特征在于,所述先入先出数据结构包括:
先入先出缓存队列。
13.根据权利要求12中所述的数据排序***,其特征在于,所述MAP模块,包括:
局部元素获取单元,用于当由数据分块中元素构成的MAP阶段元素集不为空时,依次从所述MAP阶段元素集中获取当前局部极值元素;
局部元素发送单元,用于将所述当前局部极值元素加入与所述MAP模块对应的先入先出缓存队列中;
局部更新单元,用于将所述当前局部极值元素从所述MAP阶段元素集中移除以更新所述MAP阶段元素集。
14.根据权利要求13中所述的数据排序***,其特征在于,所述局部元素发送单元包括:
冒泡排序法执行组件,用于通过冒泡排序法获取MAP阶段元素集中的当前局部极值元素。
15.根据权利要求14中所述的数据排序***,其特征在于,包括:
所述当前局部极值元素通过与所述MAP模块对应的通信管道加入与所述MAP模块对应的先入先出缓存队列中。
16.根据权利要求12中所述的数据排序***,其特征在于,
所述当前元素获取单元包括元素提取组件和元素标识组件:
所述元素提取组件用于获取每个先入先出缓存队列中的当前元素;
所述元素标识组件用于标识所述当前元素的所属先入先出缓存队列;
所述全局元素获取单元包括Reduce阶段元素集判定组件和排序执行组件:
所述Reduce阶段元素集判定组件用于判断所述Reduce阶段元素集是否为空;
所述排序执行组件用于当所述Reduce阶段元素集判定组件的判定结果为否时,获取所述Reduce阶段元素集中的当前全局极值元素;
所述全局更新单元包括队列确定组件和元素添加组件:
所述队列确定组件用于将输出的所述当前全局极值元素从所述Reduce阶段元素集中移除,并根据所述当前元素的标识,确定所述当前全局极值元素对应的先入先出缓存队列;
所述元素添加组件用于当所述当前全局极值元素不是其所属MAP阶段元素集中最后元素时,将被确定的先入先出缓存队列的当前元素加入所述Reduce阶段元素集。
17.根据权利要求16中所述的数据排序***,其特征在于,所述排序执行组件包括:
胜者树排序法执行单元或冒泡排序法执行单元。
18.根据权利要求12至17中任一所述的数据排序***,其特征在于,还包括任务中止控制模块,包括:
任务中止指令获取单元,用于接收任务中止指令;
MAP中止单元,用于根据所述任务中止指令中止所述MAP模块的操作;
数据保存单元,用于将所有先入先出缓存队列和所述Reduce阶段元素集存入磁盘;
Reduce中止单元,用于中止所述Reduce模块的操作。
19.根据权利要求18中所述的数据排序***,其特征在于,还包括任务恢复控制模块,包括:
任务恢复指令获取单元,用于接收任务恢复指令;
数据恢复单元,用于将存于磁盘的所有先入先出缓存队列和所述Reduce阶段元素集存入内存;
MAP启动单元,用于启动所述MAP模块的操作;
Reduce启动单元,用于启动所述Reduce模块的操作。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310330196.6A CN104346380B (zh) | 2013-07-31 | 2013-07-31 | 基于MapReduce模型的数据排序方法和*** |
PCT/CN2014/081379 WO2015014191A1 (zh) | 2013-07-31 | 2014-07-01 | 基于mapreduce模型的数据排序方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310330196.6A CN104346380B (zh) | 2013-07-31 | 2013-07-31 | 基于MapReduce模型的数据排序方法和*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104346380A CN104346380A (zh) | 2015-02-11 |
CN104346380B true CN104346380B (zh) | 2018-03-09 |
Family
ID=52430962
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310330196.6A Expired - Fee Related CN104346380B (zh) | 2013-07-31 | 2013-07-31 | 基于MapReduce模型的数据排序方法和*** |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104346380B (zh) |
WO (1) | WO2015014191A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250097A (zh) * | 2016-06-22 | 2016-12-21 | 中国科学院计算技术研究所 | 一种面向大数据的加速排序装置、方法、芯片、处理器 |
CN107784032B (zh) * | 2016-08-31 | 2020-06-16 | 华为技术有限公司 | 一种数据查询结果的渐进式输出方法、装置及*** |
CN108647302B (zh) * | 2018-05-09 | 2022-03-25 | 联想(北京)有限公司 | 一种数据库排序方法及电子设备 |
CN115032606B (zh) * | 2022-08-11 | 2022-11-04 | 湖北工业大学 | 一种基于局部最小选定单元平均的恒虚警检测器 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096603A (zh) * | 2009-12-14 | 2011-06-15 | ***通信集团公司 | MapReduce***中的作业分解控制方法及调度节点设备 |
CN102236581A (zh) * | 2010-04-30 | 2011-11-09 | 国际商业机器公司 | 用于数据中心的映射化简方法和*** |
CN102769615A (zh) * | 2012-07-02 | 2012-11-07 | 北京大学 | 一种基于MapReduce机制的任务调度方法和*** |
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
CN103023805A (zh) * | 2012-11-22 | 2013-04-03 | 北京航空航天大学 | 一种MapReduce*** |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102456031B (zh) * | 2010-10-26 | 2016-08-31 | 腾讯科技(深圳)有限公司 | 一种MapReduce***和处理数据流的方法 |
CN101996079A (zh) * | 2010-11-24 | 2011-03-30 | 南京财经大学 | 一种基于管道通信的MapReduce编程框架运算方法 |
CN102546247B (zh) * | 2011-12-29 | 2014-08-27 | 华中科技大学 | 一种适用流式处理的大规模数据连续分析*** |
-
2013
- 2013-07-31 CN CN201310330196.6A patent/CN104346380B/zh not_active Expired - Fee Related
-
2014
- 2014-07-01 WO PCT/CN2014/081379 patent/WO2015014191A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102096603A (zh) * | 2009-12-14 | 2011-06-15 | ***通信集团公司 | MapReduce***中的作业分解控制方法及调度节点设备 |
CN102236581A (zh) * | 2010-04-30 | 2011-11-09 | 国际商业机器公司 | 用于数据中心的映射化简方法和*** |
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
CN102769615A (zh) * | 2012-07-02 | 2012-11-07 | 北京大学 | 一种基于MapReduce机制的任务调度方法和*** |
CN103023805A (zh) * | 2012-11-22 | 2013-04-03 | 北京航空航天大学 | 一种MapReduce*** |
Non-Patent Citations (3)
Title |
---|
Hadoop平台下的作业调度算法研究与改进;夏祎;《中国优秀硕士学位论文全文数据库 信息科技辑》;20110315;第I138-20页 * |
基于Hadoop平台的作业调度技术研究;王皎;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130215;第I138-1133页 * |
基于云仿真的web服务选择研究;李淑芝 等;《计算机应用研究》;20130430;第30卷(第4期);第1069-1075页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104346380A (zh) | 2015-02-11 |
WO2015014191A1 (zh) | 2015-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109039942B (zh) | 一种基于深度强化学习的网络负载均衡***及均衡方法 | |
CN104346380B (zh) | 基于MapReduce模型的数据排序方法和*** | |
CN110222005A (zh) | 用于异构架构的数据处理***及其方法 | |
CN103368851B (zh) | 基于资源复用的Openflow流表存储优化方法 | |
CN105159148B (zh) | 一种机器人指令处理方法及装置 | |
CN108416436A (zh) | 使用多核心处理模块进行神经网络划分的方法及其*** | |
CN107229966B (zh) | 一种模型数据更新方法、装置及*** | |
CN108009642A (zh) | 分布式机器学习方法和*** | |
CN112036512A (zh) | 基于网络裁剪的图像分类神经网络架构搜索方法和装置 | |
CN105652833A (zh) | 基于双向智能搜索的制造企业车间调度优化方法 | |
CN111324630B (zh) | 基于mpi的神经网络架构搜索并行化方法和设备 | |
CN110347636A (zh) | 数据执行体及其数据处理方法 | |
CN108197708A (zh) | 一种基于Spark的并行化遗传算法 | |
CN105631921B (zh) | 图像数据的处理方法及装置 | |
CN109214512A (zh) | 一种深度学习的参数交换方法、装置、服务器及存储介质 | |
CN109992325A (zh) | 信息显示方法、装置、存储介质和电子装置 | |
CN108712337B (zh) | 高性能网络中多路径带宽调度方法 | |
CN107528731B (zh) | 应用于ns3并行仿真的网络分割优化算法 | |
CN110188067A (zh) | 协处理器及其数据处理加速方法 | |
CN112199154B (zh) | 一种基于分布式协同采样中心式优化的强化学习训练***及方法 | |
CN117785490A (zh) | 一种图神经网络模型的训练架构、方法、***及服务器 | |
CN109508785A (zh) | 一种用于神经网络训练的异步并行优化方法 | |
CN110502337B (zh) | 针对Hadoop MapReduce中混洗阶段的优化*** | |
CN107808226A (zh) | 基于最早开始时间的二车间柔性综合调度方法 | |
CN110493825B (zh) | 一种边缘计算架构下多任务的负载均衡方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20180309 Termination date: 20200731 |