任务提交方法及装置
技术领域
本发明实施例涉及数据处理技术领域,并且更具体地,涉及一种任务提交方法及装置。
背景技术
目前,在大数据处理***中,一般包括任务发送方和任务处理方,两者远程连接,使大数据处理不再受地域限制。任务发送方在提交任务给任务处理方时,需要遵循一定的规则,才能成功的将任务提交给任务处理方。这就需要在任务发送方集成与任务处理方相同或相应的环境,造成任务发送与对应执行环境的强耦合,增加了完成任务的复杂程度,造成不必要的资源浪费。下面具体以Apache Spark为例对当前大数据处理中任务发送存在的问题进行说明。
Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎,目前很多企业都在使用该计算引擎进行大规模的数据处理。利用Apache Spark进行数据处理首先需要向Apache Spark集群发送Spark任务,当前Spark任务发送包括两种方式,一种是通过脚本spark-submit提交,另一种是通过Apache Spark提供的api SparkLauncher进行提交。可见目前这两种Spark任务提交方式都需要在任务提交方集成Apache Spark。由于Spark任务是在Apache Spark集群执行,任务发送方并不需要执行任何的Spark逻辑,因此如果只是为了发送Spark任务,就在发送方集成Apache Spark,不仅会造成Spark任务提交与ApacheSpark的强耦合,使Spark任务对Apache Spark存在很强的依赖性,并且会增加完成Spark任务的复杂程度,造成不必要的资源浪费。
发明内容
本发明实施例提供一种任务提交方法及装置,其能够生成保证任务正常执行的任务提交体,并利用应用层面向对象的通信协议提交任务,由于应用层面向对象的通信协议适用于任何一种资源调度器,因此任务发送方不需要集成任务执行的环境也能将任务发送给资源调度器,从而使任务提交不再依赖任务执行环境,解除了任务提交与任务执行环境的耦合,减小了完成任务的复杂程度,节省了完成任务的需要使用的资源。
第一方面,提供了一种任务提交方法,所述方法包括如下步骤:
接收任务参数,其中所述任务参数包括执行任务代码包的地址和资源调度器类型;
根据所述执行任务代码包的地址确定执行任务的编程语言;
根据所述编程语言生成对应的配置文件,并将所述配置文件存储到预定位置;
根据所述编程语言和所述资源调度器类型确定执行任务的环境参数;
根据所述预定位置、所述环境参数以及所述执行任务代码包的地址生成任务提交体,并将所述任务提交体通过应用层面向对象的通信协议发送给所述资源调度器。
结合第一方面,在第一种可能的实现方式中,所述方法还包括以下步骤:
根据所述资源调度器类型确定与资源调度器通信的接口地址;利用所述接口地址向对应的资源调度器发送任务提交申请,以使所述资源调度器生成对应的任务标识符并为任务分配执行资源,其中执行资源包括执行任务需要的内存大小;
接收所述资源调度器发送的所述任务标识符和执行资源;
所述任务提交体根据所述预定位置、所述环境参数、所述执行任务代码包的地址、所述任务标识符以及所述执行资源生成。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括以下步骤:
根据所述编程语言确定代码执行的主类;
所述任务提交体根据所述预定位置、所述环境参数、所述执行任务代码包的地址、所述任务标识符、所述代码执行的主类以及所述执行资源生成。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述任务参数还包括任务名称、任务最大重复提交次数、任务类型、第一标识符和第二标识符;其中所述第一标识符用于标识是否对任务的执行进行托管,所述第二标识符用于标识是否保存任务执行过程中的执行结果;
所述任务提交体根据所述预定位置、所述环境参数、所述执行任务代码包的地址、所述任务标识符、所述代码执行的主类、所述执行资源、任务名称、任务最大重复提交次数、任务类型、第一标识符以及第二标识符生成。
结合第一方面,在第四种可能的实现方式中,所述方法还包括如下步骤:
根据所述执行任务代码包的地址确定所述执行任务代码包的大小和时间戳;
所述任务提交体根据预定位置、所述环境参数、所述执行任务代码包的地址、所述执行任务代码包的大小以及所述执行任务代码包的时间戳生成。
结合第一方面,在第五种可能的实现方式中,所述方法还包括如下步骤:
确定所述配置文件的大小和时间戳;
所述任务提交体根据预定位置、所述环境参数、所述执行任务代码包的地址、所述配置文件的大小以及所述配置文件时间戳生成。
结合第一方面,在第六种可能的实现方式中,所述应用层面向对象的通信协议为超文本传输协议。
第二方面,提供了一种任务提交装置,所述装置包括:
第一参数接收模块,用于接收任务参数,其中所述任务参数包括执行任务代码包的地址和资源调度器类型;
软件确定模块,用于根据所述执行任务代码包的地址确定执行任务的编程语言;
配置文件处理模块,用于根据所述编程语言生成对应的配置文件,并将所述配置文件存储到预定位置;
环境参数确定模块,用于根据所述编程语言和所述资源调度器类型确定执行任务的环境参数;
任务提交模块,用于根据所述预定位置、所述环境参数以及所述执行任务代码包的地址生成任务提交体,并将所述任务提交体通过应用层面向对象的通信协议发送给所述资源调度器。
结合第二方面,在第一种可能的实现方式中,所述装置还包括:
申请提交模块,用于根据所述资源调度器类型确定与资源调度器通信的接口地址,并利用所述接口地址向对应的资源调度器发送任务提交申请,以使所述资源调度器生成对应的任务标识符并为任务分配执行资源,其中执行资源包括执行任务需要的内存大小;
第二参数接收模块,用于接收所述资源调度器发送的所述任务标识符和执行资源;
所述任务提交模块,还用于根据所述预定位置、所述环境参数、所述执行任务代码包的地址、所述任务标识符以及所述执行资源生成所述任务提交体。
结合第二方面,在第二种可能的实现方式中,所述装置还包括:
主类确定模块,用于根据所述编程语言确定代码执行的主类;
所述任务提交模块,还用于根据所述预定位置、所述环境参数、所述执行任务代码包的地址、所述任务标识符、所述代码执行的主类以及所述执行资源生成所述任务提交体。
在本发明实施例的上述技术方案中,首先接收任务参数,之后根据任务参数确定编程语言和执行任务的环境参数,根据编程语言生成配置文件,并将配置文件存储到预定位置;最后根据预定位置、环境参数以及执行任务代码包的地址生成任务提交体,并将任务提交体通过应用层面向对象的通信协议发送给资源调度器。上述技术方案能够生成保证任务正常执行的任务提交体,并利用应用层面向对象的通信协议提交该任务提交体,由于应用层面向对象的通信协议适用于任何一种资源调度器,因此任务发送方不需要集成任务执行的环境也能将任务发送给资源调度器,从而使任务提交不再依赖任务执行环境,解除了任务提交与任务执行环境的耦合,减小了完成任务的复杂程度,节省了完成任务的需要使用的资源。
附图说明
为了更清楚的说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性的示出了根据本发明一实施例的任务提交方法的流程图。
图2示意性的示出了根据本发明再一实施例的任务提交方法的流程图。
图3示意性的示出了根据本发明又一实施例的任务提交方法的流程图。
图4示意性的示出了根据本发明一实施例的任务提交装置的框图。
图5示意性的示出了根据本发明再一实施例的任务提交装置的框图。
图6示意性的示出了根据本发明又一实施例的任务提交装置的框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种任务提交方法,如图1所示,该方法包括如下步骤:
110、接收任务参数,其中任务参数包括执行任务代码包的地址和资源调度器类型;
此步骤中,执行任务代码包包括执行任务的脚本,根据执行任务代码包的地址就可以找到执行任务的代码。任务处理方可能使用多种资源调度器,例如Apache spark集群就可以使用多种资源调度器:yarn,mesos,standalone,因此在任务参数中需要指明执行该任务所使用的资源调度器。
120、根据执行任务代码包的地址确定执行任务的编程语言;
此步骤中,根据执行任务代码包的地址可以查询到执行任务代码包,根据执行任务代码包的后缀就可以判断出执行当前任务需要使用的编程语言。
130、根据编程语言生成对应的配置文件,并将配置文件存储到预定位置;
同一个任务处理方可能同时支持多种编程语言,例如,Apache Spark,其本身的编写语言是scala,但是可以支持java,scala,python和R等编程语言编写的脚本或代码。使用每种编程语言去执行代码对应的操作都需要一些依赖文件或依赖库,因此需要根据不同的编程语言选择不同的配置生成类去生成配置文件。配置文件处于公共位置,包括一些基本参数,如任务执行所依赖的依赖文件或依赖库形成的压缩包(即依赖包)的公共路径及属性,给任务发送驱动分配的内存大小等等。以资源调度器yarn为例,配置文件中包括依赖包的地址,依赖包的大小,依赖包的时间戳以及依赖包的类型这四项属性。
以Apache Spark中任务的执行为例,对生成配置文件进行说明。具体地,将spark根目录下的jars文件夹里的所有jar包打成tar.gz包,配置文件记录tar.gz包的地址。由于java和scala都是基于JVM运行的,这两种语言编写的spark任务只需依赖jars文件夹下的jar包和任务代码jar包即可,因此配置文件中只需要记录这两种包的地址。而python和R语言编写的任务不仅要依赖以上的jar包,还要依赖各自的一些依赖文件或依赖库,所以需要提前在HDFS中约定一处位置(即预定位置)来保存jar的压缩包、python和R所依赖的依赖文件或依赖库的压缩包,即需要提前在HDFS中约定一处位置(即预定位置)来保存配置文件。
综合以上,本步骤中,根据任务参数可以获得该任务的编码语言,然后获取该编程语言执行任务所需的依赖包的相关信息,这里可以通过HDFS的相关操作api来获得依赖包的大小,时间戳等信息,然后按照Apache Spark等具体任务执行环境规定的格式拼接生成相应的配置文件并上传至HDFS中,将配置文件地址留存作为任务提交体中的参数项。
应当说明的是,上述依赖文件或依赖库打包后形成依赖包,配置文件中只需记录依赖包的地址即可。
140、根据编程语言和资源调度器类型确定执行任务的环境参数;
环境参数取决于使用哪种编程语言以及哪种资源调度器,因此,此步骤中根据编程语言和资源调度器类型确定执行任务的环境参数。环境参数是任务执行必需的一些数据,没有这些数据将无法完成任务的执行。
150、根据预定位置、环境参数以及执行任务代码包的地址生成任务提交体,并将任务提交体通过应用层面向对象的通信协议发送给资源调度器;
此步骤中,应用层面向对象的通信协议适用于任何一种资源调度器,因此任务发送方不需要集成任务执行的环境也能将任务发送给资源调度器。优选地,应用层面向对象的通信协议为超文本传输协议。
本实施例的任务提交方法能够生成保证任务正常执行的任务提交体,并利用应用层面向对象的通信协议提交该任务提交体,由于应用层面向对象的通信协议适用于任何一种资源调度器,因此任务发送方不需要集成任务执行的环境也能将任务发送给资源调度器,从而使任务提交不再依赖任务执行环境,解除了任务提交与任务执行环境的耦合,减小了完成任务的复杂程度,节省了完成任务的需要使用的资源。
应当说明的是本实施例以及下面实施例的任务提交方法均由任务发送方的任务发送处理器完成,任务参数由任务发送者提供。
在一个实施例中,如图2所示,任务提交方法还包括以下步骤:
210、根据资源调度器类型确定与资源调度器通信的接口地址;利用接口地址向对应的资源调度器发送任务提交申请,以使资源调度器生成对应的任务标识符并为任务分配执行资源,其中执行资源包括执行任务需要的内存;
不同的资源调度器的地址格式不同,此步骤根据任务参数中资源调度器的类别可以确定资源调度器的地址,在拼接上对应类型的资源调度器与任务发送处理器的接口地址即可获得任务发送处理器与资源调度器通信的接口地址URL,根据该URL即可实现任务发送处理器与资源调度器的通信。任务发送处理器根据该URL进行任务提交请求,资源调度器接收任务提交请求后判断是否存在一个能够与任务发送处理器通信的完整的地址,如果存在,则生成任务标识符,并为该任务分配执行资源。这里的执行资源包括但不限于是执行任务需要的内存,例如还可以包括虚拟内核数。
220、接收资源调度器发送的任务标识符和执行资源;
此步骤中,可以使用httpClient调用从返回的json体中获得申请到的任务标识符;
230、任务提交体根据预定位置、环境参数、执行任务代码包的地址、任务标识符以及执行资源生成。
上述步骤210和220可以放在上一实施例的步骤110之前,但是本发明对比并不进行限定。
本实施例在第一个实施例的基础上,在任务体提交体中增加了任务标识符和执行资源,从而在提交多个任务时,能够将各个任务以及对应的执行资源区分开来,保证了任务的顺利完成。
在一个实施例中,如图3所示,任务提交方法还包括以下步骤:
310、根据编程语言确定代码执行的主类;
任务的执行可能用到多种编程语言,根据任务执行环境以及编程语言的不同,可能需要指定代码执行的主类,例如Apache Spark,其编程语言是scala,但是其还同时支持java,scala,python和R编程语言,这是因为其在任务执行非JVM编程语言(例如python和R)时运用了对应的编程语言的代码执行主类。可见,要进一步地保证任务顺利的完成,需要在任务提交体中增加代码执行主类。
320、任务提交体根据预定位置、环境参数、执行任务代码包的地址、任务标识符、代码执行的主类以及执行资源生成。
在一个实施例中,任务参数还包括任务名称、任务最大重复提交次数、任务类型、第一标识符和第二标识符;其中第一标识符用于标识是否对任务的执行进行托管,用布尔值表示,第二标识符用于标识是否保存任务执行过程中的执行结果,用布尔值表示。
任务提交体根据预定位置、环境参数、执行任务代码包的地址、任务标识符、代码执行的主类、执行资源、任务名称、任务最大重复提交次数、任务类型、第一标识符以及第二标识符生成。
在一个实施例中,任务提交方法还包括如下步骤:
410、根据执行任务代码包的地址确定执行任务代码包的大小和时间戳;
420、任务提交体根据预定位置、环境参数、执行任务代码包的地址、执行任务代码包的大小以及执行任务代码包的时间戳生成。
本实施例将执行任务代码包的大小和时间戳增加到任务提交体中。
在一个实施例中,任务提交方法还可以包括如下步骤:
510、确定配置文件的大小和时间戳;
520、任务提交体根据预定位置、环境参数、执行任务代码包的地址、配置文件的大小以及配置文件时间戳生成。
本实施例将配置文件的大小和时间戳增加到任务提交体中。
综合以上实施例,可见,任务提交体中可以包括任务标识符、执行资源、任务名称、任务最大重复提交次数、任务类型(例如PIG,SPARK,MR)、第一标识符、第二标识符以及应用管理器容器描述;其中应用管理器容器描述包括任务相关资源信息、代码对应的主类命令、任务执行需要的环境参数。这里的任务相关资源信息包括上述执行任务代码包的地址、执行任务代码包的大小、执行任务代码包的时间戳、配置文件的地址(即预定位置)、配置文件的大小以及配置文件的时间戳。
具体到Apache Spark中的任务提交,为了解决编程语言,资源调度器存在的差异性问题,可以抽取出两个参数来标识出编程语言和资源调度器类型两个属性,然后通过面向接口的编程方式来规划出12种不同的提交体生成器(调度器:yarn,mesos,standalone;语言:java,python,scala,R;取所有资源调度器和语言的配对),然后通过httpClient将生成的json体提交到相应的资源调度器的web API来达到以HTTP方式提交spark任务的目的。
本发明实施例的任务提交方法是一种基于应用层面向对象的通信协议,例如http协议来进行任务提交的方式,该方式使任务发送方的任务发送代码不用依赖任何任务执行环境,通过传参的方式得到HDFS的资源定位和该任务所获得的执行资源,根据获得的参数判断资源调度器类型和编程语言,选取不同的任务发送处理器,并根据参数生成相应的任务执行所需的配置文件,并上传至HDFS上的预定位置,最后利用选取的任务发送处理器生成相应的任务提交体,调用不同的资源调度器的HTTP接口,来达到任务提交的目的。本发明实施例的任务提交方法在使用上与官方提供的API使用方式基本相同,但是没有依赖任务执行环境中的任何变量,与任务执行环境无耦合,可轻松集成进各种项目,并且提供了比官方API更丰富的查询功能。
对应于上述任务提交方法,本发明实施例还提供了一种任务提交装置,如图4所示,该装置包括:
第一参数接收模块,用于接收任务参数,其中任务参数包括执行任务代码包的地址和资源调度器类型;
软件确定模块,用于根据执行任务代码包的地址确定执行任务的编程语言;
配置文件处理模块,用于根据编程语言生成对应的配置文件,并将配置文件存储到预定位置;
环境参数确定模块,用于根据编程语言和资源调度器类型确定执行任务的环境参数;
任务提交模块,用于根据预定位置、环境参数以及执行任务代码包的地址生成任务提交体,并将任务提交体通过应用层面向对象的通信协议发送给资源调度器。
在一个实施例中,如图5所示,任务提交装置还包括:
申请提交模块,用于根据资源调度器类型确定与资源调度器通信的接口地址,并利用接口地址向对应的资源调度器发送任务提交申请,以使资源调度器生成对应的任务标识符并为任务分配执行资源,其中执行资源包括执行任务需要的内存大小;
第二参数接收模块,用于接收资源调度器发送的任务标识符和执行资源;
任务提交模块,还用于根据预定位置、环境参数、执行任务代码包的地址、任务标识符以及执行资源生成任务提交体。
在一个实施例中,如图6所示,任务提交装置还包括:
主类确定模块,用于根据编程语言确定代码执行的主类;
任务提交模块,还用于根据预定位置、环境参数、执行任务代码包的地址、任务标识符、代码执行的主类以及执行资源生成任务提交体。
应当说明的是,本发明实施例的任务装置是与本发明实施例的任务提交方法对应的装置,本发明实施例的任务方法中的每个步骤与本发明实施例的任务提交装置在任务提交时的步骤是一一对应的,因此,对于重复的部分,这里不再进行赘述。
应当说明的是本发明实施例的任务提交装置为任务发送方的任务发送处理器,但不限于是任务发送方的任务发送处理器,可以是任何具有数据处理功能的芯片。
应当说明的是,本发明实施例的任务提交方法和任务提交装置不仅可以用于Apache Spark任务的提交,还可以适用于任何需要任务提交的应用场景,可将本发明实施的任务提交方法和任务提交装置集成进各种需要任务提交的项目中,本发明对任务提交方法和任务提交装置的应用场景并不进行限定。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。