CN111488326B - MapReduce作业执行方法、节点设备及存储介质 - Google Patents

MapReduce作业执行方法、节点设备及存储介质 Download PDF

Info

Publication number
CN111488326B
CN111488326B CN201910075468.XA CN201910075468A CN111488326B CN 111488326 B CN111488326 B CN 111488326B CN 201910075468 A CN201910075468 A CN 201910075468A CN 111488326 B CN111488326 B CN 111488326B
Authority
CN
China
Prior art keywords
sql
user
execution
program
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.)
Active
Application number
CN201910075468.XA
Other languages
English (en)
Other versions
CN111488326A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201910075468.XA priority Critical patent/CN111488326B/zh
Publication of CN111488326A publication Critical patent/CN111488326A/zh
Application granted granted Critical
Publication of CN111488326B publication Critical patent/CN111488326B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/211Schema design and management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供一种MapReduce作业执行方法、节点设备及存储介质。在本申请实施例中,利用Sql语言的语法将用户提交的MapReduce作业的执行描述信息重新表达为Sql代码片段,结合反射调用方法,可实现在分布式Sql执行框架中执行MapReduce作业的目的,借助分布式Sql执行框架的优势,可提高MapReduce作业的执行性能。

Description

MapReduce作业执行方法、节点设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种MapReduce作业执行方法、节点设备及存储介质。
背景技术
MapReduce(映射化简)是一种用于大规模数据并行化运算的编程模型和执行框架。MapRedeuce框架允许用户使用函数式编程的思想来表述业务逻辑,只要实现Map(映射)、Reduce(化简)即可提交分布式作业,而不用关心分布式并行化的细节。
MapReduce编程模型简单、用户使用java语言实现MapReduce框架提供的接口、编写Map和Reduce程序,就可以把作业提交到分布式计算系统中做分布式大数据计算,因此在很多分布式计算系统中得到广泛应用。但是,MapReduce作业的执行性能相对较差,这是业界迫切需要解决的问题。
发明内容
本申请的多个方面提供一种MapReduce作业执行方法、节点设备及存储介质,用以借助分布式Sql执行框架的优势执行MapReduce作业,提高MapReduce作业的执行性能。
本申请实施例提供一种MapReduce作业执行方法,适用于分布式计算系统中的节点设备,所述方法包括:获取MapReduce作业的执行描述信息,所述执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的;利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段;按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
本申请实施例还提供一种节点设备,包括:存储器和处理器;所述存储器,用于存储计算机程序;所述处理器,与所述存储器耦合,用于执行所述计算机程序,以用于:获取MapReduce作业的执行描述信息,所述执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的;利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段;按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器能够实现本申请方法实施例中的步骤。
在本申请实施例中,利用Sql语言的语法将用户提交的MapReduce作业的执行描述信息重新表达为Sql代码片段,结合反射调用方法,可实现在分布式Sql执行框架中执行MapReduce作业的目的,借助分布式Sql执行框架的优势,可提高MapReduce作业的执行性能。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请示例性实施例提供的MapReduce执行框架中MapReduce作业的执行过程的示意图;
图2为本申请示例性实施例提供的由MapReduce作业的执行过程转化为分布式关系型编程模型的一种简单流程的示意图;
图3a为本申请示例性实施例提供的一种分布式Sql计算系统的硬件架构示意图;
图3b为本申请示例性实施例提供的执行单元的一种内部结构示意图;
图4为本申请示例性实施例提供的一种节点设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
随着分布式计算系统的发展和分布式Sql(Structured query language,结构化查询语言)功能的逐步丰富,越来越多的分布式计算系统开始使用分布式Sql执行框架。分布式Sql执行框架是一种运行在分布式计算系统中,支持用户使用Sql语言提交关系型数据计算作业并可对该关系型数据计算作业进行调度执行的执行框架。而且,鉴于Sql程序在维护性、表达性等方面的优势,越来越多的分布式计算系统开始把Sql执行框架作为重心,在功能稳定性和性能深层次化等方面不断进行完善和优化,例如引入基于代价的优化器(Cost-Based Optimization,CBO)和向量化执行引擎等。另外,因为Sql作业规模比较大,分布式Sql计算系统提供了更多的运维工具和日志系统,便于开发和线上作业的分析改进等,提高工程效率。
鉴于分布式Sql执行框架的优势,在本申请实施例中,考虑将MapReduce作业转换为Sql执行,以便借助分布式Sql执行框架的优势,来提高MapReduce作业的执行性能。将MapReduce作业转换为Sql执行,这不仅是针对分布式Sql执行框架本身的创新,更是对分布式编程模型的基础理论的创新。
为了能够将MapReduce作业转换为Sql执行,本案发明人首先对分布式编程模型的原理进行了全新的理解,这种理解与业内传统理解不同,是对分布式编程模型的一种创新性理解。内容如下:
MapReduce执行框架使用的是分治的MapReduce编程模型。如图1所示,是MapReduce执行框架中MapReduce作业的执行过程。在图1所示执行过程中,关键是Map操作和Reduce操作,这两个操作调用用户提交的Map程序和Reduce程序即可;其它操作,例如输入数据的分割(split)、从Map到Reduce的分区、排序(SHUFFLE SORT)、执行结果的输出等都由MapReduce执行框架完成。
相对而言,分布式Sql执行框架对应的是分布式关系型编程模型。本案发明人将MapReduce编程模型看作是分布式关系型编程模型的一种特殊情况,具体是将MapReduce编程模型看作是一种简化的分布式关系型编程模型。例如,MapReduce编程模型的接口可以看作是一种简化的分布式关系型编程模型的接口,对外只暴露了Map和Reduce两种操作的接口;相对而言,分布式关系型编程模型则可以对外提供更多操作的接口,例如可以对外提供关联(Join)、过滤(Filter)等操作的接口。
基于上述分析,在本申请实施例中,可以将图1所示MapReduce作业的执行过程转化为分布式关系型编程模型的一种简单流程,如图2所示。在图2中,采用一个ForEach算子处理用户自定义的Map程序,从而实现图1中的Map操作;采用分布式Sql中的发布功能(DISTRIBUTE BY)和排序(SORT BY)功能,实现MapReduce执行框架中从Map操作到Reduce操作的SHUFFLE SORT功能;之后针对归并(merge)形成的数据组合采用ForEach算子调用用户自定义的Reduce程序,实现图1中的Reduce操作;最后把执行结果输出或存储到指定位置,例如分布式文件系统(Distributed File System,DFS)。
基于上述分析可知,将MapReduce作业转换为Sql执行具备了理论基础。接下来,需要一种能够将MapReduce作业转换为Sql执行的落地方案。在本申请一些实施例中,利用Sql语言的语法将用户提交的MapReduce作业的执行描述信息重新表达为Sql代码片段,结合反射调用方法,可在分布式Sql执行框架中执行MapReduce作业,达到将MapReduce作业转换为Sql执行的目的,借助分布式Sql执行框架的优势,可提高MapReduce作业的执行性能。
本实施例提供的MapReduce作业执行方法可应用于分布式Sql计算系统,可由分布式Sql计算系统中的节点设备实施。该节点设备可以是分布式Sql计算系统中的任意节点设备,例如可以是分布式Sql计算系统中负责作业调度的节点设备。本申请实施例并不限定分布式Sql计算系统的物理架构,也不对分布式Sql计算系统中的节点设备的实现形态进行限定。
如图3a所示,是本申请实施例提供的一种分布式Sql计算系统的架构。在图3a所示系统架构中,包括分布在不同地方的多台计算机、服务器、存储设备等节点设备,这些节点设备通过互联网连接在一起;在这些节点设备之上运行有分布式软件系统(DistributedSoftware Systems),在该分布式软件系统的调度与控制下完成各种分布式任务。图3a所示系统既支持用户提交Sql作业,也支持用户提交MapReduce作业。其中,用户可以向图3a所示系统中的节点设备,例如图3a中负责作业调度的服务器,提交Sql作业或MapReduce作业。
在本实施例中,无论分布式Sql计算系统的物理架构如何,其中的节点设备支持用户提交Sql作业并可对用户提交的Sql作业进行调度执行,除此之外,还支持用户提交MapReduce作业并可按照分布式Sql执行框架对MapReduce作业进行调度执行。
为了让分布式Sql计算系统中的节点设备能够调度并执行MapReduce作业,在本申请实施例中,借鉴Sql语言的用户定义表函数(UDTF)的概念和临时函数的语法等为节点设备设计了新的执行单元,称之为StandaloneUDTF。该执行单元可以反射调用用户编写的Map程序和Reduce程序,并且可以针对数据组而非针对单条数据进行处理。除此之外,本申请实施例还基于UDTF定义了一种Sql函数,从产出特征来看,这种Sql函数的输入和输出关系是数据组的对应关系,即多对多的对应关系,而不一对一、一对多或多对一的对应关系。简单来说,本实施例提供的Sql函数支持多个输入,也支持多个输出。这样可以更好地满足MapReduce作业中Reduce程序需要对数据组进行处理的要求,从而覆盖尽可能多的MapReduce作业场景。现有Sql函数按产出特征可划分为:标量值(Scalar)函数、聚合(Aggregate)函数、表(Table)函数。而本申请实施例提供的Sql函数并不同于前述三种Sql函数,是一种产出特征为多对多的Sql函数。
值得说明的是,本实施例提供的MapReduce作业执行方法对用户来说是透明的,用户可以依旧按照MapReduce执行框架的要求向节点设备(具体是指节点设备中的执行单元)提交MapReduce作业,可继续发挥MapReduce编程模型简单等优势,保证用户体验。其中,用户向节点设备提交MapReduce作业的过程如下:
结合图3a所示,用户在客户端启动一个MapReduce作业,客户端向节点设备(例如图3a中负责作业调度的服务器)请求作业ID和资源文件存储路径。用户编写Map程序和Reduce程序,将Map程序和Reduce程序的jar包、配置文件等存储到分布式存储系统中相应存储路径下。之后,客户端向节点设备提交MapReduce作业的执行描述信息,该执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的。至此,用户成功地将MapReduce作业提交给了节点设备。
在节点设备中,执行单元获取MapReduce作业的执行描述信息;利用Sql语言的语法将执行描述信息重新表达为Sql代码片段;按照分布式Sql执行框架执行Sql代码片段,在Sql代码片段的执行过程中反射调用MapReduce作业需要的Map程序和Reduce程序,以完成MapReduce作业。
值得说明的是,Sql代码片段包括一条或多条Sql语句,这些Sql语句保留了MapReduce作业的执行描述信息中的所有信息。MapReduce作业的执行描述信息实际上是一段java程序,主要包括一些与MapReduce作业的执行相关的配置信息。一般来说,MapReduce作业的执行描述信息主要包括:用户为MapReduce作业配置的Map程序、Reduce程序以及Map程序、Reduce程序的输入输出。除此之外,MapReduce作业的执行描述信息还可以包括Map程序、Reduce程序的运行逻辑,这些程序运行时的一些特殊需求包括运行时申请内存大小、分布式并发数量等,以及用户配置的中间传输数据的字段名称和类型。进一步,根据Map程序、Reduce程序的输入输出类型的不同,还可以这些输入输出参数的格式解析方式或者分割符号等。
可选地,以执行描述信息中用户为MapReduce作业配置的Map程序、Reduce程序以及Map程序、Reduce程序的输入输出为例,则执行单元在利用Sql语言的语法将执行描述信息重新表达为Sql代码片段时,需主要完成但不限于以下操作:
一方面,可利用Sql语言中的函数定义类语句,将用户配置的Map程序、Reduce程序分别映射到相应的Sql函数;另一方面,可利用Sql语言中的查询类语句,将用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出;再者,可利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达。
在本实施例中,将Sql语言中具有函数定义功能的语句称为函数定义类语句,这类语句可能有多种,例如function、temporary function等都具有函数定义功能。可选地,本实施例可利用Sql语言中的创建临时函数create temporary function子句,为用户配置的Map程序、Reduce程序分别创建相应的Sql临时函数;每个Sql临时函数指向相应Map程序或Reduce程序的jar包的存储路径。值得说明的是,这里的Sql临时函数的输入和输出是数据组的对应关系,即支持多个输入和多个输出。
值得说明的是,MapReduce作业可能需要多级Reduce程序,则不同的Reduce程序可被映射到不同的Sql临时函数,且在Sql代码片段中,这些Sql临时函数之间的先后顺序与执行描述信息中定义的Reduce程序之间的先后顺序相同。基于此,执行单元在执行Sql代码片段时,可通过Sql临时函数实现对相应Map程序或Reduce程序的反射调用,并且在Reduce程序为多级时,还可以按照相应Sql临时函数之间的先后顺序反射调用Reduce程序。
在本实施例中,将Sql语言中具有查询功能的语句称为查询类语句,这类语句可能有多种,例如选择(SELECT)、来自(FROM)、SELECT和FROM的组合,以及值表(Values Table)等语句都具有一定查询功能。可选地,本实施例可以结合用户配置的输入输出的类型,从Sql语言的查询类语句中选择适合的语句对执行描述信息中的输入输出参数进行重新表达。
可选地,若用户配置的Map程序、Reduce程序的输入源是表(Table),则可以利用Sql语言中的SELECT和FROM子句将用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出。
进一步,表中一般包含多个字段。若用户配置了表中可作为输入的字段,则可利用Sql语言中的SELECT和FROM子句从表中选择用户配置的字段作为相应Sql临时函数的输入字段;相应地,将用户配置的输出字段填充为相应Sql临时函数的输出列表。当然,若用户未配置表中可作为输入的字段,则可利用Sql语言中的SELECT和FROM子句从表中选择全部字段作为相应Sql临时函数的输入字段;相应地,将用户配置的输出字段填充为相应Sql临时函数的输出列表。
其中,Map程序、Reduce程序的输出可分关键字(Key)列和赋值(Value)列,且Reduce程序的输入一般是Map程序的输出,为了进行区分,在中间过程传输时可为Key列和Value列添加前缀,例如k和v,但不限于此。
由上述可知,若用户配置的Map程序、Reduce程序的输入源是表,与常用的Sql语句类似,可以用类似FROM TABLE的Sql子句表达;具体用到了表中的哪些字段可以用SELECT子句表达。当使用的输入字段不是表中全部字段时,Sql语句执行时会自动做列裁剪来提高性能。
可选地,若用户配置的Map程序、Reduce程序的输入源是结构化文件,则可利用Sql语言中的Values Table子句将用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出。其中,Values Table是指在Sql中自定义表名和列名的临时表,该临时表在当前Sql执行生命周期内有效,其中的类型从Values列表中自动推导。Values Table在不准备任何物理表的时候,可以模拟一个有任意数据的多行的表,并可进行任意运算;结构化文件的内容、描述及各种信息会通过参数的方式传递给Values Table语句,在执行时会通过Values Table描述和配置信息保证正确读取结构化文件并做处理输出。
进一步,若用户配置的Map程序的输入源为多个,且针对每个输入源的处理程序不一致,则可以使用Sql语言的联合全部(UNION ALL)子句合并多个输入源。多个输入源合并后的输出结果作为Reduce程序的输入。
值得说明的是,Map程序的输入就是MapReduce作业的输入,而Map程序的输出一般是Reduce程序的输入。进一步,若Reduce程序存在多级,则上一级Reduce程序的输出一般是下一级Reduce程序的输入。关于这种输入输出之间的关系,用户也会配置在其所提交的MapReduce作业的执行描述信息中。经过上述可以将用户采用java语言编写的执行描述信息中的输入输出信息(这里的输入输出信息既包括输入输出是谁也包括输入输出之间的关系)重新表达为Sql语句。
下面以用户提交的统计字符数量的MapReduce作业场景为例,对本实施例将MapReduce作业的执行描述信息转化为Sql代码片段进行示例性说明。用户用java语言编写Map程序和Reduce程序,并分别在相应程序中对数据进行标记传输和对分组后的数据在组内进行关联、合并与输出。用户按照MapReduce执行框架提供的API接口配置MapReduce作业的执行描述信息并提交至节点设备的执行单元。执行单元将该执行描述信息转化为如下Sql代码片段。
Figure BDA0001958597910000091
Figure BDA0001958597910000101
在上述Sql代码片段中,mapper1是执行单元利用create temporary function语句创建的临时函数的函数名,mapper1指向mapred-cor.jar、mapred-example.jar;mapred-cor.jar、mapred-example.jar代表MapReduce作业中的jar包文件,com.mapred.Mapper表示MapReduce作业中定义的Map程序的java类路径。同理,reducer2、…、reducer8是执行单元利用create temporary function语句创建的其它临时函数的函数名,reducer2、…、reducer8也指向mapred-cor.jar、mapred-example.jar,com.mapred.Reducer表示MapReduce作业中定义的Reduce程序的java类路径。
进一步,在上述Sql代码片段中,@sub_query_mapper定义了一个表变量(tablevariable),命名为@sub_query_mapper,指代后面的Sql子句;该Sql子句完成从调用用户的Map程序执行并输出;其中,src表示输入源,key、value是执行单元利用SELECT与FROM子句从输入源src中选择出的输入字段,这些输入字段是Map程序的输入字段,被执行单元改写成了与Map程序对应的Sql临时函数mapper1的输入字段,mapper1的输出结果包括k_word字段和v_count字段。其中,k_word、v_count字段中增加了前缀,表示是中间输出。
进一步,执行单元利用发布子句DISTRIBUTE BY和排序子句SORT BY,按照k_word字段进行分区和排序以形成数据组,将数据组分配到不同的Reduce程序,由这些Reduce程序进行并行处理。如上述Sql代码片段,@sub_query_reducer定义了另一个表变量(tablevariable),命名为@sub_query_reducer,指代后面的Sql子句;该Sql子句完成从调用用户的Reduce程序执行并输出;其中,执行单元利用SELECT与FROM子句从mapper1的输出结果中选择k-word字段相同的输出结果作为Reduce程序的输入字段,这里被执行单元改写成了与Reduce程序对应的临时函数reducer2的输入字段,临时函数reducer2的输出字段是用户配置的输出字段key和cnt。
最后,针对MapReduce作业的执行描述信息中用于描述MapReduce作业的执行结果输出方式的语句,执行单元利用Sql语言中的INSERT OVERWRITE TABLE子句进行重新表达,将reducer2的输出字段作为整个MapReduce作业的执行结果插入指定表openmr_lot_gcc492.mr_wordcount_out中,该指定表是用户配置的。
接下来,继续以用户提交的将普通的两表关联的场景为例,对本实施例将MapReduce作业的执行描述信息转化为Sql代码片段进行示例性说明。用户用java语言编写Map程序和Reduce程序,并分别在相应程序中对数据进行标记传输和对分组后的数据在组内进行关联、合并与输出。用户按照MapReduce执行框架提供的Api接口配置MapReduce作业的执行描述信息并提交至节点设备中的执行单元。执行单元将该执行描述信息转化为如下Sql代码片段。在该场景实施例中,MapReduce作业的输入源为两个,下面代码片段重点描述对两个输入源进行合并的片段,其余代码片段可参照上述示例实现。
Figure BDA0001958597910000111
Figure BDA0001958597910000121
在上述Sql代码片段中,@sub_query_mapper定义了一个表变量(tablevariable),命名为@sub_query_mapper,指代后面的Sql子句;该Sql子句完成从调用用户的Map程序执行并输出。其中,mr_join_src1和mr_join_src2是需要联合的两张表,这两张表也是Map程序的输入源;mr2sql_mapper_153717093是执行单元利用create temporaryfunction语句创建的临时函数的函数名,指向MapReduce作业中的Map程序的java类路径。在上述Sql代码片段中,执行单元利用UNION ALL子句对两个输入源进行了合并,在执行时,需要针对每个输入源单独调用一次用户的Map程序,并将两次调用Map程序产生的中间结果合并输出,包括字段k_key、k_tag和v_value。
进一步,在上述代码片段中,执行单元还利用发布子句DISTRIBUTE BY按照k_key字段对中间输出字段进行了分区,并利用排序子句SORT BY按照k_key和k_tag对中间输出字段进行了排序,形成不同的数据组,将不同数据组分发到不同的Reduce程序。如上述Sql代码片段,执行单元利用SELECT与FROM子句从Map程序的输出结果中选择k_key字段相同的输出结果(一个输出结果包括k_key、k_tag和v_value字段)作为临时函数mr2sql_reducer_153717093的输入字段,临时函数mr2sql_reducer_153717093的输出字段为用户配置的输出字段,包括key、value1、value2字段。最后,执行单元利用INSERT OVERWRITE TABLE子句,将mr2sql_reducer_153717093对应的Reduce程序的输出字段作为整个MapReduce作业的执行结果插入指定表mr_join_out中,该指定表是用户配置的。
其中,MapReduce执行框架支持分布式计算的关键是分区,MapReduce定义输入和中间输出数据的分区,通过分而治之来实现并行化。MapReduce执行框架把Map程序的输出数据进行合理地分区,将分区得到的数据组传递到不同的Reduce程序,然后调用Reduce程序进行分布式并行处理。在MapReduce执行框架中,分区通过Shuffle Sort功能实现。在本实施例中,执行单元在利用Sql语言的语法对MapReduce作业的执行描述信息进行重新表达的过程中,还可以利用Sql语言中的DISTRIBUTE BY功能,或者,结合利用DISTRIBUTE BY功能和SORT BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达。
值得说明的是,分布式Sql计算系统一般都会提供DISTRIBUTE BY、SORT BY或者等价功能来完成用户对输入数据的分区、排序然后分组的需求。当然,根据分布式Sql计算系统采用的Sql语言版本的不同,关键词名称会略有差异。例如,在以Hive为代表的分布式计算系统中,一般都称作DISTRIBUTE BY和SORT BY;在以Oracle为代表的分布式计算系统中,相同的等价功能称为PARTITION。
在上述两表关联的场景示例中,输入源中的数据经过Map程序进行处理后产生中间数据,记为key组和value组。其中,DISTRIBUTE BY后的k_key指分区的数据,相同的k_key对应的中间数据列表会传递到同一个Reduce程序中进行处理。其中,分区的列对应到Map程序的输出或者Reduce程序的输入中的那个key对应到DISTRIBUTE BY的键值,排序的列对应到Map程序的输出或者Reduce程序的输入中的那个key对应到SORT BY的键值。在上述示例中,执行单元使用SORT BY子句对字段k_key和k_tag进行排序。如果分区和排序的值不同,比如要做二次排序时,也可以通过DISTRIBUTE BY和SORT BY的组合来实现针对不同列进行分区和排序的功能。
另外,现有一些MapReduce执行框架还可以提供自定义的分区处理器PARTITIONE,用来解决很多特殊场景或者有热点数据等数据倾斜的场景。PARTITIONE是ORACLE使用的分区技术,细节内容可参见现有技术。在本实施例中,用户可以继承MapReduce执行框架的接口编写PartitionerClass来设置自定义的分区。MapReduce作业在SHUFFLE的时候会按照用户指定的PartitionerClass函数的定义将中间数据分发到Reduce程序。针对用户通过PARTITIONER技术自定义分区的情况,本实施例的执行单元也可以采用Sql语言中的DISTRIBUTE BY功能,按照PARTITIONER的定义对中间数据进行分区,将分区得到的数据组分发到不同的Reduce程序。相应地,在执行阶段,执行单元通过反射调用用户编写的PartitionerClass来生成对应的数据组。由此可见,执行单元使用Sql语言中的DISTRIBUTEBY功能,可以解决各种MapReduce作业场景下的转化需求。其中,针对用户通过PARTITIONER技术自定义分区的情况,转换出的部分Sql代码片段如下。
Figure BDA0001958597910000141
在上述代码片段中,@sub_query_0是定义了一个表变量(table variable),命名为@sub_query_0,指代其后面的Sql子句;该子句完成从调用用户的Map程序执行并输出,输出的第一个值是自定义的分区器的取值,然后使用该值做分区,使用输出的k_word做排序。@sub_query_1同样定义了第二个表变量,命名为@sub_query_1,指代其后面的Sql子句;该Sql子句完成调用用户的Reduce程序执行并输出,输入是@sub_query_0定义的Sql子句的输出。@sub_query_2跟@sub_query_1类似,获取前面Sql子语句的输出调用对应的Reduce程序处理;最后通过INSERT语句将执行结果插入到指定表中。其中,_partition_id__是分区器的取值;mr2sql_mapper_0是第一个Sql子句调用的Map程序对应的Sql临时函数的函数名;mr2sql_reducer_1和mr2sql_reducer_2分别是第二个Sql子句和第三个Sql子句调用的Reduce程序对应的Sql临时函数的函数名。
由此可见,本申请实施例的执行单元可以利用Sql语言中的DISTRIBUTE BY功能和排序SORT BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达,从而实现数据的分区和排序,实现并行化处理的目的。
进一步,结合上述几种代码片段的示例可知,MapReduce作业的执行结果可以输出到指定表中,即再次存储。当然,MapReduce作业的执行结果也可以直接输出。
对于执行描述信息中用于描述将执行结果输出至指定表的语句,可以利用Sql语句中的INSERT OVERWRITE/INTO子句或多元插入MULTIINSERT OVERWRITE/INTO子句将执行结果插入指定表中。即可以将执行描述信息中用于描述执行结果输出方式的语句,重新表达为Sql语言中的INSERT OVERWRITE/INTO子句或MULTIINSERT OVERWRITE/INTO子句。
一般来说,若执行结果为一个,可以利用Sql语言中的INSERT OVERWRITE/INTO子句;若执行结果为多个,可以利用Sql语言中的MULTI INSERT OVERWRITE/INTO子句。
对于执行描述信息中用于描述直接输出执行结果的语句,即不需要将执行结果输出至指定表的情况,可以利用Sql语言中的SELECT子句直接将执行结果直接输出至屏幕。这里的屏幕可以是执行单元所在节点设备的屏幕,也可以是用户的终端设备的屏幕,还可以是其它显示终端的屏幕。这意味着,MapReduce作业的执行结果可以根据需要输出至任何设备的屏幕上。
其中,针对用户在MapReduce作业的执行描述信息中配置输出多个执行结果的情况,重新表达后得到的Sql代码片段如下:
Figure BDA0001958597910000161
在上述代码片段中,@sub_query_reducer是定义了一个表变量(tablevariable),命名为@sub_query_reducer,指代其后面的Sql子句;该Sql子句完成从调用用户的reduce程序执行并把输出作为整个程序的输出,该Sql子句是在MapReduce作业存在多个输出的场景下由MapReduce作业的执行描述信息转换成的Sql语句,使用了Sql语言中的MULTIINSERT语法,可以向多个指定表中插入执行结果。mr2sql_reducer_1是执行单元利用create temporary function语句为用户的Reduce程序创建的Sql临时函数的函数名,指向定义的Reduce程序的java类路径。
在实际应用中,可能存在一些复杂的场景,在这些场景中可能需要多个MapReduce作业完成,于是出现了管道(Pipeline)或链式(Chained)Mappper/Reducer,MaxCompute Pipeline等支持类似的串行化Map或Reduce操作。MaxCompute Pipeline是大数据计算服务(MaxCompute)提供的M->R->R编程模型,是在Reduce操作后直接执行下一步Reduce操作,减少中间多余的Map操作。类似串行化的MapReduce作业,一方面可以用更少的作业数量完成同样的任务,减少中间落表造成的多余磁盘IO,提升性能;另一方面增强流程可维护性、流程更清晰调度更简单。
本申请实施例提供的方法不仅适用于简单的MapReduce作业场景,同样适用上述串行化的MapReduce作业场景,将这些串行化MapReduce作业转换为Sql执行更有优势,基于Sql的运维工具和日志系统等,能够更方便地看到各阶段输入输出的详细信息。基于如下Sql代码,可以明显的看到Pipeline作业中各节点输入输出的关系:
Figure BDA0001958597910000171
Figure BDA0001958597910000181
在上述代码片段中,@sub_query_0、@sub_query_1等分别定义了不同的表变量(table variable),分别指代后面的Sql子句;这些Sql子句嵌套调用,完整的表达了Pipeline MapReduce作业。
另外,MapReduce Streaming可以让各种语言编写的遵循标准输入stdin输出stdout的程序运行在分布式计算系统上并行执行。MapReduce Streaming一般提供了StreamJob等工具,基于可执行命令、脚本语言或其他编程语言来实现Map程序和Reduce程序。对于用户使用Streaming框架编写的MapReduce作业(简称为StreamJob),可以使用SQL-TRANSFORM语句来完成,用户不需要再维护和提交Mapreduce作业的执行描述信息。如下图是StreamJob作业自动转化后的Transform的Sql语句,其中的输入文件或输入表、输出文件或输出表分别对应到Sql语句的第一个字句@sub_query_mapper和后面的INSERT子句。Map和Reduce的执行文件可以用SELECT、SQL-TRANSFORM(或相同功能的Map、Reduce using)子句表示。其他的分隔符、序列化等等功能也会做自动转化匹配。
Figure BDA0001958597910000182
Figure BDA0001958597910000191
在上述代码片段中,上面部分描述的MapReduce Streaming调用方法是java程序的调用方法,通过java jar命令调用java程序执行。下面部分从java程序的调用方法转换来的Sql语句,使用了SQL-TRANSFORM语法表达。其中@sub_query_mapper定义了一个表变量(table variable),指代后面的Sql子句;该子句完成从调用用户的Map程序执行并输出;@sub_query_reducer定义了另一个表变量(table variable),指代后面的Sql子句;该Sql子句完成从调用用户的Reduce程序执行并把输出作为整个MapReduce作业的输出,最后把输出结果插入指定表mrs_cmd_out中。
经过上述描述可知,本申请实施例的执行单元在获取用户按照MapReduce执行框架的接口要求使用java语言编写的MapReduce作业的执行描述信息,可以将该执行描述信息中的java语句转换为相应的Sql语句,得到Sql代码片段;之后可以按照分布式Sql执行框架执行该Sql代码片段。
可选地,如图3b所示,是本实施例执行单元的一种内部框架结构,该执行单元包括:程序转换器、解析器、优化器以及执行器。其中,程序转换器主要用于利用Sql语言的语法自动将MapReduce作业的执行描述信息重新表达为Sql代码片段,并将Sql代码片段送入解析器。程序转换器的详细工作原理可参见前述实施例,在此不再赘述。
Sql解析器对Sql代码片段进行语法解析并将解析结果输出至Sql优化器;Sql优化器对解析结果进行优化处理得到执行计划并输出至Sql执行器;Sql执行器执行该执行计划,并在执行计划的执行过程中,反射调用MapReduce作业需要的Map程序和Reduce程序,以完成MapReduce作业。可选地,执行器可以通过Apply算子实现反射调用。
其中,在执行计划的执行过程中,执行器会按照Sql代码片段中限定的各Sql临时函数间的先后顺序,依次反射调用各临时函数对应的Map程序和Reduce程序。各Sql临时函数间的先后顺序表示Map程序和Reduce程序被调用的先后顺序。
另外,在执行计划的执行过程中,执行器还会调用与MapReduce作业相关的Sql函数。相关的Sql函数是指完成MapReduce作业所需的Sql函数,这些Sql函数的输入和输出是数据组的对应关系。这些相关Sql函数包括将Map程序或Reduce程序映射到的Sql函数,例如Sql临时函数。也就是说,执行器会调用Sql代码片段中利用create temporary function子句创建的Sql临时函数,例如上述代码示例中的mapper1、reducer2、reducer8等。当然,除了Sql临时函数之外,也可能调用其它一些Sql函数,例如在反射调用Map程序或Reduce程序的过程中还可能调用一些Sql函数,例如日期函数、求和函数等。需要注意的是,这些Sql函数是本申请自定义的,支持多个输入和多个输出。
由此可见,本实施例的执行器不同于传统Sql执行框架中的执行器,本实施例的执行器可以针对数据组而非针对单条数据进行处理,即在调用Sql函数时,可以将一个数据组,即多条输入数据同时送入Sql函数,该Sql函数可以同时输出多条数据。这使得本实施例的节点设备不仅可以处理普通MapReduce作业,对于大多数需要在Reduce程序中做汇总聚合、关联等操作的MapReduce作业,本实施例的节点设备也可以成功处理。
基于上述描述可知,在本申请各实施例中可以将MapReduce转化为Sql执行,这不仅对大数据分布式计算系统中的存量MapReduce作业的性能和维护性带来了很大的提升,节约大分布式计算系统的运维成本和执行资源;而且,对分布式计算系统中新增加的MapReduce作业也有很大的改进,Sql作业可以对各阶段的输入输出及整体流程一目了然,能方便用户定位和发现问题。
本申请实施例提供的将MapReduce转化为Sql执行,可产生但不限于以下技术效果:
1、一键迁移,屏蔽接口差异
同一个分布式计算系统上不同阶段或者不同的分布式计算系统提供的MapReduce执行框架的接口各异,实现相同的分布式业务逻辑执行程序迁移有比较高的代价,需要重新修改发布上线等。本申请实施例提供的将MapReduce作业自动转化为Sql执行的方案,可以让用户在各阶段向各分布式计算系统提交的MapReduce作业通过同一个执行框架自动转化,可以让它们同时跑在分布式Sql计算系统上,可以复用分布式Sql计算系统的性能优化的红利,降低程序迁移的成本,屏蔽了不同的MapReduce执行框架的接口的差异化。另外,Sql语言比较通用,标准化程度更高,同时可以屏蔽底层执行引擎的差异;在Sql底层的执行引擎更新换代后如更新为MPP或流式处理等都能平滑的做迁移,而不影响上层用户的作业,使得同一份MapReduce作业中的Map程序和Reduce程序可以运行在不同的平台如hadoop、spark、maxcompute等之上。
2、统一引擎,复用Sql引擎的性能红利
在分布式Sql计算系统中,Sql作业规模较大,占用较多资源较多,系统中的执行引擎也在持续优化中,如引入CBO和向量化执行引擎等,而MapReduce执行框架的更新周期相对较慢。MapReduce作业转化为SQL执行后,可以不断获得SQL在CBO和向量化执行引擎持续的性能优化,也可以使用Sql支持的存储格式压缩机制来提高性能,Sql的执行计划经过多层优化后基于代码生成器生成在深度优化执行引擎NATIVE中执行,性能和稳定性保障性更高。MapReduce作业转化为SQL执行后,MapReduce作业能复用SQL执行引擎持续演进中稳定性等方面的优化改进、进一步提高依赖MapReduce作业各业务线产品效能节约线上集群资源和降低成本。
3、功能全面,可以低成本兼容Sql的新功能
MapReduce作业转化为SQL执行后,可以支持Sql增加的各项新功能新类型,可以满足原来MapReduce作业不支持的新需求,如MaxCompute原来的MapReduce作业不支持视图作为输入,转化为Sql作业后因为Sql支持对表和视图的读入,从而可以低成本使用这些功能。而其他需要Sql作业和MapReduce作业都支持的新功能,如TempFile功能,只需要在Sql执行引擎上开发即可,不需要像以往那样在两个执行引擎上都去支持。以MaxCompute为例,MapReduce作业转化为Sql执行后,可以复用Sql的动态调整并发度,输入表为HashCluster等提高超大表join等定制化场景性能、开放新类型varchar、decimal(p,s)等的Sql的改进。
4、维护方便,更稳定、更可靠
从稳定性看,Sql各层新引擎经过大量作业和压力验证更为稳定、failover等机制更有保障;从维护成本看,MapReduce作业转化为Sql执行后,可以不用再维护升级老版本功能,可以更专注节约成本。MapReduce作业转化为Sql执行后,可以对各阶段输入输出及整体流程一目了然,能方便的定位和发现问题;另外,Sql作业能提供了更详细的执行信息、执行计划、编译信息、作业配置信息等。
图4为本申请示例性实施例提供的一种节点设备的结构示意图。如图4所示,该节点设备包括:存储器41和处理器42。
存储器41,用于存储计算机程序,并可被配置为存储其它各种数据以支持在节点设备上的操作。这些数据的示例包括用于在节点设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器41可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器42,与存储器41耦合,用于执行存储器41中的计算机程序,以用于:获取MapReduce作业的执行描述信息,所述执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的;利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段;按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
可选地,MapReduce作业的执行描述信息包括:用户为MapReduce作业配置的Map程序、Reduce程序以及Map程序、Reduce程序的输入输出。
处理器42在利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段时,具体用于:利用Sql语言中的函数定义类语句,将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql函数;利用Sql语言中的查询类语句,将所述用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出;以及利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达。
进一步可选地,处理器42在将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql函数时,具体用于:利用Sql语言中的创建临时函数create temporary function子句,为所述用户配置的Map程序、Reduce程序分别创建相应的Sql临时函数;Sql临时函数指向相应Map程序或Reduce程序的jar包的存储路径。
进一步可选地,处理器42在将所述用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出时,具体用于:
若所述用户配置的Map程序、Reduce程序的输入源是表Table,则利用Sql语言中的选择SELECT和来自FROM子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出;
若所述用户配置的Map程序、Reduce程序的输入源是结构化文件,则利用Sql语言中的Values Table子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出。
更进一步,处理器42具体用于:若所述用户配置了表Table中可作为输入的字段,则利用Sql语言中的选择SELECT和来自FROM子句从所述表Table中选择用户配置的字段作为相应Sql临时函数的输入字段,并将用户配置的输出字段填充为相应Sql临时函数的输出列表;或者,若所述用户未配置表Table中可作为输入的字段,则利用Sql语言中的选择SELECT和来自FROM子句从表Table中选择全部字段作为相应Sql临时函数的输入字段,并将用户配置的输出字段填充为相应Sql临时函数的输出列表。
更进一步,处理器42具体用于:若所述用户配置的Map程序的输入源为多个,且针对每个输入源的处理程序不一致,使用Sql语言的联合全部UNION ALL子句合并多个输入源。
进一步可选地,处理器42还具体用于:利用Sql语言中的发布DISTRIBUTE BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达;或者,利用Sql语言中的发布DISTRIBUTE BY功能和排序SORT BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达。
可选地,处理器42在利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达时,具体用于:若用户配置的MapReduce作业的执行结果为直接输出,则利用Sql语言中的选择SELECT子句将执行结果直接输出至屏幕;若用户配置的MapReduce作业的执行结果为存储至指定表,则利用Sql语言中的插入INSERT OVERWRITE/INTO子句或多元插入MULTIINSERT OVERWRITE/INTO子句将执行结果插入指定表中。
可选地,处理器41中除了存储计算机程序之外,还存Sql执行引擎包括的解析器、优化器和执行器对应的程序代码。基于此,处理器42在执行Sql代码片段时,具体可执行解析器、优化器和执行器对应的程序代码,利用解析器、优化器和执行器对Sql代码片段进行执行处理。具体地:可以将Sql代码片段送入Sql解析器,由Sql解析器对Sql代码片段进行解析并将解析结果输出至Sql优化器;Sql优化器对解析结果进行优化处理得到执行计划并输出至Sql执行器;Sql执行器执行该执行计划,并在该执行计划的执行过程中,反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
进一步,处理器42具体用于:在所述执行计划的执行过程中,按照所述Sql代码片段中限定的程序间的先后顺序,依次反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
进一步,处理器42还用于:在所述执行计划的执行过程中,调用与所述MapReduce作业相关的Sql函数的过程;所述相关的Sql函数的输入和输出是数据组的对应关系,所述相关的Sql函数包含将所述Map程序和Reduce程序映射到的Sql函数。
进一步,如图4所示,该节点设备还包括:通信组件43、显示器44、电源组件45、音频组件46等其它组件。图4中仅示意性给出部分组件,并不意味着节点设备只包括图4所示组件。另外,图4中虚线框内的组件为可选组件,具体可视节点设备的实现形态而定。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被处理器执行时,致使处理器能够实现上述实施例中的相关操作。
上述通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还可以包括近场通信(NFC)模块,射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术等。
上述显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
上述电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

