基于MapReduce计算模型的任务封装方法及装置的制作方法

文档序号:6399347阅读:204来源:国知局

专利名称::基于MapReduce计算模型的任务封装方法及装置的制作方法
技术领域
:本发明涉及云计算领域,具体涉及一种基于MapReduce计算模型的任务封装方法及装置。
背景技术
:Hadoop是一个能够对大量数据进行分布式处理的软件框架,用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式系统(HadoopDistributedFileSystem,简称为HDFS)。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上,而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了可移植操作系统接口(PortableOperatingSystemInterfaceofUnix,缩写为POSIX)的要求,这样可以以流的形式访问文件系统中的数据。MapReduce是Hadoop的核心组件之一,Hadoop包括两部分,一是分布式文件系统,一部是分布式计算系统,也就是MapReduce,两者缺一不可。也就是说,可以通过MapReduce很容易在Hadoop平台上进行分布式的计算编程。Hadoop平台的框架代码由Java语言编写,因此,MapReduce计算模型对于原生Java程序,可以直接被加载调用。但是对于其他语言的程序无法直接调用,只能在其之外,对其输入输出的数据以数据流的方式进行写和读。这种数据流的形式在程序中可以称为流作业(StreamingJob)。其中流(Streaming)就是指输入输出数据的形式。这些数据一般指Linux下的各种可执行程序:包括但不限于Linux外壳程序(Shell程序)、Python或Perl程序的脚本程序文件、使用其他语言编写的程序,使用Linux编译器编译后输出的可执行文件,如后缀为eXe、bin的一些文件。MapReduce计算模型环境时,将用户程序自定义的业务逻辑封装在分布式计算系统自带的壳任务内,由壳任务来引导整个工作流。MapReduce计算模型环境时,在运行MapReduce计算模型支持的Java编译程序,使用Java标准打包器将Java编译程序封装成Jar格式文件,形成Java作业类型的任务,然后将Java作业类型的任务信息,即Jar格式文件的位置信息作为参数传递给壳任务。在计算机程序中,任务是指在多程序或多进程环境中,由计算机来完成的基本工作元,它是控制程序的一个或多个指令序列,壳任务是指按照MapReduce计算模型自定义的开发接口开发的,用于封装其他程序的程序。用户在开发分布式计算系统的时候,往往有多种多样的计算需求,需要使用除Java语言以外的其他语言编写程序,而MapReduce计算模型是基于Java语言开发的,对于其他计算机程序语言编写的程序不支持,限制了整个分布式计算系统的灵活性和适应性。
发明内容本发明要解决的一个技术问题是现有技术中的MapReduce计算模型是基于Java语言开发的,对于其他计算机程序语言编写的程序不支持,限制了整个分布式计算系统的灵活性和适应性的技术问题,从而提供一种将非MapReduce支持的作业类型封装为MapReduce支持的任务类型的基于MapReduce计算模型的任务封装方法及装置。为解决上述技术问题,本发明采用的技术方案如下:—种基于MapReduce计算模型的任务封装方法,包括如下步骤:SI,任务引擎获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序,若是,则执行步骤S2;若否,则执行步骤S4;S2,使用Java标准打包器将Java编译程序封装成Jar格式文件;S3,将Jar格式文件的位置信息传递给MapReduce计算模型中运行的壳任务;S4,判断所述输入程序是否为流作业类型的程序,若是,执行步骤S5;若否,则执行步骤S6;S5,将流作业类型的程序作为流作业类型的任务,并将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;S6,将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务。在所述步骤SI中,判断所述任务是否为MapReduce计算模型支持的Java编译程序,包括如下步骤:S101,按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试,如果返回正常数据,则确定所述输入程序是MapReduce计算模型支持的Java编译程序;否则,确定所述任务类型不是MapReduce计算模型支持的Java程序编译文件。在所述步骤S6中,将所述输入程序封装为流作业类型的任务,包括如下步骤:S601,将所述输入程序保存到分布式计算系统,并将所述输入程序启动信息传递给所述壳任务,将所述输入程序和启动信息作为流作业类型的任务,所述壳任务调用该流作业类型的任务时,通过调用该流作业类型任务的所述启动信息来执行输入程序。所述流作业类型,包括Linux环境下的可执行程序。所述Linux环境下的可执行程序包括Linux外壳程序、Python或PerI脚本程序、计算机程序经编译后输出的可执行文件。所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息。基于同一发明构思,本发明还提供一种基于MapReduce计算模型的任务封装装置,包括第一判断模块、打包模块、第一传递模块、第二判断模块、第二传递模块和封装模块;其中,所述第一判断模块,用于获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序;所述打包模块,用于当所述输入程序为MapReduce计算模型支持的Java编译程序时,将所述输入打包为Java作业类型的任务,即使用Java标准打包器将Java编译程序封装成Jar格式文件;所述第一传递模块,用于将所述Java作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述第二判断模块,用于判断所述输入程序是否为流作业类型的程序;所述第二传递模块,用于将所述流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述封装模块,用于将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型。所述第一判断模块包括测试子模块;其中,所述测试子模块,用于按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试。所述封装模块,包括传递子模块;其中,所述传递子模块,用于将所述流作业类型的任务保存到分布式计算系统,并将所述流作业类型的任务启动信息传递给所述壳任务。所述流作业类型,包括Linux环境下的可执行程序。所述Linux环境下的可执行程序包括Linux外壳程序、Python或PerI脚本程序、计算机程序经编译后输出的可执行文件。根据权利要求11所述的任务封装装置,其特征在于,所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息。本发明的上述技术方案相比现有技术具有以下优点:本发明的一种基于MapReduce计算模型的任务封装方法及装置,首先,判断输入程序是否为MapReduce计算模型支持的Java编译程序或流作业类型的程序,若是,对于Java编译程序,则将输入程序直接打包为Java作业类型的任务,将流作业类型的程序作业流作业类型的任务,由用户程序直接调用;否则将所述输入程序封装为流作业类型的任务,将流作业类型任务启动信息传递给壳任务。本发明将非Java语言编译的程序进行封装,使MapReduce计算模型支持非Java语言编译的程序,满足了用户多种多样的计算需求;本发明支持更多的计算类型,在解决实际问题时,可以更关注在业务逻辑而非对计算任务的底层封装,更快更好地解决实际生产需求。本发明所使用的壳任务包含有任务的存储地址信息、启动信息和用户程序自定义的业务逻辑信息,能够控制程序的流转,从而满足用户复杂的计算需求。将流作业类型任务的代码保存在所述分布式计算系统中,并将所述流作业类型的任务的启动信息传递给所述壳任务,由所述壳任务来控制整个程序的流转,这种封装方式,简单易于实现,增加的代码量较少。所述分布式计算系统在调用所述流作业类型的任务时,只需要发出调用命令即可,而不用关心所述流作业类型的任务代码由何种计算机程序语言编与。为了使本发明的内容更容易被清楚的理解,下面根据本发明的具体实施例并结合附图,对本发明作进一步详细的说明,其中:图1为本发明的实施例一基于MapReduce计算模型的任务封装方法的流程示意图2为本发明的实施例二的基于MapReduce计算模型的任务封装装置的示意图。具体实施例方式实施例一:参见图1,本发明的实施例一种基于MapReduce计算模型的任务封装方法,包括如下步骤:SI,任务引擎获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序,若是,则执行步骤S2;若否,则执行步骤S4;S2,将所述输入程序打包为Java作业类型的任务,即使用Java标准打包器将Java编译程序封装成Jar格式文件;S3,将Java作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;S4,判断所述输入程序是否为流作业类型的程序,若是,将流作业类型的程序作为流作业类型的任务,执行步骤S5;若否,则执行步骤S6;所述流作业类型的程序包括Linux环境下的可执行程序;所述Linux环境下的可执行程序包括Linux外壳程序、Python或PerI脚本程序、计算机程序经编译后输出的可执行文件;S5,将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;S6,将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;本步骤中的所述输入程序指除Java以外的计算机语言编写的计算机程序程序,将所述输入程序封装为流作业类型的任务具体指将所述输入程序在Linux操作系统中编译成可执行程序,然后将编译后的可执行程序和该可执行程序的启动信息打包成流作为类型的任务。在所述步骤SI中,所述MapReduce计算模型支持的Java编译程序,就是Java程序经编译后形成的程序文件,扩展名为.class。进一步地,在所述步骤SI中,判断所述任务是否为MapReduce计算模型支持的Java编译程序,包括如下步骤:S101,按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试,如果返回正常数据,则确定所述输入程序是MapReduce计算模型支持的Java编译程序;否则,确定所述任务类型不是MapReduce计算模型支持的Java程序编译文件。进一步地,将所述输入程序封装为流作业类型的任务,包括如下步骤:S601,将所述流作业类型的任务保存到分布式计算系统,并将所述流作业类型的任务的启动信息传递给所述壳任务。进一步地,在所述步骤S2中,Java作业类型的任务信息包括所述任务的存储地址信息和数据类型信息;所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息、地址信息和任务中设定的参数值信息。任务信息是静态信息,启动信息是动态信息。例如,有一个任务,它的参数共有4个,分别为A、B、C、D,A为整数类型,B为字符串类型,C为日期类型,D为字符串类型。这种信息为任务信息。在启动该任务时,A的值为10,B的值为”/root/inputO”(B表示该任务执行时的输入数据所在位置),C为当前日期,D的值为”/root/outputO”(D表示该任务执行时的输出数据所在位置),这种信息为启动信息。启动信息是每一次配置任务并启动时动态输入的。在本实施例中,以C++程序作为输入程序进行任务封装。所述C++程序文件名为helloworld.cpp,保存为文本格式文件。在标准Linux操作系统中,采用gcc编译器对helloworld.cpp文件进行编译,输出可执行文件helloworld.exe。将所述文件helloworld.exe复制到分布式系统,任务引擎为所述helloworld.exe文件设定用户需要的参数,所述参数为任务信息,所述参数的值为启动信息,分布式文件系统的壳任务在调用helloworld.exe时,所述helloworld.exe文件和任务信息作为一个任务,所述壳任务在调用该任务时,由任务引擎将启动信息传递给壳任务,上述任务可以在分布式系统中执行。本发明将非Java语言编译的程序进行封装,使MapReduce计算模型支持非Java语言编译的程序,满足了用户多种多样的计算需求;本发明支持更多的计算类型,在解决实际问题时,可以更关注在业务逻辑而非对计算任务的底层封装,更快更好地解决实际生产需求。本发明所使用的壳任务包含有任务的存储地址信息、启动信息和用户程序自定义的业务逻辑信息,能够控制程序的流转,从而满足用户复杂的计算需求。实施例二:基于同一发明构思,本发明还提供一种基于MapReduce计算模型的任务封装装置,包括第一判断模块、打包模块、第一传递模块、第二判断模块、第二传递模块和封装模块;其中,所述第一判断模块,用于获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序;所述打包模块,用于当所述输入程序就MapReduce计算模型支持的Java编译程序时,将所述输入打包为Java作业类型的任务,即使用Java标准打包器将Java编译程序封装成Jar格式文件;所述第一传递模块,用于将所述Java作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述第二判断模块用于判断所述输入程序是否为流作业类型的程序;所述第二传递模块,用于将所述流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述封装模块,用于将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型。所述第一判断模块还包括测试子模块;其中,所述测试子模块,用于按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试。所述封装模块,包括传递子模块;其中,所述传递子模块,用于将所述流作业类型的任务保存到分布式计算系统,并将所述流作业类型的任务启动信息传递给所述壳任务。所述流作业类型,包括Linux环境下的可执行程序。所述Linux环境下的可执行程序包括Linux外壳程序、Python或Perl脚本程序、计算机程序经编译后输出的可执行文件。所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息。本发明的基于MapReduce计算模型的任务封装装置,本发明将非Java语言编译的程序进行封装,使MapReduce计算模型支持非Java语言编译的程序,满足了用户多种多样的计算需求;本发明支持更多的计算类型,在解决实际问题时,可以更关注在业务逻辑而非对计算任务的底层封装,更快更好地解决实际生产需求。本发明所使用的壳任务包含有任务的存储地址信息、启动信息和用户程序自定义的业务逻辑信息,能够控制程序的流转,从而满足用户复杂的计算需求。显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。权利要求1.一种基于MapReduce计算模型的任务封装方法,其特征在于,包括如下步骤:SI,任务引擎获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序,若是,则执行步骤S2;若否,则执行步骤S4;52,使用Java标准打包器将Java编译程序封装成Jar格式文件;53,将Jar格式文件的位置信息传递给MapReduce计算模型中运行的壳任务;S4,判断所述输入程序是否为流作业类型的程序,若是,执行步骤S5;若否,则执行步骤S6;S5,将流作业类型的程序作为流作业类型的任务,并将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;S6,将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务。2.根据权利要求1所述的任务封装方法,其特征在于,在所述步骤SI中,判断所述任务是否为MapReduce计算模型支持的Java编译程序,包括如下步骤:S101,按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试,如果返回正常数据,则确定所述输入程序是MapReduce计算模型支持的Java编译程序;否则,确定所述任务类型不是MapReduce计算模型支持的Java程序编译文件。3.根据权利要求1或2所述的任务封装方法,其特征在于,在所述步骤S6中,将所述输入程序封装为流作业类型的任务,包括如下步骤:S601,将所述输入程序保存到分布式计算系统,并将所述输入程序启动信息传递给所述壳任务,将所述输入程序和启动信息作为流作业类型的任务,所述壳任务调用该流作业类型的任务时,通过调用该流作业类型任务的所述启动信息来执行输入程序。4.根据权利要求1-3任一所述的任务封装方法,其特征在于,所述流作业类型,包括Linux环境下的可执行程序。5.根据权利要求4所述的任务封装方法,其特征在于,所述Linux环境下的可执行程序包括Linux外壳程序、Python或PerI脚本程序、计算机程序经编译后输出的可执行文件。6.根据权利要求3所述的任务封装方法,其特征在于,所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息。7.一种基于MapReduce计算模型的任务封装装置,其特征在于,包括第一判断模块、打包模块、第一传递模块、第二判断模块、第二传递模块和封装模块;其中,所述第一判断模块,用于获取输入程序,判断所述输入程序是否为MapReduce计算模型支持的Java编译程序;所述打包模块,用于当所述输入程序为MapReduce计算模型支持的Java编译程序时,将所述输入打包为Java作业类型的任务,即使用Java标准打包器将Java编译程序封装成Jar格式文件;所述第一传递模块,用于将所述Java作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述第二判断模块,用于判断所述输入程序是否为流作业类型的程序;所述第二传递模块,用于将所述流作业类型的任务信息传递给MapReduce计算模型中运行的壳任务;所述封装模块,用于将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给MapReduce计算模型。8.根据权利要求7所述的任务封装装置,其特征在于,所述第一判断模块包括测试子模块;其中,所述测试子模块,用于按照MapReduce计算模型定义的接口标准,对所述输入程序进行测试。9.根据权利要求7或8所述的任务封装装置,其特征在于,所述封装模块,包括传递子模块;其中,所述传递子模块,用于将所述流作业类型的任务保存到分布式计算系统,并将所述流作业类型的任务启动信息传递给所述壳任务。10.根据权利要求7-9任一所述的任务封装装置,其特征在于,所述流作业类型,包括Linux环境下的可执行程序。11.根据权利要求10所述的任务封装装置,其特征在于,所述Linux环境下的可执行程序包括Linux外壳程序、Python或PerI脚本程序、计算机程序经编译后输出的可执行文件。12.根据权利要求9所述的任务封装装置,其特征在于,所述流作业类型的任务的启动信息包括所述流作业类型的任务的调用命令信息。全文摘要本发明涉及一种基于MapReduce计算模型的任务封装方法及装置,所述方法包括如下步骤获取输入程序,判断输入程序是否为Java编译程序,若是,则将输入程序打包为Java作业类型的任务,即使用Java标准打包器将Java编译程序封装成Jar格式文件;将Java作业类型的任务信息传递给壳任务;若否,则判断输入程序是否为流作业类型的程序,若是,则将流作业类型的程序作为流作业类型的任务,将流作业类型的任务信息传递给壳任务;若否,则将所述输入程序封装为流作业类型的任务,将流作业类型的任务信息传递给壳任务。本发明支持更多的计算类型,在解决实际问题时,可以更关注在业务逻辑而非对计算任务的底层封装,更快更好地解决实际生产需求。文档编号G06F9/45GK103150161SQ201310050148公开日2013年6月12日申请日期2013年2月6日优先权日2013年2月6日发明者岳洋,钮毅申请人:中金数据系统有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1