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

文档序号:6433377阅读:130来源:国知局
专利名称:一种生成目标代码的方法、数据处理的方法及装置的制作方法
一种生成目标代码的方法、数据处理的方法及装置技术领域
本发明涉及数据处理技术,特别涉及一种生成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: :1nput ()// 读取输入 数据
select (array (1 word' = > 1 _UrlFields. word/ ))//选择其中的某一列,命名为word
filter (array (array word' , " ! = = " , null)))//以 word 列不为空为条件进行过滤
group (' word' )//按 word 列进行分组
coubtEachC word' , ' count_per_word' )//对每组进行计数
top (' count_per_word1,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_shuffIe节点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: :1nput ()// 读取输入数据
select (array (1 word' = > 1 _UrlFields. word/ ))//选择其中的某一列,命名为word
filter (array (array word' , " ! = = " , null)))//以 word 列不为空为条件进行过滤
group (' word' )//按 word 列进行分组
coubtEachC 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_l为标记数据源的节点,用于将本阶段的数据输出,并打上标记,表明数据是从哪来的; reduce_shuffle节点P37_2及reduce_shuffIe节点P41_2为按数据源标记接收相应数据 的节点,用于将符合数据源标记的上一阶段的数据向下传递。
翻译单元305,用于将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻 译为Map/Reduce过程的各个执行阶段的目标代码。
将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译成Map/Reduce过 程的各个执行阶段的目标代码,实际上就是将中间码阶段图中的每个节点翻译成目标代码 中的代表不可再分割的数据处理操作的一个类的实例,而将中间码阶段图中的每条有向边 翻译成目标代码中的代表数据传递的一个方法。目标代码是指与开发语言有关的程序代 码,作为普通技术人员,应该知道类、实例与方法的概念,因此在此不再详述这个过程。
值得注意的是,在其他实施例中,优化单元303也可以不存在,对中间码原始图不 进行优化,并不影响本发明的实施。
请参考图14,图14为本发明中数据处理装置的实施例的结构示意框图。如图14 所示,所述装置包括数据获取单元401和数据处理单元402,其中数据获取单元401,用于获 取待处理的数据,数据处理单元402,用于采用前文所述的生成Map/Reduce模型的目标代 码的装置生成的目标代码对待处理的数据进行处理以得到处理结果。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精 神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
权利要求
1.一种生成Map/Reduce模型的目标代码的方法,其特征在于,所述方法包括A.获取用户指令;B.根据所述用户指令生成中间码原始图,所述中间码原始图由指代数据处理方式的节点和节点之间指代数据传递方向的有向边构成;C.对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图,其中所述执行阶段有一个或多个;D.将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。
2.根据权利要求1所述的方法,其特征在于,所述步骤B包括B1.将所述用户指令转化为多个不可再分割的数据处理操作;B2.将各个不可再分割的数据处理操作转换为所述中间码原始图的各个节点,并根据所述用户指令中的数据传递方向得到连接各个节点的有向边,从而得到所述中间码原始图。
3.根据权利要求1所述的方法,其特征在于,所述步骤C包括Cl.按照预先定义的节点类型,在所述中间码原始图中隐含分组逻辑的节点前补充分组逻辑节点及聚合逻辑节点,得到中间码补充图,所述预先定义的节点类型包括无分组逻辑节点、分组逻辑节点及隐含分组逻辑的节点;C2.从所述中间码补充图的分组逻辑节点与聚合逻辑节点之间进行切分,并在切分后的每个部分之间补充标记数据源的节点和按数据源标记接收相应数据的节点,得到与Map/ Reduce过程的各个执行阶段对应的中间码阶段图。
4.根据权利要求1所述的方法,其特征在于,所述方法在步骤C前进一步包括对所述中间码原始图中的节点进行优化;所述优化的策略包括以下S1、S2和S3中的至少一项51.从所述中间码原始图中的输出节点开始向前遍历,找出通过所述中间码原始图的有向边能到达该输出节点的所有前置节点并进行标记,删除所述中间码原始图中未被标记的节点;52.将等价节点进行合并,其中所述等价节点是除了数据源属性不同,其他所有属性均相同,且不依赖于其他节点或依赖于相同节点的节点;53.将仅依赖于一个节点且满足合并策略的邻接节点进行合并。
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中任一权项所述装置生成的目标代码对所述待处理的数据进行处理以得到处理结果。
全文摘要
本发明提供了一种生成Map/Reduce模型的目标代码的方法、数据处理的方法及装置,其中生成Map/Reduce模型的目标代码的方法,包括A.获取用户指令;B.根据所述用户指令生成中间码原始图;C.对所述中间码原始图进行分解,得到与Map/Reduce过程的各个执行阶段对应的中间码阶段图;D.将与Map/Reduce过程的各个执行阶段对应的中间码阶段图翻译为Map/Reduce过程的各个执行阶段的目标代码。通过上述方式,降低了普通开发人员的工作难度,提高了代码的可重用性,有利于代码的移植和维护。
文档编号G06F9/44GK102999323SQ201110276309
公开日2013年3月27日 申请日期2011年9月16日 优先权日2011年9月16日
发明者陈晓鸣, 付力力, 桑文锋 申请人:北京百度网讯科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1