Claims (16)

1.一种映射化简MapReduce作业执行方法,适用于分布式计算系统中的节点设备,其特征在于,所述方法包括:
获取MapReduce作业的执行描述信息,所述执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的,包括用户为MapReduce作业配置的Map程序、Reduce程序以及Map程序、Reduce程序的输入输出;
利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段;
按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业;
其中,利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段,包括:
利用Sql语言中的函数定义类语句,将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql函数;
利用Sql语言中的查询类语句,将所述用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出;以及
利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达。
2.根据权利要求1所述的方法,其特征在于,利用Sql语言中的函数定义类语句,将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql函数,包括:
利用Sql语言中的创建临时函数create temporary function子句,为所述用户配置的Map程序、Reduce程序分别创建Sql临时函数;Sql临时函数指向相应Map程序或Reduce程序的jar包的存储路径。
3.根据权利要求2所述的方法,其特征在于,利用Sql语言中的查询类语句,将所述用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出,包括:
若所述用户配置的Map程序、Reduce程序的输入源是表Table,则利用Sql语言中的选择SELECT和来自FROM子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出;
若所述用户配置的Map程序、Reduce程序的输入源是结构化文件,则利用Sql语言中的Values Table子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出。
4.根据权利要求3所述的方法,其特征在于,利用Sql语言中的选择SELECT和来自FROM子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出,包括:
若所述用户配置了表Table中可作为输入的字段,则利用Sql语言中的选择SELECT和来自FROM子句从所述表Table中选择用户配置的字段作为相应Sql临时函数的输入字段,并将用户配置的输出字段填充为相应Sql临时函数的输出列表;
若所述用户未配置表Table中可作为输入的字段,则利用Sql语言中的选择SELECT和来自FROM子句从表Table中选择全部字段作为相应Sql临时函数的输入字段,并将用户配置的输出字段填充为相应Sql临时函数的输出列表。
5.根据权利要求3所述的方法,其特征在于,
若所述用户配置的Map程序的输入源为多个,且针对每个输入源的处理程序不一致,使用Sql语言的联合全部UNION ALL子句合并多个输入源。
6.根据权利要求3所述的方法,其特征在于,还包括:
利用Sql语言中的发布DISTRIBUTE BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达;或者
利用Sql语言中的发布DISTRIBUTE BY功能和排序SORT BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达。
7.根据权利要求1所述的方法,其特征在于,利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达,包括:
若用户配置的MapReduce作业的执行结果为直接输出,则利用Sql语言中的选择SELECT子句将执行结果直接输出至屏幕;
若用户配置的MapReduce作业的执行结果为存储至指定表,则利用Sql语言中的插入INSERT OVERWRITE/INTO子句或多元插入MULTI INSERT OVERWRITE/INTO子句将执行结果插入指定表中。
8.根据权利要求1-7任一项所述的方法,其特征在于,按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业,包括:
将所述Sql代码片段送入Sql解析器,由Sql解析器对所述Sql代码片段进行解析并将解析结果输出至Sql优化器;
Sql优化器对解析结果进行优化处理得到执行计划并输出至Sql执行器;
Sql执行器执行所述执行计划,并在所述执行计划的执行过程中,反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
9.根据权利要求8所述的方法,其特征在于,在所述执行计划的执行过程中,反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业,包括:
在所述执行计划的执行过程中,按照所述Sql代码片段中限定的程序间的先后顺序,依次反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业。
10.根据权利要求8所述的方法,其特征在于,在所述执行计划的执行过程中,还包括:调用与所述MapReduce作业相关的Sql函数的过程;所述相关的Sql函数的输入和输出是数据组的对应关系,所述相关的Sql函数包含将所述Map程序和Reduce程序映射到的Sql函数。
11.一种节点设备,其特征在于,包括:存储器和处理器;
所述存储器,用于存储计算机程序;
所述处理器,与所述存储器耦合,用于执行所述计算机程序,以用于:
获取MapReduce作业的执行描述信息,所述执行描述信息是用户按照MapReduce执行框架的接口要求使用java语言编写的,包括,用户为MapReduce作业配置的Map程序、Reduce程序以及Map程序、Reduce程序的输入输出;
利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段;
按照分布式Sql执行框架执行所述Sql代码片段,在所述Sql代码片段的执行过程中反射调用所述MapReduce作业需要的Map程序和Reduce程序,以完成所述MapReduce作业;
其中,所述处理器在利用Sql语言的语法将所述执行描述信息重新表达为Sql代码片段时,具体用于:
利用Sql语言中的函数定义类语句,将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql函数;
利用Sql语言中的查询类语句,将所述用户配置的Map程序、Reduce程序的输入输出改写为相应Sql函数的输入输出;以及
利用Sql语言中的输出类语句,对用户配置的MapReduce作业的输出进行重新表达。
12.根据权利要求11所述的节点设备,其特征在于,所述处理器具体用于:利用Sql语言中的创建临时函数create temporary function子句,将所述用户配置的Map程序、Reduce程序分别映射到相应的Sql临时函数;Sql临时函数指向相应Map程序或Reduce程序的jar包的存储路径。
13.根据权利要求12所述的节点设备,其特征在于,所述处理器具体用于:
若所述用户配置的Map程序、Reduce程序的输入源是表Table,则利用Sql语言中的选择SELECT和来自FROM子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出;
若所述用户配置的Map程序、Reduce程序的输入源是结构化文件,则利用Sql语言中的Values Table子句将所述用户配置的Map程序、Reduce程序的输入输出定义为相应Sql临时函数的输入输出。
14.根据权利要求12所述的节点设备,其特征在于,所述处理器具体用于:
利用Sql语言中的发布DISTRIBUTE BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达;或者
利用Sql语言中的发布DISTRIBUTE BY功能和排序SORT BY功能,对用户配置的MapReduce作业中的分区排序SHUFFLE SORT信息进行重新表达。
15.根据权利要求11所述的节点设备,其特征在于,所述处理器具体用于:
若用户配置的MapReduce作业的执行结果为直接输出,则利用Sql语言中的选择SELECT子句将执行结果直接输出至屏幕;
若用户配置的MapReduce作业的执行结果为存储至指定表,则利用Sql语言中的插入INSERT OVERWRITE/INTO子句或多元插入MULTI INSERT OVERWRITE/INTO子句将执行结果插入指定表中。
16.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器能够实现权利要求1-10任一项所述方法中的步骤。
CN201910075468.XA 2019-01-25 2019-01-25 MapReduce作业执行方法、节点设备及存储介质 Active CN111488326B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910075468.XA CN111488326B (zh) 2019-01-25 2019-01-25 MapReduce作业执行方法、节点设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910075468.XA CN111488326B (zh) 2019-01-25 2019-01-25 MapReduce作业执行方法、节点设备及存储介质

