CN102999323A - 一种生成目标代码的方法、数据处理的方法及装置 - Google Patents

一种生成目标代码的方法、数据处理的方法及装置 Download PDF

Info

Publication number
CN102999323A
CN102999323A CN201110276309XA CN201110276309A CN102999323A CN 102999323 A CN102999323 A CN 102999323A CN 201110276309X A CN201110276309X A CN 201110276309XA CN 201110276309 A CN201110276309 A CN 201110276309A CN 102999323 A CN102999323 A CN 102999323A
Authority
CN
China
Prior art keywords
node
intermediate code
logic
original graph
data
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
Application number
CN201110276309XA
Other languages
English (en)
Other versions
CN102999323B (zh
Inventor
陈晓鸣
付力力
桑文锋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201110276309.XA priority Critical patent/CN102999323B/zh
Publication of CN102999323A publication Critical patent/CN102999323A/zh
Application granted granted Critical
Publication of CN102999323B publication Critical patent/CN102999323B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种生成Map/Reduce模型的目标代码的方法、数据处理的方法及装置,其中生成Map/Reduce模型的目标代码的方法,包括:A.获取用户指令;B.根据所述用户指令生成中间码原始图;C.对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图;D.将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。通过上述方式,降低了普通开发人员的工作难度,提高了代码的可重用性,有利于代码的移植和维护。

Description

一种生成目标代码的方法、数据处理的方法及装置
【技术领域】
本发明涉及数据处理技术,特别涉及一种生成Map/Reduce模型的目标代码的方法、数据处理的方法及装置。
【背景技术】
分布式计算研究如何将一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。而由Google提出的Map/Reduce模型,就是一个分布式计算模型。Map/Reduce模型,通过Map阶段,将可以并列执行的任务分别并列执行,然后再通过Reduce阶段,将Map阶段并列执行的任务产生的中间结果合并,从而得到最终结果。在现有技术中,已经实现的Map/Reduce模型的分布式计算开发平台,通常都是与开发语言紧密结合的,这使得普通开发人员,当需要在自己的程序中嵌入分布式应用时,必须熟悉相应的Map/Reduce平台及其相应的语言,这增加了开发人员的开发难度,同时也降低了代码的可重用性。请参考图1,图1为现有技术中采用Map/Reduce模型进行数据处理的方法的示意图。在图1中,Map阶段和Reduce阶段的目标代码,指的都是与某种开发语言结合的代码,在现有的Map/Reduce模型的实现方式中,这些目标代码都是由普通开发人员通过手工的方式来生成的。并且Map/Reduce过程可能存在多个阶段(如图1中的第一阶段、第N阶段),这些阶段也是由普通开发人员通过手工代码的方式进行划分的,可见,在现有的Map/Reduce分布式应用开发中,对普通开发人员的要求较高,并且由不同的开发人员开发的代码,也很难重用。
【发明内容】
本发明所要解决的技术问题是提供一种生成Map/Reduce模型的目标代码的方法、数据处理的方法及装置,以解决现有技术采用Map/Reduce模型进行数据处理时存在的对普通开发人员而言,开发难度高,代码可重用性差的缺陷。
本发明为解决技术问题而采用的技术方案是提供一种生成Map/Reduce模型的目标代码的方法,包括:A.获取用户指令;B.根据所述用户指令生成中间码原始图,所述中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成;C.对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图,其中所述执行阶段有一个或多个;D.将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
根据本发明之一优选实施例,所述步骤B包括:B1.将所述用户指令转化为多个不可再分割的数据处理操作;B2.将各个不可再分割的数据处理操作转换为所述中间码原始图的各个节点,并根据所述用户指令中的数据传递方向得到连接各个节点的有向边,从而得到所述中间码原始图。
根据本发明之一优选实施例,所述步骤C包括:C1.按照预先定义的节点类型,在所述中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,所述预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点;C2.从所述中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
根据本发明之一优选实施例,所述方法在步骤C前进一步包括:对所述中间码原始图中的节点进行优化;所述优化的策略包括以下S1、S2和S3中的至少一项:S1.从所述中间码原始图中的输出节点开始向前遍历,找出通过所述中间码原始图的有向边能到达该输出节点的所有前置节点并进行标记,删除所述中间码原始图中未被标记的节点;S2.将等价节点进行合并,其中所述等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖于其他节点或依赖于相同节点的节点;S3.将仅依赖于一个节点且满足合并策略的邻接节点进行合并。
根据本发明之一优选实施例,所述S3采用的合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
根据本发明之一优选实施例,所述步骤D中,将所述中间码阶段图中的每个节点翻译为所述目标代码中的代表不可再分割的数据处理操作的一个类的实例,将所述中间码阶段图中的每条有向边翻译为所述目标代码中的代表数据传递的一个方法。
本发明还提供了一种数据处理方法,包括:a.获取待处理的数据;b.采用前文所述的生成Map/Reduce模型的目标代码的方法生成的目标代码对所述待处理的数据进行处理以得到处理结果。
本发明还提供了一种生成Map/Reduce模型的目标代码的装置,包括:指令获取单元,用于获取用户指令;图生成单元,用于根据所述用户指令生成中间码原始图,所述中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成;分解单元,用于对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图,其中所述执行阶段有一个或多个;翻译单元,用于将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
根据本发明之一优选实施例,所述图生成单元包括:转化子单元,用于将所述用户指令转化为多个不可再分割的数据处理操作;图生成子单元,用于将各个不可再分割的数据处理操作转换为所述中间码原始图的各个节点,并根据所述用户指令中的数据传递方向得到连接各个节点的有向边,从而得到所述中间码原始图。
根据本发明之一优选实施例,所述分解单元包括:补充子单元,用于按照预先定义的节点类型,在所述中间码原始图中隐含分组逻辑节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,所述预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点;拆分子单元,用于从所述中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
根据本发明之一优选实施例,所述装置进一步包括优化单元,用于对所述中间码原始图中的节点进行优化;所述优化的策略包括以下L1、L2和L3中的至少一项:L1.从所述中间码原始图中的输出节点开始向前遍历,找出通过所述中间码原始图的有向边能到达该输出节点的所有前置节点并进行标记,删除所述中间码原始图中未被标记的节点;L2.将等价节点进行合并,其中所述等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖其他节点或依赖相同节点的节点;L3.将仅依赖一个节点且满足合并策略的邻接节点进行合并。
根据本发明之一优选实施例,所述L3采用的合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
根据本发明之一优选实施例,所述翻译单元将所述中间码阶段图中的每个节点翻译为所述目标代码中的代表不可再分割的数据处理操作的一个类的实例,将所述中间码阶段图中的每条有向边翻译为所述目标代码中的代表数据传递的一个方法。
本发明还提供了一种数据处理装置,包括:数据获取单元,用于获取待处理的数据;数据处理单元,用于采用前文所述的生成Map/Reduce模型的目标代码的装置生成的目标代码对所述待处理的数据进行处理以得到处理结果。
由以上技术方案可以看出,通过将普通开发人员的指令转化为中间码图的形式,可以向普通开发人员屏蔽Map/Reduce模型的具体实现过程,普通开发人员不需要了解Map/Reduce模型的实现平台及相应的开发语言,就可以使用Map/Reduce模型实现分布式应用开发,降低了普通开发人员的工作难度,同时由于目标代码不是由各个普通开发人员手工生成,也大大提高了代码的可重用性,有利于代码的移植和维护。
【附图说明】
图1为现有技术中采用Map/Reduce模型进行数据处理的方法的示意图;
图2为本发明中生成Map/Reduce模型的目标代码的方法的实施例的流程示意图;
图3为本发明中中间码原始图的实施例示意图;
图4为本发明中中间码补充图的实施例示意图;
图5为本发明中中间码补充图切分后的第一阶段的实施例示意图;
图6为本发明中中间码补充图切分后的第二阶段的实施例示意图;
图7为本发明中中间码补充图切分后的第三阶段的实施例示意图;
图8为本发明中中间码阶段图的第一阶段的实施例示意图;
图9为本发明中中间码阶段图的第二阶段的实施例示意图;
图10为本发明中中间码阶段图的第三阶段的实施例示意图;
图11为本发明中数据处理方法的实施例的流程示意图;
图12为本发明中采用Map/Reduce模型进行数据处理的方法的示意图;
图13为本发明中生成Map/Reduce模型的目标代码的装置的实施例的结构示意框图;
图14为本发明中数据处理装置的实施例的结构示意框图。
【具体实施方式】
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
请参考图2,图2为本发明中生成Map/Reduce模型的目标代码的方法的流程示意图。如图2所示,所述方法包括:
步骤101:获取用户指令。
步骤102:根据用户指令生成中间码原始图。
步骤103:对中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
步骤104:将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
下面对以上步骤进行详细介绍。
在步骤101中,用户指的是普通开发人员,用户指令表达了普通开发人员希望实现的某种功能,其可以通过普通开发人员与图形界面进行交互时得到,也可以通过普通开发人员直接输入的某种程序语言代码得到。例如下面片段就是以PHP格式的程序接口体现的用户指令:
DQuery::input()//读取输入数据
select(array(′word′=>′_UrlFields.word′))//选择其中的某一列,命名为word
filter(array(array(′word′,″!==″,null)))//以word列不为空为条件进行过滤
group(′word′)//按word列进行分组
coubtEach(′word′,′count_per_word′)//对每组进行计数
top(′count_per_word′,100)//求出计数前100的词
outputAsFile(′word_count′,′词频统计′)//输出到文件
......
步骤102中,中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成的。步骤102包括步骤1021与步骤1022,其中步骤1021:将用户指令转化为多个不可再分割的数据处理操作,步骤1022:将各个不可再分割的数据处理操作转换为中间码原始图的各个节点,并根据用户指令中的数据传递方向得到连接各个节点的有向边,从而得到中间码原始图。
以上面所举的用户指令为例,不可再分割的数据处理操作包括:读取数据、选择字段、进行过滤、进行分组/聚合、进行计数、进行排序、输出数据。其中分组/聚合的数据处理操作是成对出现的,用户指令中有分组的逻辑,在对应的不可再分割的数据处理操作中就会成对出现分组/聚合的数据处理操作。请参考图3,图3为本发明中中间码原始图的实施例示意图。图3中的每一个节点分别代表了上述的一个不可再分割的数据处理操作,而图中箭头所指的有向边就是数据传递的方向。其中load节点P34代表读取数据,select节点P35代表选择字段,filter节点P36代表进行过滤,group节点P37代表进行分组,reduce节点P38代表进行聚合,count节点P32代表进行计数,sort节点P39代表进行排序,store节点P40代表输出数据。从图3中可以看出,中间码原始图中有虚线连接的部分,这是中间码原始图中的一个子图,子图表示对分组后的每一组都需要进行的一次操作,在本例中,表示对分组后的每一组都进行一次计数操作。各组计数的结果由reduce节点P38进行聚合。
步骤103中,由于Map/Reduce过程可以分为一个或多个执行阶段,因此需要在这个步骤中将中间码原始图分解成与Map/Reduce过程的各个执行阶段对应的中间码阶段图。步骤103包括步骤1031及步骤1032。
其中步骤1031:按照预先定义的节点类型,在中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点。
中间码原始图中的每一个节点,按照其本身的语义逻辑,都预先被定义了一个节点类型,例如:选择节点(select)、过滤节点(filter)等,属于无分组逻辑的节点,而从用户指令中直接得到的分组节点(group),就属于分组逻辑节点,而排序节点(sort)属于隐含分组逻辑的节点。在本例中,排序操作(sort)从语义上来说,是要求在整个数据集上进行的操作,因此它暗含有一个将数据分为一组的要求。当然,在其他的实施例中,排序操作(sort)也可能是在分组操作(group)后,基于各组上进行的,这时的排序节点(sort)则不属于隐含分组逻辑的节点。
请参考图4,图4为本发明中中间码补充图的实施例示意图。如图4所示,与图3相比,图4增加了group节点P41及reduce节点P42,且sort节点P39作为子图与reduce节点P42相连。这表示排序操作(sort)对分组后的每一组执行一次,且执行结果由reduce节点P42进行聚合,在本例中,由于排序操作(sort)是在整个数据集上进行的,因此group节点P41只将数据分为一组,而排序操作(sort)实际上只执行一次。
步骤1032:从中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
以图4为例进行说明,在group节点P37和reduce节点P38之间、group节点P41及reduce节点P42之间进行切分,则图4所示的中间码补充图可以变为三个部分,分别代表了Map/Reduce过程的三个执行阶段。请参考图5至图7,其中图5为本发明中中间码补充图切分后的第一阶段的实施例示意图,图6为本发明中中间码补充图切分后的第二阶段的实施例示意图,图7为本发明中中间码补充图切分后的第三阶段的实施例示意图。
在得到图5至图7所示的三个执行阶段后,为了使前后两个执行阶段的数据流能够正确衔接,还需要在每个执行阶段之间补充标记数据源的节点和按数据源标记接收相应数据的节点,从而得到与Map/Redcue过程的各个执行阶段对应的中间码阶段图。请参考图8至图10,其中图8为本发明中中间码阶段图的第一阶段的实施例示意图,图9为本发明中中间码阶段图的第二阶段的实施例示意图,图10为本发明中中间码阶段图的第三阶段的实施例的示意图。如图8至图10所示,map_shuffle节点P371及map_shuffle节点P411为标记数据源的节点,用于将本阶段的数据输出,并打上标记,表明数据是从哪来的;reduce_shuffle节点P372及reduce_shuffle节点P412为按数据源标记接收相应数据的节点,用于将符合数据源标记的上一阶段的数据向下传递。
步骤104中,将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译成Map/Reduce过程的各个执行阶段的目标代码,实际上就是将中间码阶段图中的每个节点翻译成目标代码中的代表不可再分割的数据处理操作的一个类的实例,而将中间码阶段图中的每条有向边翻译成目标代码中的代表数据传递的一个方法。目标代码是指与开发语言有关的程序代码,作为普通技术人员,应该知道类、实例与方法的概念,因此在此不再详述这个过程。
在本发明的另一个实施例中,在步骤103前,还进一步包括:对中间码原始图中的节点进行优化。对中间码原始图中的节点进行优化,是为了提高程序执行的效率。优化的策略包括以下几种:
1、从中间码原始图中的输出节点开始向前遍历,找出通过有向边能到达该输出节点的所有前置节点并进行标记,删除中间码原始图中未被标记的节点。
由于中间码原始图是根据用户指令得到的,不排除由于用户指令的错误或其他原因,造成中间码原始图中存在孤立存在的节点(即不依赖于任何节点,也不被任何节点依赖的节点),通过上面所述的方法,可以将中间码原始图中的所有有依赖关系的节点找到,从而可以将孤立存在的节点删除。
2、将等价节点进行合并,其中等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖于其他节点或依赖于相同节点的节点。每个节点都有一些属于该节点自身的属性,其中一个属性指出了数据来源,如果两个节点除了数据来源的属性不同,其他的各个属性均相同,也就是说,这两个节点肯定属于同一类原子操作,并且这两个节点均不依赖于其他节点,例如输入节点(load),或者这两个节点依赖于相同的节点(同一个或多个节点),那么这两个节点就是等价的,因此,可以将这两个等价节点合并。
3、将仅依赖于一个节点且满足合并策略的邻接节点进行合并,其中合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
例如:假设排序节点为sort,有一个取序列值节点为limit,前者用于按照一定的顺序排序,后者用于取出排序在前面的若干条记录,这时可将sort节点与limit节点合并为sort节点。
又如过滤逻辑的节点为filter,邻接的两个filter节点可以合并为一个filter节点,选择逻辑的节点为select,邻接的两个select节点可以合并为一个select节点。
请参考图11,图11为本发明中数据处理方法的实施例的流程示意图。如图11所示,所述方法包括:
步骤201:获取待处理的数据。
步骤202:采用前文所述的生成Map/Reduce模型的目标代码的方法生成的目标代码对待处理的数据进行处理以得到处理结果。
请参考图12,图12为本发明中采用Map/Reduce模型进行数据处理的方法的示意图。与现有技术相比,本发明的目标代码不需要普通开发人员手工生成,而是通过前文所说的生成目标代码的方法,自动生成的。
请参考图13,图13为本发明中生成Map/Reduce模型的目标代码的装置的实施例的结构示意框图。如图13所示,所述装置包括指令获取单元301、图生成单元302、优化单元303、分解单元304和翻译单元305。
其中指令获取单元301,用于获取用户指令。
用户指的是普通开发人员,用户指令表达了普通开发人员希望实现的某种功能,其可以通过普通开发人员与图形界面进行交互时得到,也可以通过普通开发人员直接输入的某种程序语言代码得到。例如下面片段就是以PHP格式的程序接口体现的用户指令:
DQuery::input()//读取输入数据
select(array(′word′=>′_UrlFields.word′))//选择其中的某一列,命名为word
filter(array(array(′word′,″!==″,null)))//以word列不为空为条件进行过滤
group(′word′)//按word列进行分组
coubtEach(′word′,′count_per_word′)//对每组进行计数
top(′count_per_word′,100)//求出计数前100的词
outputAsFile(′word_count′,′词频统计′)//输出到文件
图生成单元302,用于根据用户指令生成中间码原始图,其中中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成的。
图生成单元302包括转化子单元3021和图生成子单元3022,其中转化子单元3021,用于将用户指令转化为多个不可再分割的数据处理操作,图生成子单元3022,用于将各个不可再分割的数据处理操作转换为中间码原始图的各个节点,并根据用户指令中的数据传递方向得到连接各个节点的有向边,从而得到中间码原始图。
以上面所举的用户指令为例,不可再分割的数据处理操作包括:读取数据、选择字段、进行过滤、进行分组/聚合、进行计数、进行排序、输出数据。其中分组/聚合的数据处理操作是成对出现的,用户指令中有分组的逻辑,在对应的不可再分割的数据处理操作中就会成对出现分组/聚合的数据处理操作。请参考图3,图3为本发明中中间码原始图的实施例示意图。图3中的每一个节点分别代表了上述的一个不可再分割的数据处理操作,而图中箭头所指的有向边就是数据传递的方向。其中load节点P34代表读取数据,select节点P35代表选择字段,filter节点P36代表进行过滤,group节点P37代表进行分组,reduce节点P38代表进行聚合,count节点P32代表进行计数,sort节点P39代表进行排序,store节点P40代表输出数据。从图3中可以看出,中间码原始图中有虚线连接的部分,这是中间码原始图中的一个子图,子图表示对分组后的每一组都需要进行的一次操作,在本例中,表示对分组后的每一组都进行一次计数操作。各组计数的结果由reduce节点P38进行聚合。
优化单元303,用于对中间码原始图中的节点进行优化。
对中间码原始图中的节点进行优化,是为了提高程序执行的效率。优化的策略包括以下几种:
1、从中间码原始图中的输出节点开始向前遍历,找出通过有向边能到达该输出节点的所有前置节点并进行标记,删除中间码原始图中未被标记的节点。
由于中间码原始图是根据用户指令得到的,不排除由于用户指令的错误或其他原因,造成中间码原始图中存在孤立存在的节点(即不依赖于任何节点,也不被任何节点依赖的节点),通过上面所述的方法,可以将中间码原始图中的所有有依赖关系的节点找到,从而可以将孤立存在的节点删除。
2、将等价节点进行合并,其中等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖于其他节点或依赖于相同节点的节点。每个节点都有一些属于该节点自身的属性,其中一个属性指出了数据来源,如果两个节点除了数据来源的属性不同,其他的各个属性均相同,也就是说,这两个节点肯定属于同一类原子操作,并且这两个节点均不依赖于其他节点,例如输入节点(load),或者这两个节点依赖于相同的节点(同一个或多个节点),那么这两个节点就是等价的,因此,可以将这两个等价节点合并。
3、将仅依赖于一个节点且满足合并策略的邻接节点进行合并,其中合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
例如:假设排序节点为sort,有一个取序列值节点为limit,前者用于按照一定的顺序排序,后者用于取出排序在前面的若干条记录,这时可将sort节点与limit节点合并为sort节点。
又如过滤逻辑的节点为filter,邻接的两个filter节点可以合并为一个filter节点,选择逻辑的节点为select,邻接的两个select节点可以合并为一个select节点。
分解单元304,用于对中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。由于Map/Reduce过程可以分为一个或多个执行阶段,因此分解单元304需要将中间码原始图分解成与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
分解单元304包括补充子单元3041、拆分子单元3042,其中补充子单元3041,用于按照预先定义的节点类型,在中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点。
中间码原始图中的每一个节点,按照其本身的语义逻辑,都预先被定义了一个节点类型,例如:选择节点(select)、过滤节点(filter)等,属于无分组逻辑的节点,而从用户指令中直接得到的分组节点(group),就属于分组逻辑节点,而排序节点(sort)属于隐含分组逻辑的节点。在本例中,排序操作(sort)从语义上来说,是要求在整个数据集上进行的操作,因此它暗含有一个将数据分为一组的要求。当然,在其他的实施例中,排序操作(sort)也可能是在分组操作(group)后,基于各组上进行的,这时的排序节点(sort)则不属于隐含分组逻辑的节点。
请参考图4,图4为本发明中中间码补充图的实施例示意图。如图4所示,与图3相比,图4增加了group节点P41及reduce节点P42,且sort节点P39作为子图与reduce节点P42相连。这表示排序操作(sort)对分组后的每一组执行一次,且执行结果由reduce节点P42进行聚合,在本例中,由于排序操作(sort)是在整个数据集上进行的,因此group节点P41只将数据分为一组,而排序操作(sort)实际上只执行一次。
拆分子单元3042,用于从中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
以图4为例进行说明,在group节点P37和reduce节点P38之间、group节点P41及reduce节点P42之间进行切分,则图4所示的中间码补充图可以变为三个部分,分别代表了Map/Reduce过程的三个执行阶段。请参考图5至图7,其中图5为本发明中中间码补充图切分后的第一阶段的实施例示意图,图6为本发明中中间码补充图切分后的第二阶段的实施例示意图,图7为本发明中中间码补充图切分后的第三阶段的实施例示意图。
在得到图5至图7所示的三个执行阶段后,为了使前后两个执行阶段的数据流能够正确衔接,还需要在每个执行阶段之间补充标记数据源的节点和按数据源标记接收相应数据的节点,从而得到与Map/Redcue过程的各个执行阶段对应的中间码阶段图。请参考图8至图10,其中图8为本发明中中间码阶段图的第一阶段的实施例示意图,图9为本发明中中间码阶段图的第二阶段的实施例示意图,图10为本发明中中间码阶段图的第三阶段的实施例的示意图。如图8至图10所示,map_shuffle节点P371及map_shuffle节点P41_1为标记数据源的节点,用于将本阶段的数据输出,并打上标记,表明数据是从哪来的;reduce_shuffle节点P37_2及reduce_shuffle节点P41_2为按数据源标记接收相应数据的节点,用于将符合数据源标记的上一阶段的数据向下传递。
翻译单元305,用于将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译成Map/Reduce过程的各个执行阶段的目标代码,实际上就是将中间码阶段图中的每个节点翻译成目标代码中的代表不可再分割的数据处理操作的一个类的实例,而将中间码阶段图中的每条有向边翻译成目标代码中的代表数据传递的一个方法。目标代码是指与开发语言有关的程序代码,作为普通技术人员,应该知道类、实例与方法的概念,因此在此不再详述这个过程。
值得注意的是,在其他实施例中,优化单元303也可以不存在,对中间码原始图不进行优化,并不影响本发明的实施。
请参考图14,图14为本发明中数据处理装置的实施例的结构示意框图。如图14所示,所述装置包括数据获取单元401和数据处理单元402,其中数据获取单元401,用于获取待处理的数据,数据处理单元402,用于采用前文所述的生成Map/Reduce模型的目标代码的装置生成的目标代码对待处理的数据进行处理以得到处理结果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (14)

1.一种生成Map/Reduce模型的目标代码的方法,其特征在于,所述方法包括:
A.获取用户指令;
B.根据所述用户指令生成中间码原始图,所述中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成;
C.对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图,其中所述执行阶段有一个或多个;
D.将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
2.根据权利要求1所述的方法,其特征在于,所述步骤B包括:
B1.将所述用户指令转化为多个不可再分割的数据处理操作;
B2.将各个不可再分割的数据处理操作转换为所述中间码原始图的各个节点,并根据所述用户指令中的数据传递方向得到连接各个节点的有向边,从而得到所述中间码原始图。
3.根据权利要求1所述的方法,其特征在于,所述步骤C包括:
C1.按照预先定义的节点类型,在所述中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,所述预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点;
C2.从所述中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
4.根据权利要求1所述的方法,其特征在于,所述方法在步骤C前进一步包括:对所述中间码原始图中的节点进行优化;
所述优化的策略包括以下S1、S2和S3中的至少一项:
S1.从所述中间码原始图中的输出节点开始向前遍历,找出通过所述中间码原始图的有向边能到达该输出节点的所有前置节点并进行标记,删除所述中间码原始图中未被标记的节点;
S2.将等价节点进行合并,其中所述等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖于其他节点或依赖于相同节点的节点;
S3.将仅依赖于一个节点且满足合并策略的邻接节点进行合并。
5.根据权利要求4所述的方法,其特征在于,所述S3采用的合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
6.根据权利要求1所述的方法,其特征在于,所述步骤D中,将所述中间码阶段图中的每个节点翻译为所述目标代码中的代表不可再分割的数据处理操作的一个类的实例,将所述中间码阶段图中的每条有向边翻译为所述目标代码中的代表数据传递的一个方法。
7.一种数据处理方法,其特征在于,所述方法包括:
a.获取待处理的数据;
b.采用权利要求1至6中任一权项所述方法生成的目标代码对所述待处理的数据进行处理以得到处理结果。
8.一种生成Map/Reduce模型的目标代码的装置,其特征在于,所述装置包括:
指令获取单元,用于获取用户指令;
图生成单元,用于根据所述用户指令生成中间码原始图,所述中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成;
分解单元,用于对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图,其中所述执行阶段有一个或多个;
翻译单元,用于将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
9.根据权利要求8所述的装置,其特征在于,所述图生成单元包括:
转化子单元,用于将所述用户指令转化为多个不可再分割的数据处理操作;
图生成子单元,用于将各个不可再分割的数据处理操作转换为所述中间码原始图的各个节点,并根据所述用户指令中的数据传递方向得到连接各个节点的有向边,从而得到所述中间码原始图。
10.根据权利要求9所述的装置,其特征在于,所述分解单元包括:
补充子单元,用于按照预先定义的节点类型,在所述中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,所述预先定义的节点类型包括:无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点;
拆分子单元,用于从所述中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图。
11.根据权利要求10所述的装置,其特征在于,所述装置进一步包括优化单元,用于对所述中间码原始图中的节点进行优化;
所述优化的策略包括以下L1、L2和L3中的至少一项:
L1.从所述中间码原始图中的输出节点开始向前遍历,找出通过所述中间码原始图的有向边能到达该输出节点的所有前置节点并进行标记,删除所述中间码原始图中未被标记的节点;
L2.将等价节点进行合并,其中所述等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖其他节点或依赖相同节点的节点;
L3.将仅依赖一个节点且满足合并策略的邻接节点进行合并。
12.根据权利要求11所述的装置,其特征在于,所述L3采用的合并策略包括:排序逻辑节点与取序列值逻辑节点合并为一个排序逻辑节点,或两个过滤逻辑节点合并为一个过滤逻辑节点,或两个选择逻辑节点合并为一个选择逻辑节点。
13.根据权利要求8所述的装置,其特征在于,所述翻译单元将所述中间码阶段图中的每个节点翻译为所述目标代码中的代表不可再分割的数据处理操作的一个类的实例,将所述中间码阶段图中的每条有向边翻译为所述目标代码中的代表数据传递的一个方法。
14.一种数据处理装置,其特征在于,所述装置包括:
数据获取单元,用于获取待处理的数据;
数据处理单元,用于采用权利要求8至13中任一权项所述装置生成的目标代码对所述待处理的数据进行处理以得到处理结果。
CN201110276309.XA 2011-09-16 2011-09-16 一种生成目标代码的方法、数据处理的方法及装置 Active CN102999323B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110276309.XA CN102999323B (zh) 2011-09-16 2011-09-16 一种生成目标代码的方法、数据处理的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110276309.XA CN102999323B (zh) 2011-09-16 2011-09-16 一种生成目标代码的方法、数据处理的方法及装置

Publications (2)

Publication Number Publication Date
CN102999323A true CN102999323A (zh) 2013-03-27
CN102999323B CN102999323B (zh) 2016-04-27

Family

ID=47927933

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110276309.XA Active CN102999323B (zh) 2011-09-16 2011-09-16 一种生成目标代码的方法、数据处理的方法及装置

Country Status (1)

Country Link
CN (1) CN102999323B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106202006A (zh) * 2016-06-27 2016-12-07 北京百度网讯科技有限公司 文件生成方法和装置
CN106293653A (zh) * 2015-05-19 2017-01-04 深圳市腾讯计算机系统有限公司 代码处理方法及装置
CN108182281A (zh) * 2018-01-26 2018-06-19 阿里巴巴集团控股有限公司 基于流式计算的数据处理控制方法、装置、服务器及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101114226A (zh) * 2007-08-28 2008-01-30 北京中企开源信息技术有限公司 一种基于模型组件的代码自动生成装置、系统及方法
CN101183368A (zh) * 2007-12-06 2008-05-21 华南理工大学 联机分析处理中分布式计算及查询海量数据的方法和系统
CN102033748A (zh) * 2010-12-03 2011-04-27 中国科学院软件研究所 一种数据处理流程代码的生成方法
US20110167149A1 (en) * 2010-01-06 2011-07-07 The Industry & Academic Cooperation In Chungnam National University Internet flow data analysis method using parallel computations

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101114226A (zh) * 2007-08-28 2008-01-30 北京中企开源信息技术有限公司 一种基于模型组件的代码自动生成装置、系统及方法
CN101183368A (zh) * 2007-12-06 2008-05-21 华南理工大学 联机分析处理中分布式计算及查询海量数据的方法和系统
US20110167149A1 (en) * 2010-01-06 2011-07-07 The Industry & Academic Cooperation In Chungnam National University Internet flow data analysis method using parallel computations
CN102033748A (zh) * 2010-12-03 2011-04-27 中国科学院软件研究所 一种数据处理流程代码的生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
易小华等: "面向MapReduce的数据处理流程开发方法", 《计算机科学与探索》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106293653A (zh) * 2015-05-19 2017-01-04 深圳市腾讯计算机系统有限公司 代码处理方法及装置
CN106293653B (zh) * 2015-05-19 2020-11-06 深圳市腾讯计算机系统有限公司 代码处理方法及装置、计算机可读介质
CN106202006A (zh) * 2016-06-27 2016-12-07 北京百度网讯科技有限公司 文件生成方法和装置
CN106202006B (zh) * 2016-06-27 2019-01-01 北京百度网讯科技有限公司 文件生成方法和装置
CN108182281A (zh) * 2018-01-26 2018-06-19 阿里巴巴集团控股有限公司 基于流式计算的数据处理控制方法、装置、服务器及介质
CN108182281B (zh) * 2018-01-26 2022-02-01 创新先进技术有限公司 基于流式计算的数据处理控制方法、装置、服务器及介质

Also Published As

Publication number Publication date
CN102999323B (zh) 2016-04-27

Similar Documents

Publication Publication Date Title
WO2020135048A1 (zh) 知识图谱的数据融合方法和装置
CN107958057A (zh) 一种用于异构数据库中数据迁移的代码生成方法及装置
CN104317928A (zh) 一种基于分布式数据库的业务etl方法及系统
CN101488126B (zh) 双语语句对齐方法及装置
CN103177120B (zh) 一种基于索引的XPath查询模式树匹配方法
CN102737108B (zh) 处理流程图的方法及装置
CN108664635B (zh) 数据库统计信息的获取方法、装置、设备和存储介质
CN101901265B (zh) 一种虚拟试验数据对象化管理系统
CN105683940A (zh) 处理混合流的数据流图
CN107203658B (zh) 一种基于cad和pdm的船舶系统原理图快速设计方法
CN114818553B (zh) 一种芯片集成设计方法
CN103246549B (zh) 一种数据转存的方法及系统
CN106528512B (zh) 一种excel概预算表格自动编排方法
CN102915344B (zh) 一种sql语句处理方法及装置
CN106599016A (zh) 一种基于虚拟dom的前端元素维护方法
CN103995827B (zh) MapReduce计算框架中的高性能排序方法
CN102999323B (zh) 一种生成目标代码的方法、数据处理的方法及装置
CN103077192A (zh) 一种数据处理方法及其系统
CN111309753B (zh) 结构化查询语句的优化方法、装置、设备及存储介质
CN107103035A (zh) 本地表数据更新方法及装置
CN103810197A (zh) 一种基于Hadoop的数据处理方法及其系统
KR20140076010A (ko) 대용량 xml 데이터에 대한 다수의 가지 패턴 질의의 동시 병렬처리시스템 및 그 방법
CN106874479A (zh) 基于FPGA的FP‑Growth算法的改进方法及装置
CN101770461A (zh) 数据处理方法及处理系统
CN106776275A (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
C14 Grant of patent or utility model
GR01 Patent grant