一种将MapReduce转换为SQL的方法和装置的制造方法_3

文档序号:9235264阅读:来源:国知局
提取MapReduce中包括的Reduce函数的输入和输出,包括:
[0113]从MapReduce中包括的Reduce函数的annotate中提取输入和输出。
[0114]其中,将MapReduce转换为SQL之后,还包括:
[0115]生成与SQL对应的UDF (User-Defined Funct1n,用户自定义函数)适配器。
[0116]其中,UDF适配器用于直接调用SQL中的Map函数,或SQL中的Map函数和Reduce函数。UDF适配器在同一个SQL系统内变化不大,基本通用,还以通用于对UDF有不同规则定义的SQL系统(主要的业务逻辑则还是依赖于用户提供的Map函数和Reduce函数),如:Hive、Impala、Presto、tajo、Stinger、Drill 等。
[0117]本实施例所述的将MapReduce转换为SQL的方法,可以将MapReduce自动转换成SQL,用户只需编写简单的MapReduce,就可以运行在提供SQL功能的分布式系统上,实现简单便捷。用户使用MapReduce编程,可以免去非数据分析的编程人员需要学习SQL的门槛,节约用户时间,并也可以降低用户直接使用SQL来表述复杂逻辑的不方便之处。生成与SQL对应的UDF适配器,使得可以在不同的SQL系统上运行。
[0118]为了便于说明,下面以MapReduce的经典示例WordCount (词频统计)为例,对本申请方法的实现作进一步说明(以Python语言作为示例),参见图4,为WordCount的MapReduce (通过Python语言实现)。
[0119]从图4可以看到Map函数(图中Mapper部分)和Reduce函数(图中Reducer部分)这两个用户定义函数,以及注释annotate, annotate包括它所标记的每个函数输入(箭头左边)、输出(箭头右边)的个数和类型。
[0120]假设输入数据来源是words表、列名是word,上述函数定义存储在文件wc.py中,则输入定义信息可以通过提供如下参数的形式实现:
[0121]—input “words (word) ” # 表明输入是 words 表的 word 列
[0122]—mapper wc.mapper#表明函数对应关系和出处
[0123]—reducer wc.reducer#表明函数对应关系和出处
[0124]通过与MapReduce类型相应的MapReduce与SQL映射关系,以及SQL模板,自动生成如图5所示的SQL,图5方框中的内容是根据不同Map和Reduce定义函数和输入输出而生成的可替换的参数,方框外的数字标记表示转换顺序,结合图5,说明一下MapReduce和SQL的转换过程:
[0125]SQL最内层的from功能子句:①一select word from words,由用户提供的输入表名(words)和列名(word)决定,即本MapReduce输入。
[0126]SQL次内层SQL的mapper输入(in_0)②和输出(key_0, value_0)③即对应到图4中的用户mapper输入和输出。对用户mapper输入,in_0即原始输入表words中的word ;对mapper输出,默认设定第一个列为key (在这个例子里是key_0),剩余组成value (在这个例子里是value_0)。如果需要表示有多个列组成key,可以在annotate上加括号标注。key的作用在下面将会体现。
[0127]SQL再往外一层:④,最关键的是distribute by/sort by的键值,在这个词频统计的例子里是key_0,默认对应于用户mapper的输出的第一个值。通过识别annotate的标识,确认key所包含列的个数以及分区和排序的需求,从而填补到distribute by/sort by的模板处。如果分区和排序的值不同,比如要做二次排序时,也可以通过annotate分组标记来完成分发和排序是不同列的功能。
[0128]SQL 最外层,reducer 输入(key_0, value_0)⑤和输出(out_0, out_l)⑥的对应关系和图4中的用户reducer annotate标识的输入和输出参数一样,输出的对应关系也一样,但输入的参数含义有很大区别。SQL的输入表面上是key_0,value_0 一一对应,但在用户reducer函数里,相同的key_0被做了分组,然后组内的所有value_0则被集合成了一个列表(list),可以从图41reducer annotate的输入看出。
[0129]在该实施例中MapReduce通过Python语言实现,由于Python语言对函数输入输出的动态定义特性,所以通过annotate来辅助提供输入输出的信息,如果MapReduce通过Java语言等静态语言实现,则函数定义本身就明确了输入输出,则不需要通过annotate来辅助提供输入输出的信息。
[0130]如图6所示,是本申请实施例的一种将MapReduce转换为SQL的装置结构图,该装置包括:
[0131]获取模块201,用于获取用户通过MapReduce框架输入的映射化简MapReduce ;
[0132]解析模块202,用于解析MapReduce,得到MapReduce的函数类型;其中,MapReduce的函数类型为只包括有映射Map函数的Map类型,或同时包括有Map函数和化简Reduce函数的MapReduce类型;
[0133]查询模块203,用于根据MapReduce的函数类型,查询得到与函数类型相应的MapReduce与结构化查询语言SQL映射关系,以及SQL模板;
[0134]转换模块204,用于根据与函数类型相应的MapReduce与SQL映射关系,以及SQL模板,将MapReduce转换为SQL。
[0135]优选地,当MapReduce的函数类型为Map类型时,转换模块204包括:
[0136]第一获取单元,用于获取MapReduce对应的输入定义信息;其中,所述输入定义信息包括输入数据来源;
[0137]第一生成单元,用于根据输入定义信息中包括的输入数据来源,生成与Map类型相应的SQL模板中包括的Map函数的来自from功能的元素;
[0138]第一提取单元,用于提取MapReduce中包括的Map函数的输入和输出;
[0139]第一处理单元,用于将MapReduce中包括的Map函数的输入和输出,分别作为与Map类型相应的SQL模板中包括的Map函数的输入和输出;
[0140]第一添加单元,用于将生成的与Map类型相应的SQL模板中包括的Map函数的from功能的元素,与Map类型相应的SQL模板中包括的Map函数的输入和输出,分别添加到与Map类型相应的SQL模板的相应位置,得到SQL。
[0141]优选地,当MapReduce中包括的Map函数的输入和输出是通过动态方式定义时,第一提取单元包括:
[0142]第一提取子单元,用于从MapReduce中包括的Map函数的注释annotate中提取输入和输出。
[0143]优选地,当MapReduce的函数类型为MapReduce类型时,转换模块204包括:
[0144]第二获取单元,用于获取MapReduce对应的输入定义信息;其中,输入定义信息包括输入数据来源;
[0145]第二生成单元,用于根据输入定义信息中包括的输入数据来源,生成与MapReduce类型相应的SQL模板中包括的Map函数的from功能的元素;
[0146]第二提取单元,用于提取MapReduce中包括的Map函数的输入和输出;
[0147]第二处理单元,用于将MapReduce中包括的Map函数的输入和输出,分别作为与MapReduce类型相应的SQL模板中包括的Map函数的输入和输出;
[0148]第三提取单元,用于提取MapReduce中包括的Map函数的键值信息、MapReduce的分区排序需求信息;
[0149]确定单元,用于根据MapReduce中包括的Map函数的键值信息、MapReduce的分区排序需求信息,确定与MapReduce类型相应的SQL模板中包括的发布distribute by功能的键值、排序sort by功能的键值;
[0150]第四提取单元,用于提取MapReduce中包括的Reduce函数的输入和输出;
[0151]第三处理单元,用于将MapReduce中包括的Reduce函数的输入和输出,分别作为与MapReduce类型相应的SQL模板中包括的Reduce函数的输入和输出;
[0152]第二添加单元,用于将生成的与MapReduce类型相应的SQL模板中包括的Map函数的from功能的元素,与MapReduce类型相应的SQL模板中包括的Map函数的输入和输出,与MapReduce类型相应的SQL模板中包括的distribute by功能的键值、sort by功能的键值,与MapReduce类型相应的SQL模板中包括的Reduce函数的输入和输出,分别添加到与MapReduce类型相应的SQL模板的相应位置,得到SQL。
[0153]优选地,当MapReduce中包括的Map函数的输入和输出是通过动态方式定义时,第二提取单元包括:
[0154]第二提取子单元,用于从MapReduce中包括的Map函数的annotate中提取输入和输出;
[0155]相应地,第四提取单元包括:
[0156]第三提取子单元,用于从MapReduce中包括的Reduce函数的annotate中提取输入和输出。
[0157]优选地,图7,该装置还包括:
[0158]生成模块205,用于生成与SQL对应的UDF适配器,其中,UDF适配器用于直接调用SQL中的Map函数,或SQL中的Map函数和Reduce函数。
[0159]本实施例所述的将MapReduce转换为SQL的装置,可以将MapReduce自动转换成SQL,用户只需编写简单的MapReduce,就可以运行在提供SQL功能的分布式系统上,实现简单便捷。用户使用MapReduce编程,可以免去非数据分析的编程人员需要学习SQL的门槛,节约用户时间,并也可以降低用户直接使用SQL来表述复杂逻辑的不方便之处。生成与SQL对应的UDF适配器,使得可以在不同的SQL系统上运行。
[0160]所述装置与前述的方法流程描述对应,不足之处参考上述方法流程的叙述,不再--赘述。
[0161]上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1