Publications (2)

Publication Number Publication Date
CN111488326A CN111488326A (zh) 2020-08-04
CN111488326B true CN111488326B (zh) 2023-04-07

Family

ID=71812097

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910075468.XA Active CN111488326B (zh) 2019-01-25 2019-01-25 MapReduce作业执行方法、节点设备及存储介质

Country Status (1)

Country Link
CN (1) CN111488326B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102799624A (zh) * 2012-06-19 2012-11-28 北京大学 基于Datalog的分布式环境下大图数据查询方法
CN103593401A (zh) * 2013-10-15 2014-02-19 北京航空航天大学 代码转换方法及装置
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN104408134A (zh) * 2013-11-28 2015-03-11 中国科学院计算技术研究所 一种sql到云环境的映射方法及系统
CN105760534A (zh) * 2016-03-10 2016-07-13 上海晶赞科技发展有限公司 自定义的可序列化的数据结构、hadoop集群、服务器及其应用方法
CN105786808A (zh) * 2014-12-15 2016-07-20 阿里巴巴集团控股有限公司 一种用于分布式执行关系型计算指令的方法与设备
CN107798026A (zh) * 2016-09-05 2018-03-13 北京京东尚科信息技术有限公司 数据查询方法和装置
CN108510082A (zh) * 2018-03-27 2018-09-07 苏宁易购集团股份有限公司 对机器学习模型进行处理的方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3182288B1 (en) * 2015-12-15 2019-02-13 Tata Consultancy Services Limited Systems and methods for generating performance prediction model and estimating execution time for applications

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102799624A (zh) * 2012-06-19 2012-11-28 北京大学 基于Datalog的分布式环境下大图数据查询方法
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN103593401A (zh) * 2013-10-15 2014-02-19 北京航空航天大学 代码转换方法及装置
CN104408134A (zh) * 2013-11-28 2015-03-11 中国科学院计算技术研究所 一种sql到云环境的映射方法及系统
CN105786808A (zh) * 2014-12-15 2016-07-20 阿里巴巴集团控股有限公司 一种用于分布式执行关系型计算指令的方法与设备
CN105760534A (zh) * 2016-03-10 2016-07-13 上海晶赞科技发展有限公司 自定义的可序列化的数据结构、hadoop集群、服务器及其应用方法
CN107798026A (zh) * 2016-09-05 2018-03-13 北京京东尚科信息技术有限公司 数据查询方法和装置
CN108510082A (zh) * 2018-03-27 2018-09-07 苏宁易购集团股份有限公司 对机器学习模型进行处理的方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
黄山."基于云计算的大数据学习性能优化技术研究".《中国博士学位论文全文数据库 电子期刊(信息科技辑)》.2018,I138-24. *

