CN105204920A - 一种基于映射聚合的分布式计算作业的实现方法及装置 - Google Patents
一种基于映射聚合的分布式计算作业的实现方法及装置 Download PDFInfo
- Publication number
- CN105204920A CN105204920A CN201410272772.0A CN201410272772A CN105204920A CN 105204920 A CN105204920 A CN 105204920A CN 201410272772 A CN201410272772 A CN 201410272772A CN 105204920 A CN105204920 A CN 105204920A
- Authority
- CN
- China
- Prior art keywords
- data
- mapping
- calculation
- distributed
- output
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
一种基于映射聚合的分布式计算的实现方法和装置;所述实现方法至少包括两个映射计算任务;其中,还包括至少一个连接计算任务;所述连接计算任务包括如下步骤:接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;对所述接收的输入数据执行连接运算;将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。本申请的方法使得在分布式计算平台的关系运算具有简单、灵活的特点。
Description
技术领域
本申请涉及分布式计算系统,具体涉及一种基于映射聚合的分布式计算作业的实现方法及装置。
背景技术
随着互联网的发展,人类正式进入了信息爆炸时期的。海量的信息在很多应用都会出现,比如一些社交网络应用中记录用户行为日志通常都是以GB、TB或PB为单位的,有的情况下数据量甚至更高。常规的单机计算模式已经不能支撑如此巨大的数据量。
在传统的数据计算中,在一个机器上对数据进行计算对于机器当前的配置而言是完全可以支撑的。例如,常见的服务器内存是100G,把所有计算数据都缓存进内存进行科学计算是可以实现的。但是,对于一些应用的用户日志是以TB为单位的数据的情形,这些数据是不可能一次性的全部缓存进内存进行计算的;而即使可以对服务器的内存进行扩充,但是对硬件的要求非常高,运算耗时也非常长,也即运算代价是非常大的。此时一种可行的方案是通过一定的运算机制把计算任务分担到多台机器上,让每台机器都承担一部分的计算和数据存储的任务。这就降低了对单机的配置要求,可以使用普通的机器进行科学计算。也就是说,计算必须以分布式的把巨大的计算任务分成小的单机可以承受的计算任务。
但是,分布式计算的开发以及维护复杂而多变,需要考虑的问题非常多,诸如,分布式计算时数据的拆分与分配,计算的合并,计算节点错误的处理,计算过程中的通信等。上述的开发工作,在每次计算时都需要开发人员从头统筹考虑,这对开发人员的要求是非常高的。基于此,分布式计算框架应运而生,开发人员通过分布式框架将计算的细节进行封装,并提供相应的接口,后续开发人员仅仅需要考虑与现有框架的匹配,在计算框架的架构下进行任务处理即可,无需理会分布式计算过程中各种问题和计算异常问题。
一种典型的分布式计算框架为map(映射)-reduce(聚合)分布式计算框架(也称为计算模型)。map-reduce分布式计算框架的基本原理如下:在map-reduce计算框架中,在接收到任务之后,首先将一次任务分解成若干计算单元,每一次计算单元请求,被称为作业。为了完成这个作业,它进行两步走的战略,首先是将其拆分成若干个map任务,分配到不同的机器上去执行,每一个map任务拿输入文件的一部分作为自己的输入,经过一些计算,生成某种格式的中间文件,这种格式,与最终所需的文件格式完全一致,但是仅仅包含一部分数据。因此,等到所有map任务完成后,它会进入下一个步骤,用以合并这些中间文件获得最后的输出文件。此时,系统会生成若干个reduce任务,同样也是分配到不同的机器去执行,它的目标,就是将若干个map任务生成的中间文件为汇总到最后的输出文件中去。当然,这个汇总不总会像1+1=2那么直接了当,这也就是reduce任务的价值所在。经过如上步骤,最终,作业完成,所需的目标文件生成。整个算法的关键,就在于增加了一个中间文件生成的流程,大大提高了灵活性,使其分布式扩展性得到了保证。
然而,采用上述的map-reduce框架实现关系运算有很大的局限性。一些复杂关系运算需要多个map-reduce作业配合才能完成,这使得运算过程冗长复杂。而一些只需要一级任务完成的简单关系运算也必须严格遵守map-reduce计算框架。此外,map-reduce计算框架的接口太过简单,只能完成两级任务结构,而一些功能需要多个任务才能实现,上述这些局限性对关系运算实现的灵活性和性能产生了很大的影响。
发明内容
本申请提供一种基于映射聚合的分布式计算的实现方法,以解决现有计算结构框架中存在的上述问题。
本申请的方法包括一种基于映射聚合的分布式计算的实现方法,所述实现方法至少包括两个映射计算任务;其中,还包括至少一个连接计算任务;所述连接计算任务包括如下步骤:
接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;
对所述接收的输入数据执行连接运算;
将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。
可选的,所述接收来分布式计算作业的至少两个映射计算任务的输出数据作为输入具体包括:
接收来自不同分布式计算作业的至少两个初始映射计算任务的输出作为输入。
可选的,所述接收来不同自分布式计算作业的至少两个初始映射计算任务的输出数据作为输入的步骤中,每一映射计算任务包括如下步骤:
获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;
按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;
对所述块数据执行映射操作,形成相应的中间键值对集合;
将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
可选的,所述将生成的所述中间键值对集合按照设定的格式输出包括:
将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;
对每一桶中的数据记录按照选定的字段元素进行排序;
其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。
可选的,将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配到不同的桶中具体包括:
将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同区域中暂存。
可选的,所述将生成的所述中间键值对集合按照设定的格式输出包括:
将所述将生成的所述中间键值对集合中的数据按照设定的规则进行分组;
将每一组数据分配到内存中的不同区域中暂存,每一区域称为一个桶;
对每一桶中的数据记录按照选定的字段元素进行排序;
其中,分组的数目和桶的数目均与该分布式式计算的映射任务相应的规约任务数目相一致。
可选的,所述对所述接收的输入数据执行连接运算包括:
对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;
对接收到的排序后的数据分别进行分组;
选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;
将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;
若满足,则对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断;
将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断和连接操作,直至所有映射计算任务的所有分组数据均与相应的分组数据执行了所述判断及连接操作。
可选的,所述连接操作包括内连接和外连接。
可选的,所述连接操作为内连接,
所述对所述两组数据执行连接操作具体包括对所述两组数据做笛卡尔积;
相应的,在第一分组数据与该其它映射计算任务的分组数据满足不满足连接条件时,舍弃该其它映射计算任务的该分组数据。
可选的,所述依据连接操作主键值并按照相同的规则进行排序具体包括:
依据连接操作的主键值按照主键值由小到大或由大到小或主键值按照其他特定的顺序进行排序。
可选的,还包括聚合计算任务;
相应的,所述将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中具体为将所述连接运算的结果格式化为输出文件格式输出;且,将所述连接运算的结果格式化为输出文件格式后的输出结果作为所述聚合计算任务的输入数据。
相应的,本申请还提供一种基于映射聚合的分布式计算的实现装置,所述实现装置至少包括两个用于实现映射计算任务的映射计算单元;其中,还包括至少一个用于实现连接计算任务的连接运算单元;所述连接运算单元包括如下步骤:
输入单元,用于接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;
连接运算执行单元,用于对所述接收的输入数据执行连接运算;
输出单元,用于将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。
可选的,所述输入单元具体用于接收来不同自分布式计算作业的至少两个初始映射计算任务的输出作为输入。
可选的,所述映射计算任务包括:
获取单元,用于获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;
映射计算输入单元,按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;
映射计算执行单元,用于对所述块数据执行映射操作,形成相应的中间键值对集合;
映射计算输出单元,用于将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
可选的,所述映射计算输出单元,包括:
混洗单元,用于将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;
桶内排序单元,用于对每一桶中的数据记录按照选定的字段元素进行排序;
其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。
可选的,所述混洗单元具体用于:将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同区域中暂存。
可选的,所述连接运算执行单元包括:
排序单元,用于对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;
分组单元,用于对接收到的排序后的数据分别进行分组;
连接判断单元,用于选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断;
执行单元,用于在若满足时对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断。
可选的,所述执行单元具体用于在若满足时对所述两组数据做笛卡尔积。
可选的,所述排序单元具体用于依据连接操作的主键值按照主键值由小到大或由大到小或主键值按照其他特定的顺序进行排序。
可选的,还包括用于实现聚合计算任务的聚合计算单元;
相应的,所述输出单元具体用于将所述连接运算的结果格式化为输出文件格式输出;且,将所述连接运算的结果格式化为输出文件格式后的输出结果作为所述聚合计算单元的输入数据。
与现有技术相比,本申请具有以下优点:本申请提供一种基于映射聚合的分布式计算系统的实现方法,本方法中,对分布式计算任务进行了抽象,在map-reduce的基础上,又提出一种join(连接)任务,该连接任务专门对数据关系运算中的连接操作进行优化;形成map-reduce-join结构框架;通过将map-reduce结构框架和有向无环图运算关系相结合,保留map-reduce接口接单的优点,并且结合有向无环图接口灵活的优点,将接口封装成map-reduce-join,多级任务可以基于有向无环图运算关系实现多级依赖,对关系运算中常用的连接操作进行优化,使在分布式计算平台的关系运算具有简单、灵活的特点。
附图说明
图1是本申请的一种基于映射聚合的分布式实现方法的实施例的流程图;
图2为本申请的一种基于映射聚合的分布式实现方法的实施例中的映射计算任务的实现流程图;
图3为本申请的一种基于映射聚合的分布式实现装置的实施例的结构示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
本申请提出了一种基于映射聚合的分布式计算的实现方法,本方法至少包括有两个映射计算任务,其中所述两个映射计算任务分别来自于不同的计算作业;本申请的方法还包括至少一个连接计算任务,所述连接计算任务包括如下步骤接收至少来自分布式计算作业的两个映射计算任务(task)的输出数据,作为连接计算任务的输入;对所述接收的输入数据执行连接运算;将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。如上所述,本申请的方法中,在分布式计算中引入专门针对关系运算的连接计算任务,并同时与映射计算任务或聚合计算任务相配合实现分布式运算。下面结合具体实施例对本身的方法进行详细说明。
请参考图1,其为本申请的一种基于映射聚合的分布式实现方法的实施例的流程图。
步骤S100,执行第一映射计算任务和第二映射计算任务。
本实施例中,所述第一映射计算任务和第二映射计算任务分别来自于不同的分布式计算作业。而且,本实施例的映射计算任务不同于传统的map-reduce的map任务,在传统的map-reduce的计算方法如背景技术中的描述。本实施例中,对映射计算任务的进行抽象,将映射计算任务抽象为作业数据的输入,作业数据的映射操作,以及将映射操作结果的输出三个步骤。每一步骤都通过设定的数据接口而实现。例如,本申请的映射计算任务包括如下可编程组件:
SimpleInput:对作业输入数据的抽象,用于映射任务(mapTask)的输入,它将数据(该数据为分布式计算作业的数据)进行分片,每个mapTask的实例(mapinstance,映射任务实例)对应其中的一片数据,mapTask会解析输入数据格式,生成一个记录序列。
SimpleOutput:对作业输出数据的抽象,用于最后一级任务的输出(FinalTask,该最后一级任务可以为映射计算任务,也可以为聚合计算任务,或者为下述的连接计算任务,总之,该可编程组件为整个分布式计算作业最后的输出)的输出,它将数据记录序列转化为指定的数据格式,并写入指定的文件系统。
SortedShuffleOutput:与MergedInput(见下述的连接计算任务的可编程组件)一起使用,首先将记录序列分配(shuffle)到不同的桶(bucket)中,一个bucket的数据对应这个到下一个Task的实例。Task之间的数据流动是由SortedShuffleOutput和MergedInput一起实现的。
mapProcessor:对应map-reduce的map操作,输入来自SimpleInput,每次处理一条记录,用于作业的第一级Task。
下面详细说明本实施中的映射计算任务对数据的处理过程。本实施例中,所述映射计算任务为初始映射计算任务,也称为一级映射计算任务。其处理步骤如图2中所示:步骤S102获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;S104按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;S106对所述块数据执行映射操作,形成相应的中间键值对集合;S108将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
具体而言,对于一分布式计算作业,首先要根据数据大小,将数据切分成若干份,每一份数据的大小执行根据分布式处理任务的节点的处理能力而确定,同时兼顾整体分布式计算的效率。一般而言,每份数据的大小约为1G到2G(在此仅举例说明,实际大小可以根据分布式计算平台及计算需要的相关配置而确定)。无论如何,将数据切片后,即确定了每一片数据的大小以及被分成的份数。每一份数据对应一映射计算任务,有多少份数据,就会有多少个映射计算任务。同时,若后续有聚合计算任务,根据映射计算任务的多少也可以依据一定的规则确定聚合计算任务的数目。接着,根据待输入的数据块的文件格式配置SimpleInput,通过上述SimpleInput组件读取所述数据块,并根据所述文件格式选择相应的解析方法,将读取的结果给MapProcessor处理。MapProcessor接收SimpleInput传递的数据,执行相应的映射操作,并把执行映射操作后的结果写入到可编程组件SortedShuffleOutput。
SortedShuffleOutput接收MapProcessor处理后输出的数据后,一种处理方式如下:将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;然后对每一桶中的数据记录按照选定的字段元素进行排序,将排序后的数据作为给对应的后续计算任务运行实例的输入使用的数据;其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。本实施例中,所述计将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存具体为将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同的桶中。其中,所述哈希计算规则是指使用hash函数(也称为散列函数)随机分配输出的数据记录至内存不同区域中。其基本原理如下,使用一个下标范围比较大的数组来存储数据,例如设计hash函数,使得每一数据元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素,相当于按照关键字为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地方,称为桶。其具体过程如下:首先分配可用的内存,形成许多桶,利用hash函数,对键(key)进行映射到不同区域(桶)进行保存。通过哈希表分配分配方式,可以使得数据的存储和查询消耗的时间大大降低,从而提高效率。后续的取数据过程也通过上述hash过程而完成,这里不再赘述。SortedShuffleOutput接收MapProcessor处理后输出的数据后,还可以通过如下方式处理:将所述将生成的所述中间键值对集合中的数据按照设定的规则进行分组;将每一组数据分配到内存中的不同区域中暂存,每一区域称为一个桶;对每一桶中的数据记录按照选定的字段元素进行排序;其中,分组的数目和桶的数目均与该分布式式计算的映射任务相应的规约任务数目相一致。在上面的描述中,以内存中不同的区域作为桶实现数据的暂存或存储。需要说明的是,这并非唯一的选择,在实际的计算中,分布式计算平台也可以分布式计算的各个节点作为桶实现与内存存储相同的功能,这里不再展开描述。任何能够提供可标记的存储空间作为桶并可以hash规则实现数据存取的存储介质、载体等均可以应用与此,本申请对此不作限制。
所述的第一映射计算任务和第二映射计算任务均可以采用上述的处理流程实现。
步骤200,执行连接计算任务。
本申请的实施例中,连接运行任务包括如下可编程组件:
MergedInput:与上述的SortedShuffleOutput一起使用,用于处理SortedShuffleOutput的结果,按照一定的规则将多个来自SortedShuffleOutput的记录序列合并成一个有序的记录序列。
JoinProcessor:针对关系运算中常用的连接操作特别抽象出来的一类操作,一般有两路以上的输入,每路均来自MergedInput;首先按不同的路将相等的记录分成一组,每一路作为一个输入给JoinProcess(JoinProcessor的执行者),JoinProccess首先判断是否满足关联的条件,如果满足,会以组为单位把各路输入关联起来。
请继续参考图1,本实施例中,所述连接计算任务包括如下步骤:S202接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;S204对所述接收的输入数据执行连接运算;S206,将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。下面进行详细说明。
步骤S202,接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入。通过所述MergedInput接口输入上述两路映射计算任务的输出数据。每一路mapTask对应一路MergedInput,MergedInput读取对应来自mapTask的输入,排序并组织成以组为单位给JoinProcessor使用。具体的,MergedInput通过一定的hash规则由上述的桶中获取数据。
步骤S204,对所述接收的输入数据执行连接运算。
本实施例中,执行连接运算的步骤如下:对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;对接收到的排序后的数据分别进行分组;选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;若满足,则对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断;将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断和连接操作,直至所有映射计算任务的所有分组数据均与相应的分组数据执行了所述判断及连接操作。
具体而言,连接运算执行组件接收通过其相应接口输入的两路数据,首先分别将两路数据分组依据连接的主键值按照一定的规则进行排序,例如,两路数据中待连接的主键为“淘宝账户名称”,其对应的主键值为各个淘宝账户的账户名称。本实施例中,依据“淘宝账户名称”的键值按照从大到小或从小到大的顺序对各路数据进行排序,这样,相应的键值的数据记录即可连续排列,即处于向邻位置。当然,排序的规则也可以为其他规则,例如“淘宝账户名称”的键值的各个首字母或拼音首字母按照字母表的顺序排列,排序的目的是为了将相同键值的记录排列在一起,任何能够实现该目的的排序规则均可以应用于此。本步骤中,排序的目的是为了下述步骤中便于分组,以及对分组的数据做连接操作。为便于说明本实施例的方法,本实施例中,采用有小到大的顺序对各路数据进行排序。
对接收到的排序后的数据分别进行分组即将主键值相同的记录分为一组。分组后,可在第一路数据(可定义第一路数据为来自于第一映射计算任务的输出结果的数据)中首先选择主键值排序时为最小的一组数据,称为第一分组数据,将所述第一分组数据与第二路数据(可定义第二路数据为来自于第二映射计算任务的输出结果的数据)的相应主键值最小的一组数据进行是否满足连接关系的判断,即,所述第二路数据的该组数据中是否存在于第一分组数据相同主键值的数据记录,若存在,则执行后续的连接计算操作,并不在对该路数据的其他组座判断;若不存在,则将所述第一分组数据与第二路数据的主键值为次小的数据组做同样的判断和操作。也就是说,将第一分组数据与第二路数据的分组按照上述的排序规则一次进行是否可连接判断,并对可连接的数据组执行连接操作。同样的,对所述第一路数据中主键值为次小的分组数据与第二路数据的数据组执行同样的操作,直至所述第一路数据中的所有数据组均与第二路数据的数据进行上述的操作,即将两路数据中可连接的数据记录执行了连接操作。
本实施例中的连接操作可以为内连接也可以为外连接。若所述连接操作为内连接,则所述对所述两组数据执行连接操作具体包括对所述两组数据做笛卡尔积;相应的,在第一分组数据与该其它映射计算任务的分组数据满足不满足连接条件时,舍弃该其它映射计算任务的该分组数据。
若所述连接操作为外连接,其中,外连接包括左连接和右连接,若被连接的数据记录中没有相应的主键值,则相应数据记录为空值。
本实施例中,接收的为来自两路的数据,需要说明的是,本实施例中所述的可编程组件也可以接收并处理两路以上的数据,处理流程和规则可参照上述的描述,本领域技术人员可以根据上述的记载获得相应处理过程,再次不再赘述。
步骤S206,将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。执行完上述的连接计算之后,将计算的结果通过组件SimpleOut输出存储到分布式文件系统中。需要说明的是,若有后续任务,则上述的连接计算任务组件IntermediateJoinTask,相应的,输出组件为上述SortedShuffleOutput,其输出的处理及暂存过程可参照上述的描述。而在没有后续计算任务时,则连接计算认为的可编程组件称为FinalJoinTask。
其中,所述的下一级任务可以为另外的连接计算任务,也可以为聚合计算任务。若连接计算任务后有聚合计算任务,聚合计算任务通过上述MergedInput组件接收JoinProcessor的输出。所述聚合计算任务包括如下组件:reduceProcessor:对应map-reduce的reduce操作,输入来自MergedInput,
将相等的输入记录分成一组,每次reduceProcess处理一组记录。
reduceTask阶段处理过程包括以下几个步骤:
步骤一:reduceTask通过MergedInput读取JoinTask结果中该运行实例对应的输入,每一个JoinTask运行实例对应一路输入,将这些输入归并成有序序列,按照GroupComparer将有序序列分成不同的组,以组为单位给reduceProcessor使用。在SortedShuffleOutput阶段可以以桶为单位对数据进行排序,所以MergedInput获得的数据每一路都是有序的,只需要一轮归并就可以得到全局有序序列。
步骤二:reduceProceesor以组为单位处理MergedInput的输入数据,在组内部做聚合操作,将聚合的结果写入到SimpleOutput中。
步骤三:SimpleOutput根据将数据格式化为输出文件的格式,并写到分布式文件系统中。本步骤中,聚合计算任务的中MergedInput的处理过程与JoinTask一致,区别在于JoinTask含有多个MergedInput,而reduceTask只有一个MergedInput。
由以上可知,若本申请的分布式计算共包括如下六类任务结构:
InitialmapTask用于作业的第一级任务,必须有后续任务;FinalreduceTask和FinalJoinTask用于作业的最后一级任务,必须有前驱任务;IntermediatereduceTask和IntermediateJoinTask用于作业的中间任务,必须同时有前驱任务和后续任务;mapOnlyTask用于整个作业只有一级任务的情况。互相依赖的任务之间的SortedShuffleOutput和MergedInput必须配套,SimpleInput用于处理作业的输入,SimpleOutput用于处理作业的输出。
本申请提供一种基于映射聚合的分布式计算系统的实现方法,本方法中,对分布式计算任务进行了抽象,在map-reduce的基础上,又提出一种join(连接)任务,该连接任务专门对数据关系运算中的连接操作进行优化;形成map-reduce-join结构框架;通过将map-reduce结构框架和有向无环图运算关系相结合,保留map-reduce接口接单的优点,并且结合有向无环图接口灵活的优点,将接口封装成map-reduce-join,多级任务可以基于有向无环图运算关系实现多级依赖,对关系运算中常用的连接操作进行优化,使得在分布式计算平台的关系运算具有简单、灵活的特点。
与上述的基于映射聚合的分布式计算的实现方法相对应,本申请还提供一种基于映射聚合的分布式计算的实现装置。请参考图3,其为本申请提供的一种基于映射聚合的分布式计算的实现装置的实施例的示意图。由于该装置与所述一种基于映射聚合的分布式计算的实现方法相类似,此处关于装置的描述仅仅是示意图的,相关之处可参考上述的方法实施例。
本实施例中,提供一种基于映射聚合的分布式计算的实现装置,所述实现装置至少包括两个用于实现映射计算任务的映射计算单元300;其中,还包括至少一个用于实现连接计算任务的连接运算单元400;所述连接运算单元400包括如下步骤:输入单元402,用于接收来自分布式计算作业的至少两个映射计算任务(task)的输出数据,作为连接计算任务的输入;连接运算执行单元404,用于对所述接收的输入数据执行连接运算;输出单元406,用于将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。
可选的,所述输入单元具体用于接收来不同自分布式计算作业的至少两个初始映射计算任务的输出作为输入。
可选的,所述映射计算任务包括:
获取单元,用于获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;
映射计算输入单元,按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;
映射计算执行单元,用于对所述块数据执行映射操作,形成相应的中间键值对集合;
映射计算输出单元,用于将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
可选的,所述映射计算输出单元,包括:
混洗单元,用于将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;
桶内排序单元,用于对每一桶中的数据记录按照选定的字段元素进行排序;
其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。
可选的,所述混洗单元具体用于:将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同的桶中。
可选的,所述连接运算执行单元包括:
排序单元,用于对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;
分组单元,用于对接收到的排序后的数据分别进行分组;
连接判断单元,用于选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断;
执行单元,用于在若满足时对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断。
可选的,所述执行单元具体用于在若满足时对所述两组数据做笛卡尔积。
可选的,所述排序单元具体用于依据连接操作的主键值按照主键值由小到大或由大到小或主键值按照其他特定的顺序进行排序。
可选的,还包括用于实现聚合计算任务的聚合计算单元;
相应的,所述输出单元具体用于将所述连接运算的结果格式化为输出文件格式输出;且,将所述连接运算的结果格式化为输出文件格式后的输出结果作为所述聚合计算单元的输入数据。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (20)
1.一种基于映射聚合的分布式计算的实现方法,所述实现方法至少包括两个映射计算任务;其特征在于,还包括至少一个连接计算任务;所述连接计算任务包括如下步骤:
接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;
对所述接收的输入数据执行连接运算;
将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。
2.根据权利要求1所述的基于映射聚合的分布式计算的实现方法,其特征在于,接收来自分布式计算作业的至少两个映射计算任务的输出数据作为输入具体包括:
接收来自不同分布式计算作业的至少两个初始映射计算任务的输出作为输入。
3.根据权利要求2所述的基于映射聚合的分布式计算的实现方法,其特征在于,所述接收至少来自不同分布式计算作业的两个初始映射计算任务的输出数据作为输入的步骤中,每一映射计算任务包括如下步骤:
获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;
按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;
对所述块数据执行映射操作,形成相应的中间键值对集合;
将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
4.根据权利要求3所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述将生成的所述中间键值对集合按照设定的格式输出包括:
将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;
对每一桶中的数据记录按照选定的字段元素进行排序;
其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。
5.根据权利要求4所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配到不同的桶中具体包括:
将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同区域中暂存。
6.根据权利要求3所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述将生成的所述中间键值对集合按照设定的格式输出包括:
将所述将生成的所述中间键值对集合中的数据按照设定的规则进行分组;
将每一组数据分配到内存中的不同区域中暂存,每一区域称为一个桶;
对每一桶中的数据记录按照选定的字段元素进行排序;
其中,分组的数目和桶的数目均与该分布式式计算的映射任务相应的规约任务数目相一致。
7.根据权利要求1所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述对所述接收的输入数据执行连接运算包括:
对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;
对接收到的排序后的数据分别进行分组;
选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;
将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;
若满足,则对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断;
将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断和连接操作,直至所有映射计算任务的所有分组数据均与相应的分组数据执行了所述判断及连接操作。
8.根据权利要求7所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述连接操作包括内连接和外连接。
9.根据权利要求7所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述连接操作为内连接,
所述对所述两组数据执行连接操作具体包括对所述两组数据做笛卡尔积;
相应的,在第一分组数据与该其它映射计算任务的分组数据满足不满足连接条件时,舍弃该其它映射计算任务的该分组数据。
10.根据权利要求7所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,所述依据连接操作主键值并按照相同的规则进行排序具体包括:
依据连接操作的主键值按照主键值由小到大或由大到小或主键值按照其他特定的顺序进行排序。
11.根据权利要求1所述的基于映射聚合的分布式计算作业的实现方法,其特征在于,还包括聚合计算任务;
相应的,所述将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中具体为将所述连接运算的结果格式化为输出文件格式输出;且,将所述连接运算的结果格式化为输出文件格式后的输出结果作为所述聚合计算任务的输入数据。
12.一种基于映射聚合的分布式计算的实现装置,所述实现装置至少包括两个用于实现映射计算任务的映射计算单元;其特征在于,还包括至少一个用于实现连接计算任务的连接运算单元;所述连接运算单元包括如下步骤:
输入单元,用于接收来自分布式计算作业的至少两个映射计算任务的输出数据,作为连接计算任务的输入;
连接运算执行单元,用于对所述接收的输入数据执行连接运算;
输出单元,用于将所述连接运算的结果格式化为输出文件格式输出或存储至分布式文件系统中。
13.根据权利要求12所述的基于映射聚合的分布式计算的实现装置,其特征在于,所述输入单元具体用于接收来不同自分布式计算作业的至少两个初始映射计算任务的输出作为输入。
14.根据权利要求13所述的基于映射聚合的分布式计算的实现装置,其特征在于,所述映射计算任务包括:
获取单元,用于获取根据分布式计算作业数据大小对该分布式计算作业进行切分而形成的块数据,作为映射计算任务的输入;
映射计算输入单元,按照配置的格式读取并解析所述作为映射计算任务的输入的块数据;
映射计算执行单元,用于对所述块数据执行映射操作,形成相应的中间键值对集合;
映射计算输出单元,用于将生成的所述中间键值对集合按照设定的格式输出,并将该输出作为所述连接计算任务的输入。
15.根据权利要求14所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,所述映射计算输出单元,包括:
混洗单元,用于将生成的所述中间键值对集合中的数据按照设定的计算规则均匀分配内存不同区域中暂存,每一区域成为一个桶;
桶内排序单元,用于对每一桶中的数据记录按照选定的字段元素进行排序;
其中,桶的数目与该分布式式计算的映射任务相应的规约任务数目相一致。
16.根据权利要求15所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,所述混洗单元具体用于:将生成的所述中间键值对集合中的数据按照设定的hash计算规则均匀分配到不同区域中暂存。
17.根据权利要求12所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,所述连接运算执行单元包括:
排序单元,用于对于接收的来自每一映射计算任务的输出数据,依据连接操作主键值并按照相同的规则进行排序;
分组单元,用于对接收到的排序后的数据分别进行分组;
连接判断单元,用于选取来自于任一映射计算任务的任一分组数据,该分组数据称为第一分组数据;将所述第一分组数据分别与所述其它映射计算任务的分组数据按照所述的排序逐一进行如下判断:判断所述第一分组数据是否与该其它映射计算任务的分组数据满足连接条件;将所述第一分组数据的所有分组分别与其它所有映射计算任务的分组数据进行上述判断;
执行单元,用于在若满足时对所述两组数据执行连接操作,并不再对该其它映射计算任务的剩余分组进行判断。
18.根据权利要求17所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,所述执行单元具体用于在若满足时对所述两组数据做笛卡尔积。
19.根据权利要求17所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,所述排序单元具体用于依据连接操作的主键值按照主键值由小到大或由大到小或主键值按照其他特定的顺序进行排序。
20.根据权利要求12所述的基于映射聚合的分布式计算作业的实现装置,其特征在于,还包括用于实现聚合计算任务的聚合计算单元;
相应的,所述输出单元具体用于将所述连接运算的结果格式化为输出文件格式输出;且,将所述连接运算的结果格式化为输出文件格式后的输出结果作为所述聚合计算单元的输入数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410272772.0A CN105204920B (zh) | 2014-06-18 | 2014-06-18 | 一种基于映射聚合的分布式计算作业的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410272772.0A CN105204920B (zh) | 2014-06-18 | 2014-06-18 | 一种基于映射聚合的分布式计算作业的实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105204920A true CN105204920A (zh) | 2015-12-30 |
CN105204920B CN105204920B (zh) | 2019-07-23 |
Family
ID=54952620
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410272772.0A Active CN105204920B (zh) | 2014-06-18 | 2014-06-18 | 一种基于映射聚合的分布式计算作业的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105204920B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106339480A (zh) * | 2016-08-31 | 2017-01-18 | 天津南大通用数据技术股份有限公司 | 数据分组聚合数据分布的选择方法及装置 |
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN107368300A (zh) * | 2017-06-26 | 2017-11-21 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN108664322A (zh) * | 2017-03-29 | 2018-10-16 | 广东神马搜索科技有限公司 | 数据处理方法及系统 |
CN109189746A (zh) * | 2018-07-12 | 2019-01-11 | 北京百度网讯科技有限公司 | 通用流式Shuffle引擎的实现方法、装置、设备及存储介质 |
CN109359152A (zh) * | 2018-12-07 | 2019-02-19 | 泰康保险集团股份有限公司 | 基于切片的编码映射方法、装置、电子设备、存储介质 |
CN109788013A (zh) * | 2017-11-14 | 2019-05-21 | 阿里巴巴集团控股有限公司 | 分布式系统中作业资源分配方法、装置及设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102831120B (zh) * | 2011-06-15 | 2017-07-21 | 腾讯科技(深圳)有限公司 | 一种数据处理方法及系统 |
CN102880510A (zh) * | 2012-09-24 | 2013-01-16 | 中国科学院对地观测与数字地球科学中心 | 基于多数据架构中心面向数据密集型应用的并行编程方法 |
CN103106249B (zh) * | 2013-01-08 | 2016-04-20 | 华中科技大学 | 一种基于Cassandra的数据并行处理系统 |
CN103617087B (zh) * | 2013-11-25 | 2017-04-26 | 华中科技大学 | 一种适合迭代计算的MapReduce优化方法 |
-
2014
- 2014-06-18 CN CN201410272772.0A patent/CN105204920B/zh active Active
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106446039A (zh) * | 2016-08-30 | 2017-02-22 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN106446039B (zh) * | 2016-08-30 | 2020-07-21 | 北京航空航天大学 | 聚合式大数据查询方法及装置 |
CN106339480A (zh) * | 2016-08-31 | 2017-01-18 | 天津南大通用数据技术股份有限公司 | 数据分组聚合数据分布的选择方法及装置 |
CN108664322A (zh) * | 2017-03-29 | 2018-10-16 | 广东神马搜索科技有限公司 | 数据处理方法及系统 |
CN107368300A (zh) * | 2017-06-26 | 2017-11-21 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN107368300B (zh) * | 2017-06-26 | 2020-09-08 | 北京天元创新科技有限公司 | 一种基于MapReduce的数据汇总系统及方法 |
CN109788013A (zh) * | 2017-11-14 | 2019-05-21 | 阿里巴巴集团控股有限公司 | 分布式系统中作业资源分配方法、装置及设备 |
CN109189746A (zh) * | 2018-07-12 | 2019-01-11 | 北京百度网讯科技有限公司 | 通用流式Shuffle引擎的实现方法、装置、设备及存储介质 |
CN109189746B (zh) * | 2018-07-12 | 2021-01-22 | 北京百度网讯科技有限公司 | 通用流式Shuffle引擎的实现方法、装置、设备及存储介质 |
CN109359152A (zh) * | 2018-12-07 | 2019-02-19 | 泰康保险集团股份有限公司 | 基于切片的编码映射方法、装置、电子设备、存储介质 |
CN109359152B (zh) * | 2018-12-07 | 2021-01-29 | 泰康保险集团股份有限公司 | 基于切片的编码映射方法、装置、电子设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105204920B (zh) | 2019-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105204920A (zh) | 一种基于映射聚合的分布式计算作业的实现方法及装置 | |
Parsian | Data algorithms: Recipes for scaling up with hadoop and spark | |
CN106104592B (zh) | 映射带键实体的属性 | |
US11307049B2 (en) | Methods, apparatuses, systems, and storage media for storing and loading visual localization maps | |
US9563697B1 (en) | Calculating differences between datasets having differing numbers of partitions | |
CN105786808A (zh) | 一种用于分布式执行关系型计算指令的方法与设备 | |
CN105550225A (zh) | 索引构建方法、查询方法及装置 | |
JP2010503117A (ja) | 動的フラグメントマッピング | |
CN108205571B (zh) | 键值数据表的连接方法及装置 | |
CN106326475A (zh) | 一种高效的静态哈希表实现方法及系统 | |
CN111221813B (zh) | 数据库索引以及数据库查询的处理方法、装置及设备 | |
CN107038059A (zh) | 虚拟机部署方法及装置 | |
CN105447030A (zh) | 一种索引处理方法与设备 | |
CN106844288A (zh) | 一种随机字符串生成方法及装置 | |
CN105824855A (zh) | 一种对数据对象筛选分类的方法、装置以及电子设备 | |
US20110264703A1 (en) | Importing Tree Structure | |
CN111324781A (zh) | 一种数据分析方法、装置及设备 | |
CN106575296B (zh) | 用于托管的分析的动态n维立方体 | |
CN106294530A (zh) | 规则匹配的方法和系统 | |
CN111125216B (zh) | 数据导入Phoenix的方法及装置 | |
CN104239520A (zh) | 一种基于历史信息的hdfs数据块放置策略 | |
CN104750743A (zh) | 一种交易文件勾对系统和方法 | |
WO2016038858A1 (ja) | データ管理システム、データ管理装置、データ管理方法、および、プログラム | |
CN110221778A (zh) | 酒店数据的处理方法、系统、存储介质以及电子设备 | |
CN110019357B (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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20211110 Address after: Room 554, floor 5, building 3, No. 969, Wenyi West Road, Wuchang Street, Yuhang District, Hangzhou City, Zhejiang Province Patentee after: Taobao (China) Software Co., Ltd Address before: P.O. Box 847, 4th floor, Grand Cayman capital building, British Cayman Islands Patentee before: Alibaba Group Holdings Limited |