CN103593401A - 代码转换方法及装置 - Google Patents
代码转换方法及装置 Download PDFInfo
- Publication number
- CN103593401A CN103593401A CN201310482057.5A CN201310482057A CN103593401A CN 103593401 A CN103593401 A CN 103593401A CN 201310482057 A CN201310482057 A CN 201310482057A CN 103593401 A CN103593401 A CN 103593401A
- Authority
- CN
- China
- Prior art keywords
- template
- task
- type
- operator
- map
- 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
Images
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明提供一种代码转换方法及装置,包括:获得类SQL对应的各作业;确定第一作业和第二作业及其各自的作业类型;根据第一作业和第二作业,确定第一作业模板和第二作业模板;根据预设的合并模型,将第一作业模板和第二作业模板合并为第三作业;将所述第三作业作为所述第一作业,并再次执行所述将其相邻作业中的任一可合并的作业作为第二作业的步骤,直至第一作业的相邻作业中不存在可合并的作业;再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;根据当前各作业,获得MapReduce代码,从而减少作业的作业量和执行时间,提高数据处理效率。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种代码转换方法及装置。
背景技术
在映射化简(MapReduce)应用中,利用MapReduce框架实现数据处理的途径是编写MapReduce代码,而这就带来了调试分布式程序的负担。并且,数据分析人员更加熟悉的代码通常为类似于结构化查询语言(Structured Query Language,简称SQL)的声明式语言,以下简称类SQL,而不是在MapReduce框架下编写的MapReduce代码。
针对上述状况,现有技术提供一种将类SQL转换为MapReduce代码的代码转换方法为,根据给定的类SQL,获得所述类SQL对应的抽象语法树中各节点分别对应的各作业,并根据所述各作业生成相应的MapReduce代码。
通过上述方法,尽管能够实现将类SQL转换为MapReduce代码,但是通过上述方案获得的MapReduce作业量通常较大,相应的,执行这些作业将会耗费大量的时间,导致数据处理的效率降低。
发明内容
本发明提供一种代码转换方法及装置,用于解决现有的代码转换方案中因作业量过大导致的作业时间过长的问题。
本发明的第一个方面是提供一种代码转换方法,包括:
根据类结构化查询语言SQL,获得与所述类SQL对应的抽象语法树中的各节点分别对应的各作业;
将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业;
根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型;
若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板;
根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业;
将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业;
再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;
根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
本发明的另一个方面是提供一种代码转换装置,包括:
获取模块,用于根据类结构化查询语言SQL,获得所述类SQL对应的抽象语法树中各节点分别对应的各作业;
处理模块,用于将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业;
所述处理模块,还用于根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型;
合并模块,用于若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板;
所述合并模块,还用于根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业;
所述处理模块,还用于将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业;
所述处理模块,还用于再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;
转换模块,用于根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
本发明提供的代码转换方法,通过对类结构化查询语言(Structured QueryLanguage,简称SQL)对应的各作业进行合并后获得相应的MapReduce代码的技术方案,有效减少MapReduce作业的作业量和执行时间,进而提高数据处理的效率。
附图说明
图1为本发明实施例一提供的一种代码转换方法的流程示意图;
图2为本发明实施例二提供的一种代码转换装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
图1为本发明实施例一提供的一种代码转换方法的流程示意图,如图1所示,所述方法包括:
101、根据类结构化查询语言(Structured Query Language,简称SQL),获得与所述类SQL对应的抽象语法树中的各节点分别对应的各作业。
具体的,在实际应用中,101具体包括:根据所述类SQL,生成保存有所述类SQL语句结构的抽象语法树(Abstract Syntax Tree,简称AST),所述AST的文件格式可以为xml文件格式。通常的,所述AST中包括多个节点,每个节点对应一个作业。
102、将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业。
在实际应用中,作业的相邻作业可以包括所述作业的前驱作业和后继作业,则相应的,102中所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业,具体可以包括:
将所述第一作业的前驱作业和所述第一作业的后继作业中的任一可合并的作业,作为所述第二作业。
103、根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型。
在实际应用中,根据各作业包括的不同算子,通常可以将作业的作业类型进行如下划分,具体的,将包括Aggregation算子的作业的作业类型称为SPJA类型,其中,SPJA为Select/Project/Join/Aggregation的缩写;将包括过滤Filter算子、投影Project算子、连接Join算子、分组Group算子和排序Sort算子中一个或多个的组合,且不包括所述Aggregation算子的作业的作业类型称为SPJ类型,其中,SPJ为Select/Project/Join的缩写;并且,在SPJ作业类型对应的作业中,将仅包含有Filter算子、Project算子或者嵌套循环连接Nested-Loop-Join算子的作业的作业类型称为SP类型,其中,SP为Select/Project的缩写。在实际应用中,上述三种作业类型的名称也可以为其它预设的名称,本实施例中给出的只是其中一种具体的实施方式,而并未对其进行限制。
进一步具体的,从作业内容上来看,上述作业类型中的前两种作业类型对应的作业均包括Map任务、Shuffle任务和Reduce任务,可以用(Map,Shuffle,Reduce)表示;而所述SP类型对应的作业,通常仅包括Map任务,可以用(Map,,)表示。则根据上述实施方式,相应的,以第一作业为例,103中所述根据获取的所述第一作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型具体可以包括:
获取所述第一作业的算子;
若所述第一作业的算子包括聚合Aggregation算子,则所述第一作业的作业类型为SPJA类型;
若所述第一作业的算子包括过滤Filter算子、投影Project算子、连接Join算子、分组Group算子和排序Sort算子中一个或多个的组合,且不包括所述Aggregation算子,则所述第一作业的作业类型为SPJ类型;
若所述第一作业的算子仅包括所述Filter算子、所述Project算子或Nested-Loop-Join算子,则所述第一作业的作业类型为SP类型。
需要说明的是,在上述实施方式中,作业与作业类型的对应关系为,一个作业对应至少一个作业类型。具体举例来说,若某作业的算子仅包括Filter算子,则基于103的步骤,该作业的作业类型包括两种,即SP类型和SPJ类型。相应的,第二作业的作业类型的获得方法与上述获得第一作业的作业类型的方法相似,故不再赘述。
104、若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板。
由于前述方案中,选取的第一作业的相邻作业为其前驱作业或后继作业,因此,需要通过步骤104使第二作业模板为第一作业模板的前驱作业,以便于在后续步骤中实现对其对应的合并模型的确定。
105、根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业。
具体的,105具体可以包括:
若所述第一作业模板的作业类型为SPJ类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第一作业合并模型作为所述合并模型之一,所述第一作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
若所述第一作业模板的作业类型为SPJA类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第二作业合并模板作为所述合并模型之一,所述第二作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务中的部分Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务、所述第二作业模板的Reduce任务、及所述第二作业模板的Map任务中除所述部分Map任务以外的任务合并为所述第三作业的Reduce任务,所述部分Map任务的处理对象不属于所述第一作业模板的Aggregation算子对应的处理对象;
若所述第一作业模板的作业类型为SP类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第三作业合并模板作为所述合并模型之一,所述第三作业合并模型用于将所述第二作业模板的Map任务作为所述第三作业的Map任务,将所述第二作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Map任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
若所述第一作业模板的作业类型为SPJ类型或SPJA类型,所述第二作业模板的作业类型为SP类型,则将第四作业合并模板作为所述合并模型之一,所述第四作业合并模型用于将所述第一作业模板的Map任务作为所述第三作业的Map任务,将所述第一作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Map任务合并为所述第三作业的Reduce任务;
若所述合并模型的数量为一个,则将根据所述合并模型获得的作业作为所述第三作业;
若所述合并模型的数量为多个,则分别估算根据所述多个合并模型获得的作业的执行时间,并将所述执行时间最短的作业作为所述第三作业。
其中,所述第一作业合并模型、第二作业合并模型、第三作业合并模型和第四作业合并模型可以为预设的合并模型。为了更加直观地表现上述步骤,表1为所述第一作业模板的作业类型、所述第二作业模板的作业类型和上述各合并模型的关系对照表。如表1所示,Job1为所述第一作业模板的作业类型,Job2为所述第二作业模板的作业类型,且Job2为Job1的前驱作业,相应的,表1的每一行中,最后一列的Job1+2为与该行前两列中的第一作业模板的作业类型Job1和第二作业模板的作业类型Job2对应的合并模型。其中,Map1为所述第一作业模板的Map任务,Map2为所述第二作业模板的Map任务。类似的,Shuffle1、Shuffle2、Reduce1和Reduce2分别为所述第一作业模板的Shuffle任务、所述第二作业模板的Shuffle任务、所述第一作业模板的Reduce任务和所述第二业模板的Reduce任务。且Map21为所述第二作业模板的Map任务中的部分Map任务。
更具体的,在上述方案中,当合并模型的数量为多个时,其实施场景具体为,由于一个作业对应至少一个作业类型,则对于第一作业模板和第二作业模板来说,可能存在多个与之对应的合并模型,具体举例来说,假设第一作业模板的算子仅包括Filter算子,即所述第一作业模板的作业类型包括SP类型和SPJ类型,第二作业模板的作业类型为SPJ作业类型,则基于步骤105,可以确定对于上述两个作业模板来说,其相应的合并模型可以为表1第一行中的合并模型,也可以为表1第三行中的合并模型,也就是说,存在多个对应的合并模型。
相应的,在上述情况下,需要确定一个最优的合并模型以对第一作业模板和第二作业模板进行合并,则进一步具体的,在上述实施方式中,所述估算根据合并模型获得的作业的执行时间,可以包括:
获取所述根据所述合并模型获得的作业的Map任务的作业量NMap和作业时间TMap_full、以及所述根据所述合并模型获得的作业的Reduce任务的作业量NReduce和作业时间TReduce_full;
根据执行时间公式估算根据所述合并模型获得的作业的执行时间,所述执行时间公式为:Tjob=NMap×TMap_full+NReduce×TReduce_full,其中,Tjob为所述根据所述合并模型获得的作业的执行时间。
在实际应用中,可以利用MapReduce性能模型进行计算。
106、将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业。
107、再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业。
108、根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
在实际应用中,108可以通过代码生成器(Code Generator)实现。具体的,Code Generator首先定义代码模板,例如,键值对(Key/Value,简称K/V)的类型和取值、各种表达式的代码、where条件的代码、各原子查询操作过程的代码等。通过遍历各作业,生成相应的MapReduce代码。
本实施例提供的代码转换方法,通过对类SQL对应的各作业进行合并后获得相应的MapReduce代码的技术方案,有效减少MapReduce作业的作业量和执行时间,进而提高数据处理的效率。并且进一步的,本实施例提供的方法根据各作业的作业类型和预设的合并模型对各作业进行合并,能够更加有效地减少MapReduce作业的作业量和执行时间。
图2为本发明实施例二提供的一种代码转换装置的结构示意图,如图2所示,所述装置包括:获取模块21、处理模块22、合并模块23和转换模块24;其中,
获取模块21,用于根据类结构化查询语言SQL,获得所述类SQL对应的抽象语法树中各节点分别对应的各作业;
处理模块22,用于将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业;
处理模块22,还用于根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型;
合并模块23,用于若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板;
合并模块23,还用于根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业;
处理模块22,还用于将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业;
处理模块22,还用于再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;
转换模块24,用于根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
具体的,处理模块22根据获取模块21获得的类SQL对应的各作业,确定第一作业和第二作业及其各自的作业类型;合并模块23根据上述两个作业类型,对第一作业和第二作业进行合并,得到第三作业;通过处理模块22依次循环执行上述步骤,直至当前未被合并的作业中不存在可合并的作业;最后,转换模块24根据合并后的各作业,生成相应的MapReduce代码。
其中,处理模块22,具体用于将所述第一作业的前驱作业和所述第一作业的后继作业中的任一可合并的作业,作为所述第二作业。
具体的,为了获取某个作业的作业类型,处理模块22可以包括:
获取单元,用于获取所述第一作业的算子;
判定单元,用于若所述第一作业的算子包括聚合Aggregation算子,则所述第一作业的作业类型为SPJA类型;
所述判定单元,还用于若所述第一作业的算子包括过滤Filter算子、投影Project算子、连接Join算子、分组Group算子和排序Sort算子中一个或多个的组合,且不包括所述Aggregation算子,则所述第一作业的作业类型为SPJ类型;
所述判定单元,还用于若所述第一作业的算子仅包括所述Filter算子、所述Project算子或嵌套循环连接Nested-Loop-Join算子,则所述第一作业的作业类型为SP类型。
具体的,在根据第一作业和第二作业确定第一作业模板和第二作业模板后,为了对其进行合并,合并模块23可以包括:
第一合并单元,用于若所述第一作业模板的作业类型为SPJ类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第一作业合并模型作为所述合并模型之一,所述第一作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
第二合并单元,用于若所述第一作业模板的作业类型为SPJA类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第二作业合并模板作为所述合并模型之一,所述第二作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务中的部分Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务、所述第二作业模板的Reduce任务、及所述第二作业模板的Map任务中除所述部分Map任务以外的任务合并为所述第三作业的Reduce任务,所述部分Map任务的处理对象不属于所述第一作业模板的Aggregation算子类型对应的处理对象;
第三合并单元,用于若所述第一作业模板的作业类型为SP类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第三作业合并模板作为所述合并模型之一,所述第三作业合并模型用于将所述第二作业模板的Map任务作为所述第三作业的Map任务,将所述第二作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Map任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
第四合并单元,用于若所述第一作业模板的作业类型为SPJ类型或SPJA类型,所述第二作业模板的作业类型为SP类型,则将第四作业合并模板作为所述合并模型之一,所述第四作业合并模型用于将所述第一作业模板的Map任务作为所述第三作业的Map任务,将所述第一作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Map任务合并为所述第三作业的Reduce任务;
第一处理单元,用于若所述合并模型的数量为一个,则将根据所述合并模型获得的作业作为所述第三作业;
第二处理单元,用于若所述合并模型的数量为多个,则分别估算根据所述多个合并模型获得的作业的执行时间,并将所述执行时间最短的作业作为所述第三作业。
再具体的,当存在多个对应的合并模型时,为了确定执行时间最短的作业,所述第二处理单元还可以包括:
获取子单元,用于获取所述根据所述合并模型获得的作业的Map任务的作业量和作业时间、以及所述根据所述合并模型获得的作业的Reduce任务的作业量和作业时间;
计算子单元,用于根据执行时间公式估算根据所述合并模型获得的作业的执行时间。
其中,所述作业的Map任务的作业量为NMap,所述作业的Map任务的作业时间为TMap_full;所述作业的Reduce任务的作业量为NReduce,所述作业的Reduce任务的作业时间为TReduce_full;所述执行时间公式为:Tjob=NMap×TMap_full+NReduce×TReduce_full,其中,Tjob为所述作业的执行时间。
本实施例提供的代码转换装置,通过对类SQL对应的各作业进行合并后获得相应的MapReduce代码的技术方案,有效减少MapReduce作业的作业量和执行时间,进而提高数据处理的效率。并且进一步的,本实施例提供的装置根据各作业的作业类型和预设的合并模型对各作业进行合并,能够更加有效地减少MapReduce作业的作业量和执行时间
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
此外,在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或单元可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种代码转换方法,其特征在于,包括:
根据类结构化查询语言SQL,获得与所述类SQL对应的抽象语法树中的各节点分别对应的各作业;
将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业;
根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型;
若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板;
根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业;
将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业;
再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;
根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
2.根据权利要求1所述的方法,其特征在于,所述根据获取的所述第一作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型,包括:
获取所述第一作业的算子;
若所述第一作业的算子包括聚合Aggregation算子,则所述第一作业的作业类型为SPJA类型;
若所述第一作业的算子包括过滤Filter算子、投影Project算子、连接Join算子、分组Group算子和排序Sort算子中一个或多个的组合,且不包括所述Aggregation算子,则所述第一作业的作业类型为SPJ类型;
若所述第一作业的算子仅包括所述Filter算子、所述Project算子或嵌套循环连接Nested-Loop-Join算子,则所述第一作业的作业类型为SP类型。
3.根据权利要求2所述的方法,其特征在于,所述根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板进行合并为第三作业,包括:
若所述第一作业模板的作业类型为SPJ类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第一作业合并模型作为所述合并模型之一,所述第一作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
若所述第一作业模板的作业类型为SPJA类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第二作业合并模板作为所述合并模型之一,所述第二作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务中的部分Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务、所述第二作业模板的Reduce任务、及所述第二作业模板的Map任务中除所述部分Map任务以外的任务合并为所述第三作业的Reduce任务,所述部分Map任务的处理对象不属于所述第一作业模板的Aggregation算子类型对应的处理对象;
若所述第一作业模板的作业类型为SP类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第三作业合并模板作为所述合并模型之一,所述第三作业合并模型用于将所述第二作业模板的Map任务作为所述第三作业的Map任务,将所述第二作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Map任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
若所述第一作业模板的作业类型为SPJ类型或SPJA类型,所述第二作业模板的作业类型为SP类型,则将第四作业合并模板作为所述合并模型之一,所述第四作业合并模型用于将所述第一作业模板的Map任务作为所述第三作业的Map任务,将所述第一作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Map任务合并为所述第三作业的Reduce任务;
若所述合并模型的数量为一个,则将根据所述合并模型获得的作业作为所述第三作业;
若所述合并模型的数量为多个,则分别估算根据所述多个合并模型获得的作业的执行时间,并将所述执行时间最短的作业作为所述第三作业。
4.根据权利要求3所述的方法,其特征在于,所述估算根据所述合并模型获得的作业的执行时间,包括:
获取所述根据所述合并模型获得的作业的Map任务的作业量NMap和作业时间TMap_full、以及所述根据所述合并模型获得的作业的Reduce任务的作业量NReduce和作业时间TReduce_full;
根据执行时间公式估算根据所述合并模型获得的作业的执行时间,所述执行时间公式为:Tjob=NMap×TMap_full+NReduce×TReduce_full,其中,Tjob为所述根据所述合并模型获得的作业的执行时间。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业,包括:
将所述第一作业的前驱作业和所述第一作业的后继作业中的任一可合并的作业,作为所述第二作业。
6.一种代码转换装置,其特征在于,包括:
获取模块,用于根据类结构化查询语言SQL,获得所述类SQL对应的抽象语法树中各节点分别对应的各作业;
处理模块,用于将当前各作业中,任一未被合并且可合并的作业作为第一作业,将所述第一作业的相邻作业中的任一可合并的作业作为第二作业;
所述处理模块,还用于根据获取的所述第一作业的算子、所述第二作业的算子和预设的各作业类型对应的算子,确定所述第一作业的作业类型和所述第二作业的作业类型;
合并模块,用于若所述第二作业为所述第一作业的前驱作业,则将所述第一作业作为第一作业模板,将所述第二作业作为第二作业模板,否则将所述第一作业作为所述第二作业模板,将所述第二作业作为所述第一作业模板;
所述合并模块,还用于根据预设的与所述第一作业模板的作业类型和所述第二作业模板的作业类型对应的合并模型,将所述第一作业模板和所述第二作业模板合并为第三作业;
所述处理模块,还用于将所述第三作业作为所述第一作业,并再次执行所述将所述第一作业的相邻作业中的任一可合并的作业作为第二作业的步骤,直至所述第一作业的相邻作业中不存在可合并的作业;
所述处理模块,还用于再次执行所述将当前各作业中任一未被合并且可合并的作业作为第一作业的步骤,直至当前未被合并的作业中不存在可合并的作业;
转换模块,用于根据当前的各作业,获得所述类SQL对应的映射化简MapReduce代码。
7.根据权利要求6所述的装置,其特征在于,所述处理模块包括:
获取单元,用于获取所述第一作业的算子;
判定单元,用于若所述第一作业的算子包括聚合Aggregation算子,则所述第一作业的作业类型为SPJA类型;
所述判定单元,还用于若所述第一作业的算子包括过滤Filter算子、投影Project算子、连接Join算子、分组Group算子和排序Sort算子中一个或多个的组合,且不包括所述Aggregation算子,则所述第一作业的作业类型为SPJ类型;
所述判定单元,还用于若所述第一作业的算子仅包括所述Filter算子、所述Project算子或嵌套循环连接Nested-Loop-Join算子,则所述第一作业的作业类型为SP类型。
8.根据权利要求7所述的装置,其特征在于,所述合并模块包括:
第一合并单元,用于若所述第一作业模板的作业类型为SPJ类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第一作业合并模型作为所述合并模型之一,所述第一作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
第二合并单元,用于若所述第一作业模板的作业类型为SPJA类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第二作业合并模板作为所述合并模型之一,所述第二作业合并模型用于将所述第一作业模板的Map任务和所述第二作业模板的Map任务中的部分Map任务合并为所述第三作业的Map任务,将所述第一作业模板的Shuffle任务和所述第二作业模板的Shuffle任务合并为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务、所述第二作业模板的Reduce任务、及所述第二作业模板的Map任务中除所述部分Map任务以外的任务合并为所述第三作业的Reduce任务,所述部分Map任务的处理对象不属于所述第一作业模板的Aggregation算子类型对应的处理对象;
第三合并单元,用于若所述第一作业模板的作业类型为SP类型,所述第二作业模板的作业类型为SPJ类型或SPJA类型,则将第三作业合并模板作为所述合并模型之一,所述第三作业合并模型用于将所述第二作业模板的Map任务作为所述第三作业的Map任务,将所述第二作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Map任务和所述第二作业模板的Reduce任务合并为所述第三作业的Reduce任务;
第四合并单元,用于若所述第一作业模板的作业类型为SPJ类型或SPJA类型,所述第二作业模板的作业类型为SP类型,则将第四作业合并模板作为所述合并模型之一,所述第四作业合并模型用于将所述第一作业模板的Map任务作为所述第三作业的Map任务,将所述第一作业模板的Shuffle作为所述第三作业的Shuffle任务,将所述第一作业模板的Reduce任务和所述第二作业模板的Map任务合并为所述第三作业的Reduce任务;
第一处理单元,用于若所述合并模型的数量为一个,则将根据所述合并模型获得的作业作为所述第三作业;
第二处理单元,用于若所述合并模型的数量为多个,则分别估算根据所述多个合并模型获得的作业的执行时间,并将所述执行时间最短的作业作为所述第三作业。
9.根据权利要求8所述的装置,其特征在于,所述第二处理单元还包括:
获取子单元,用于获取所述根据所述合并模型获得的作业的Map任务的作业量NMap和作业时间TMap_full、以及所述根据所述合并模型获得的作业的Reduce任务的作业量NReduce和作业时间TReduce_full;
计算子单元,用于根据执行时间公式估算根据所述合并模型获得的作业的执行时间,所述执行时间公式为:Tjob=NMap×TMap_full+NReduce×TReduce_full,其中,Tjob为作业的执行时间。
10.根据权利要求6-9中任一项所述的装置,其特征在于,
所述处理模块,具体用于将所述第一作业的前驱作业和所述第一作业的后继作业中的任一可合并的作业,作为所述第二作业。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310482057.5A CN103593401B (zh) | 2013-10-15 | 2013-10-15 | 代码转换方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310482057.5A CN103593401B (zh) | 2013-10-15 | 2013-10-15 | 代码转换方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103593401A true CN103593401A (zh) | 2014-02-19 |
CN103593401B CN103593401B (zh) | 2016-08-10 |
Family
ID=50083542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310482057.5A Active CN103593401B (zh) | 2013-10-15 | 2013-10-15 | 代码转换方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103593401B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786808A (zh) * | 2014-12-15 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 一种用于分布式执行关系型计算指令的方法与设备 |
CN106776639A (zh) * | 2015-11-24 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 基于结构化查询语言的数据处理方法及数据处理装置 |
CN111488326A (zh) * | 2019-01-25 | 2020-08-04 | 阿里巴巴集团控股有限公司 | MapReduce作业执行方法、节点设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090055370A1 (en) * | 2008-10-10 | 2009-02-26 | Business.Com | System and method for data warehousing and analytics on a distributed file system |
US20110302583A1 (en) * | 2010-06-04 | 2011-12-08 | Yale University | Systems and methods for processing data |
CN102479217A (zh) * | 2010-11-23 | 2012-05-30 | 腾讯科技(深圳)有限公司 | 一种分布式数据仓库中实现计算均衡的方法及装置 |
CN102609451A (zh) * | 2012-01-11 | 2012-07-25 | 华中科技大学 | 面向流式数据处理的sql查询计划生成方法 |
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
-
2013
- 2013-10-15 CN CN201310482057.5A patent/CN103593401B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090055370A1 (en) * | 2008-10-10 | 2009-02-26 | Business.Com | System and method for data warehousing and analytics on a distributed file system |
US20110302583A1 (en) * | 2010-06-04 | 2011-12-08 | Yale University | Systems and methods for processing data |
CN102479217A (zh) * | 2010-11-23 | 2012-05-30 | 腾讯科技(深圳)有限公司 | 一种分布式数据仓库中实现计算均衡的方法及装置 |
CN102609451A (zh) * | 2012-01-11 | 2012-07-25 | 华中科技大学 | 面向流式数据处理的sql查询计划生成方法 |
CN102799622A (zh) * | 2012-06-19 | 2012-11-28 | 北京大学 | 基于MapReduce扩展框架的分布式SQL查询方法 |
Non-Patent Citations (1)
Title |
---|
陈新明: "淘宝网数据平台数据仓库建设", 《中国优秀硕士学位论文全文数据库》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786808A (zh) * | 2014-12-15 | 2016-07-20 | 阿里巴巴集团控股有限公司 | 一种用于分布式执行关系型计算指令的方法与设备 |
CN105786808B (zh) * | 2014-12-15 | 2019-06-18 | 阿里巴巴集团控股有限公司 | 一种用于分布式执行关系型计算指令的方法与设备 |
CN106776639A (zh) * | 2015-11-24 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 基于结构化查询语言的数据处理方法及数据处理装置 |
CN106776639B (zh) * | 2015-11-24 | 2020-04-10 | 腾讯科技(深圳)有限公司 | 基于结构化查询语言的数据处理方法及数据处理装置 |
CN111488326A (zh) * | 2019-01-25 | 2020-08-04 | 阿里巴巴集团控股有限公司 | MapReduce作业执行方法、节点设备及存储介质 |
CN111488326B (zh) * | 2019-01-25 | 2023-04-07 | 阿里巴巴集团控股有限公司 | MapReduce作业执行方法、节点设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103593401B (zh) | 2016-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20170255673A1 (en) | Batch Data Query Method and Apparatus | |
CN102799624B (zh) | 基于Datalog的分布式环境下大图数据查询方法 | |
CN104657140A (zh) | 代码生成方法及装置 | |
CN102737108B (zh) | 处理流程图的方法及装置 | |
CN104035754A (zh) | 一种基于xml的自定义代码生成方法及生成器 | |
US20230259509A1 (en) | Data association query method and apparatus, device, and storage medium | |
CN106611037A (zh) | 用于分布式图计算的方法与设备 | |
CN105183880A (zh) | 一种哈希连接的方法及装置 | |
CN102521332B (zh) | 基于强模拟的图模式匹配方法、装置及系统 | |
CN108984744A (zh) | 一种非主链区块自增长方法 | |
CN103678550A (zh) | 一种基于动态索引结构的海量数据实时查询方法 | |
CN104424240A (zh) | 多表关联方法、主服务节点、计算节点及系统 | |
CN102982147B (zh) | 一种提高数据信息整合效率的方法和装置 | |
CN105701251A (zh) | 一种基于对象定义的数据导出导入方法 | |
CN103593401A (zh) | 代码转换方法及装置 | |
CN106126564A (zh) | 一种基于动态模板语言渲染的方法 | |
CN104268709A (zh) | 一种采用分布式lsm树的rfid系统设计方法 | |
CN106776275B (zh) | 一种基于分组复用的测试流程自动生成方法 | |
CN104572666A (zh) | 一种基于Jxl批量解析Excel并导入数据库的方法 | |
CN104090895B (zh) | 获取基数的方法、装置、服务器及系统 | |
CN110659393A (zh) | 一种xml代码生成方法和系统 | |
CN105607957B (zh) | 一种基于opc da的数据采集与监控系统 | |
CN104750846A (zh) | 一种子串查找方法及装置 | |
CN113886342A (zh) | 文件的格式转换方法、装置、存储介质及处理器 | |
CN114925142A (zh) | 一种orm框架的多类型数据库兼容方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210201 Address after: 100085 Digital Technology Plaza, 9 shangdijiu street, Haidian District, Beijing Patentee after: DIGITAL CHINA HOLDINGS Ltd. Address before: 100191 No. 37, Haidian District, Beijing, Xueyuan Road Patentee before: BEIHANG University |
|
TR01 | Transfer of patent right |