Also Published As

Publication number Publication date
CN111488326A (zh) 2020-08-04

Similar Documents

Publication Publication Date Title
US11720581B2 (en) Query decomposition for scalability of continuous query processing
US11216302B2 (en) Modifying task dependencies at worker nodes using precompiled libraries
US20200265047A1 (en) Processing data from multiple sources
CN107818112B (zh) 一种大数据分析作业系统及任务提交方法
KR101621137B1 (ko) 아파치 하둡을 위한 로우 레이턴시 쿼리 엔진
CN102982075B (zh) 支持访问异构数据源的系统和方法
WO2017096940A1 (zh) 一种基于spark-SQL大数据处理平台的数据导入方法
CN102999537B (zh) 一种数据迁移系统和方法
JP6816136B2 (ja) 多様なランタイム環境でモデルと対話してモデルを実行するための統一インターフェイス仕様
US20100162230A1 (en) Distributed computing system for large-scale data handling
JP2014194769A6 (ja) Apache hadoop用の低レイテンシクエリエンジン
US9996597B2 (en) Unified mapreduce framework for large-scale data processing
CN105677812A (zh) 一种数据查询方法及数据查询装置
CN103177059A (zh) 用于数据库计算引擎的分离处理路径
CN109902114B (zh) Es集群数据复用方法、系统、计算机装置及存储介质
CN111078702A (zh) 一种sql语句分类管理及统一查询方法和装置
US20160274874A1 (en) Method and apparatus for processing request
CN110968579B (zh) 执行计划的生成与执行方法、数据库引擎及存储介质
CN110019111B (zh) 数据处理方法、装置、存储介质以及处理器
US10019473B2 (en) Accessing an external table in parallel to execute a query
WO2014137258A1 (en) Selection of data storage settings for an application
CN106484826A (zh) 一种操作数据库的方法及装置
CN115857918A (zh) 数据处理方法、装置、电子设备及存储介质
CN117349368A (zh) 基于Flink的跨库数据实时同步任务管理系统及方法
US11169993B2 (en) Datastore mechanism for managing out-of-memory data

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant