一种云计算平台中的异构分布式任务处理系统及其处理方法转让专利

申请号 : CN201510425353.0

文献号 : CN105022670B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 秦勃夏海涛景辉朱勇

申请人 : 中国海洋大学

摘要 :

本发明公开了一种云计算平台中的异构分布式任务处理系统及其处理方法,所述处理系统包括任务加载器、任务调度器、任务启动器以及任务执行器;任务加载器,用于将加载的任务描述信息生成对应的任务描述对象,并保存入任务队列中;任务调度器,用于采用预定调度算法对任务队列中的任务描述对象进行调度排序,生成顺序变化的待提交任务队列;任务启动器,用于根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上;所述任务执行器,用于执行提交到spark集群上的任务描述对象。通过本发明,能够在云计算平台上实现异构分布式任务的并行批处理。

权利要求 :

1.一种云计算平台中的异构分布式任务处理系统,其特征在于,所述系统包括任务加载器、任务调度器、任务启动器以及任务执行器;

所述任务加载器,用于读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中;

所述任务调度器,用于获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列;

所述任务启动器,用于获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上;

所述任务执行器,用于执行提交到spark集群上的任务描述对象;

所述任务调度器,用于获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列具体包括:任务调度器获取所述任务队列中的任务描述对象,判断其任务类型是否为GPU,若为GPU任务,则放入GPU任务队列中,否则,将其放入CPU任务队列中;

分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序,生成待提交GPU任务队列和待提交CPU任务队列;

将生成的待提交GPU任务队列和生成的待提交CPU任务队列合并,得到所述待提交任务队列。

2.如权利要求1所述的云计算平台中的异构分布式任务处理系统,其特征在于,所述任务加载器,用于读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象具体包括:所述任务加载器读取从web前端传入的保存有任务描述信息的XML文件或者从本地描述文件中加载保存有任务描述信息的XML文件;

所述任务加载器根据所述XML文件生成对应的任务描述对象。

3.如权利要求1所述的云计算平台中的异构分布式任务处理系统,其特征在于,所述分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序具体包括:根据每一个GPU任务执行所需要的CPU核数以及执行时间估值,对GPU任务队列中的GPU任务进行调度排序;

根据每一个CPU任务执行所需要的CPU核数以及执行时间估值,对CPU任务队列中的CPU任务进行排序。

4.如权利要求3所述的云计算平台中的异构分布式任务处理系统,其特征在于,所述任务启动器还用于:当从待提交任务队列中获取的为GPU任务描述对象,则将其提交到spark集群上存在空闲GPU资源的节点上;

当从待提交任务队列中获取的为MPI任务描述对象,则根据MPI任务描述对象中的启动参数,将其提交到spark集群中存在空闲资源的对应节点上;

当从待提交任务队列中获取的为spark任务描述对象,则作为普通任务提交到spark集群中存在空闲资源的对应节点上。

5.如权利要求1所述的云计算平台中的异构分布式任务处理系统,其特征在于,所述任务执行器还用于:记录各任务描述对象在spark集群上的总执行时间。

6.一种云计算平台中的异构分布式任务处理方法,其采用如权利要求1-6任一项所述的云计算平台中的异构分布式任务处理系统,其特征在于,所述方法包括:S1、任务加载器读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中;

S2、任务调度器获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列;

S3、任务启动器获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上;

S4、任务执行器执行提交到spark集群上的任务描述对象;

其中所述步骤S2包括:

任务调度器获取所述任务队列中的任务描述对象,判断其任务类型是否为GPU,若为GPU任务,则放入GPU任务队列中,否则,将其放入CPU任务队列中;

分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序,生成待提交GPU任务队列和待提交CPU任务队列;

将生成的待提交GPU任务队列和生成的待提交CPU任务队列合并,得到所述待提交任务队列。

7.如权利要求6所述的云计算平台中的异构分布式任务处理方法,其特征在于,所述分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序具体包括:根据每一个GPU任务执行所需要的CPU核数以及执行时间估值,对GPU任务队列中的GPU任务进行调度排序;

根据每一个CPU任务执行所需要的CPU核数以及执行时间估值,对CPU任务队列中的CPU任务进行排序。

8.如权利要求7所述的云计算平台中的异构分布式任务处理方法,其特征在于,所述步骤S3进一步包括:当从待提交任务队列中获取的为GPU任务描述对象,则将其提交到spark集群上存在空闲GPU资源的节点上;

当从待提交任务队列中获取的为MPI任务描述对象,则根据MPI任务描述对象中的启动参数,将其提交到spark集群中存在空闲资源的对应节点上;

当从待提交任务队列中获取的为spark任务描述对象,则作为普通任务提交到spark集群中存在空闲资源的对应节点上。

说明书 :

一种云计算平台中的异构分布式任务处理系统及其处理方法

技术领域

[0001] 本发明涉及异构分布式技术领域,具体涉及一种云计算平台中的异构分布式任务处理系统及其处理方法。

背景技术

[0002] 近年来,在各个领域中大规模海量数据存储和处理需求的不断增加,传统企业自身IT结构的计算能力已远远不能满足计算的需要,必须通过大规模的硬件投入以扩展计算能力。而分布式并行计算系统的提出为提高海量数据的处理速度提供了可能。传统的集群使用MPI进行计算,MPI计算的数据都在内存中效率较高,但是MPI在资源不足时会空等造成计算资源浪费。而MapReduce思想的提出,又为在分布式系统上处理大规模计算任务提供了一个合理的计算模型。Apache基金会结合MapReduece实现了开源分布式计算框架Hadoop。Hadoop具有可扩展性好、部署成本低、社区开发活跃周边开源项目多等优点。但是随着Hadoop的发展,Hadoop在一些迭代处理场景上,由于读写都在HDFS上进行导致其计算效率较低的问题就暴露了出来。而AMPLab针对集群计算中的那些在并行操作之间重用工作数据集的场景开发了Spark平台。Spark平台是一种类MapReduce的分布式并行计算框架。它采用了RDD(弹性分布式数据集)作为计算中的数据集抽象。由于RDD在计算过程中的中间数据缓存在内存中,Spark在迭代运算中可直接从内存中读取上一轮迭代的结果,降低了访问延迟,因而可以获得远高于MapReduce计算速度。与此同时,除了上述的分布式计算平台之外,图形处理单元(GPU)作为一种并行计算设备与多核心架构的通用并行计算平台已经成为高性能计算的另外一种手段。用于通用平行计算的GPU平台拥有Tflops(万亿级)的浮点计算能力,在科学计算领域迅速发展,并与传统的集群计算平台开始结合起来。
[0003] 然而,针对目前多任务异构分布式并行计算,GPU和MPI并未充分利用自身计算资源,往往造成资源浪费,导致效率低下。另外,GPU和MPI各具优势,难以统一而论,独立计算势必影响任务调度和资源利用不充足。在现有资源不充足的情况下,难以达到异构任务分布式并行计算充分利用资源的目的。而当前Spark平台相比GPU和MPI可以较为充分地利用和扩展资源,但是本身又没有GPU那么快速高效的计算能力以及MPI那么通用的应用场景。

发明内容

[0004] 本发明所要解决的技术问题是提供一种云计算平台中的异构分布式任务处理系统及其处理方法,能够在云计算平台上实现异构分布式任务的并行处理。
[0005] 本发明解决上述技术问题的技术方案如下:
[0006] 一方面,本发明提供了一种云计算平台中的异构分布式任务处理系统,所述处理系统包括任务加载器、任务调度器、任务启动器以及任务执行器;
[0007] 所述任务加载器,用于读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中;
[0008] 所述任务调度器,用于获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列;
[0009] 所述任务启动器,用于获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上;
[0010] 所述任务执行器,用于执行提交到spark集群上的任务描述对象。
[0011] 另一方面,本发明提供了一种云计算平台中的异构分布式任务处理方法,所述方法包括:
[0012] S1、任务加载器读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中;
[0013] S2、任务调度器获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列;
[0014] S3、任务启动器获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上;
[0015] S4、任务执行器执行提交到spark集群上的任务描述对象。
[0016] 本发明提供的一种云计算平台中的异构分布式任务处理系统及其处理方法,首先,任务加载器加载任务描述信息并生成任务描述对象,并保存入任务队列中,然后任务调度器按照预定调度算法对任务描述对象进行调度排序,对任务队列中的任务描述对象重新排序,最后,任务启动器将排序后的任务描述对象依次加载到spark集群的对应节点上进行执行,采用调度算法对任务描述对象进行调度排序,对调度排序后的任务描述对象进行执行,任务的批处理执行效率得到了优化,提高了任务的执行效率。

附图说明

[0017] 图1为本发明实施例一的一种云计算平台中的异构分布式任务处理系统示意图;
[0018] 图2为本发明实施例二的一种云计算平台中的异构分布式任务处理方法流程图;
[0019] 图3为本发明实施例二的异构分布式任务的整个处理流程图。

具体实施方式

[0020] 以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0021] 实施例一、一种云计算平台中的异构分布式任务处理系统。下面结合图1对本实施例提供的系统进行详细说明。
[0022] 参见图1,本实施例提供的系统包括任务加载器11、任务调度器12、任务启动器13和任务执行器14。
[0023] 其中,任务加载器11,主要用于读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中。
[0024] 具体的,任务加载器11读取从web前端传入的保存有各任务描述信息的XML(Extensible Markup Language,可扩展标记语言)文件或者从本地描述文件中加载保存有各任务描述信息的XML文件。任务加载器11根据加载的XML文件将其中的任务描述信息生成对应的任务描述对象,并将生成的任务描述对象按照生成顺序保存入任务队列中。
[0025] 任务调度器12,主要用于获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列。
[0026] 具体的,任务调度器12判断任务队列是否为空,当任务队列不为空,则从任务队列中读取每一个任务描述对象,并判断读取的任务描述对象中的任务类型是否为GPU任务类型,如果为GPU任务类型,则将该任务描述对象放入GPU任务队列中;否则,则为CPU任务类型,则将此任务描述对象放入CPU任务队列。
[0027] 若任务队列为空,则表明任务类型判断结束,即已经将GPU任务放入了GPU任务队列,CPU任务放入了CPU任务队列。
[0028] 需要说明的是,任务队列中的任务描述对象包括spark任务、GPU(Graphic Processing Unit,图形处理器)任务和MPI任务,由于spark任务和MPI任务均为CPU任务,因此在判断任务类型时只需要判断任务类型为GPU任务类型还是CPU任务类型。
[0029] 当对任务队列中的任务描述对象进行了类型分类后,任务调度器12分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序,生成待提交GPU任务队列和待提交CPU任务队列,将生成的待提交GPU任务队列和生成的待提交CPU任务队列合并,得到所述待提交任务队列。
[0030] 其中,任务调度器12主要采用基于时间阶段划分的贪心算法对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务进行调度排序,具体为:根据每一个GPU任务执行所需要的CPU核数以及执行时间估值,对GPU任务队列中的GPU任务进行调度排序;同样的,根据每一个CPU任务执行所需要的CPU核数以及执行时间估值,对CPU任务队列中的CPU任务进行排序。对应时间估值越大的任务,则排在前面。
[0031] 任务启动器13,主要用于获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上。
[0032] 具体的,任务启动器13获取前述待提交任务队列中的各任务描述对象,根据各任务描述对象的类型以及在待提交任务队列中的顺序和spark集群上执行资源的使用状态,依次启动各任务描述对象,并将各任务描述对象提交到spark集群的对应节点上。具体为:当从待提交任务队列中获取的为GPU任务描述对象,则将其提交到spark集群上存在空闲GPU资源的节点上,并调用该节点上的GPU程序对GPU任务描述对象进行执行;当从待提交任务队列中获取的为MPI任务描述对象,则根据MPI任务描述对象中的启动参数,将其提交到spark集群对应的节点上,并调用该节点上的MPI程序对MPI任务描述对象进行执行;当从待提交任务队列中获取的为spark任务描述对象,则作为普通任务提交到spark集群中存在空闲资源的对应节点上,并进行执行。当待提交任务队列中的所有任务均执行完毕后,记录总的执行时间。
[0033] 实施例二、一种云计算平台中的异构分布式任务处理方法。下面结合图2和图3对本实施例提供的方法进行详细说明。
[0034] 参见图2,S1、任务加载器读取并加载预先保存的任务描述信息,将所述任务描述信息生成对应的任务描述对象,并将生成的任务描述对象保存入任务队列中。
[0035] 具体的,任务加载器读取从web前端传入的保存有各任务描述信息的XML(Extensible Markup Language,可扩展标记语言)文件或者从本地描述文件中加载保存有各任务描述信息的XML文件。任务加载器根据加载的XML文件将其中的任务描述信息生成对应的任务描述对象,并将生成的任务描述对象按照生成顺序保存入任务队列中。
[0036] S2、任务调度器获取所述任务队列中的任务描述对象,并采用预定调度算法对所述任务描述对象进行调度排序,生成顺序变化的待提交任务队列。
[0037] 具体的,任务调度器获取所述任务队列中的任务描述对象,判断其任务类型是否为GPU,若为GPU任务,则放入GPU任务队列中,否则,将其放入CPU任务队列中。分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序,生成待提交GPU任务队列和待提交CPU任务队列。将生成的待提交GPU任务队列和生成的待提交CPU任务队列合并,得到所述待提交任务队列。其中,任务调度器分别对GPU任务队列中的GPU任务和CPU任务队列中的CPU任务采用预定调度算法进行调度排序具体为:根据每一个GPU任务执行所需要的CPU核数以及执行时间估值,对GPU任务队列中的GPU任务进行调度排序;根据每一个CPU任务执行所需要的CPU核数以及执行时间估值,对CPU任务队列中的CPU任务进行排序。
[0038] S3、任务启动器获取待提交任务队列中的任务描述对象,并根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上。
[0039] 具体的,任务启动器获取前述待提交任务队列中的各任务描述对象,根据各任务描述对象的类型以及在待提交任务队列中的顺序和spark集群上执行资源的使用状态,依次启动各任务描述对象,并将各任务描述对象提交到spark集群的对应节点上。具体为:当从待提交任务队列中获取的为GPU任务描述对象,则将其提交到spark集群上存在空闲GPU资源的节点上,并调用该节点上的GPU程序对GPU任务描述对象进行执行;当从待提交任务队列中获取的为MPI任务描述对象,则根据MPI任务描述对象中的启动参数,将其提交到spark集群对应的节点上,并调用该节点上的MPI程序对MPI任务描述对象进行执行;当从待提交任务队列中获取的为spark任务描述对象,则作为普通任务提交到spark集群中存在空闲资源的对应节点上,并进行执行。当待提交任务队列中的所有任务均执行完毕后,记录总的执行时间。
[0040] 参见图3,图3为整个工作过程流程图,首先,任务加载器加载预先保存的任务描述信息,并根据任务描述信息生成对应的任务描述对象,将生成的任务描述对象存放入任务队列中;然后,任务调度器从任务队列中获取各任务描述对象,并判断各任务描述对象所属任务类型,当任务描述对象为GPU类型时,将该任务描述对象放入GPU任务队列中,否则,将任务描述对象放入CPU任务队列中。任务描述对象对GPU任务队列中的GPU任务以及对CPU任务队列中的CPU任务按照预定调度算法进行调度排序,得到顺序变化的待提交任务队列。任务启动器根据待提交队列中任务描述对象的顺序以及spark集群上执行资源的使用状态,依次启动所述任务描述对象并将其提交到spark集群上,由任务执行器对提交到spark集群上的各任务描述对象进行执行,并记录总的执行时间。
[0041] 本实施例spark平台下异构任务分布式并行计算基于spark1.0.2版本,操作系统为CentOS 6.5,Hadoop版本为2.3.0,MPI为openMPI,使用的较为稳定的操作系统和软件版本,保证了软件的兼容性和可扩展性。
[0042] 针对本实施例提供的方法进行了课题研究,比如,GPU程序实例:流场可视化,本课题采用的GPU计算实例为海洋流场可视化。海洋流场是一个二维矢量场。可视化处理采用线积分卷积算法(LIC)。使用线积分卷积算法计算流线时,会计算一个微分方程。解微分方程时,使用四阶龙格库塔算法计算。由于龙格库塔算法是一个迭代算法,需要计算量较大,因此,可以考虑使用GPU对其加速。
[0043] MPI程序实例:乘潮水位预报,本课题中采用的MPI实例是乘潮水位预报。乘潮水位预报采用FVCOM数值模型作为其计算模型。有限体积海岸海洋模型(FVCOM)是一种的海洋数值模型。它是由三角网格组成的。FVCOM模型对岸线地形的数值拟合上拥有的优势以及对数值的处理上的良好的方法使其能够在海岸地形的地带的海洋数值计算中得到了广泛应用。该模型已经使用MPI的框架实现了可以使用并行计算加速的版本,可以在共享内存或者分布式多节点的高性能集群上实现快速并行的数值模拟。
[0044] Spark程序实例:分词统计,本课题采用的Spark实例,是分词统计。这个例子是从Hadoop时代就使用的数据处理实例。需要被数据是一系列文本数据的集合,从这些文本数据中分割出大量单词,对数据的处理方式是统计分割出的所有单词出现的次数,并将所有出现的单词及其出现的次数保存下来。这个例子由于需要被处理的数据相对独立,可以被并行化处理,并且算法简单,输入的数据量可以很大,因此非常适合用来测试Spark程序。
[0045] 对于在基于spark平台的GPU、MPI并行框架下的任务调度控制,设计了三个方案,设计方案分别如下:
[0046] 方案一:
[0047] 提交3个任务:1个Spark任务,1个MPI任务,1个GPU任务。
[0048] 资源配额:1个四核四线程节点,每个节点上1块NVIDIAGTX660显卡,共有1个GPU。
[0049] 任务提交方式:使用三种不同的提交顺序手动提交,进行比较。
[0050] 方案二:
[0051] 提交25个任务:10个Spark任务,10个MPI任务,5个GPU任务。
[0052] 资源配额:2个四核四线程节点,每个节点上1块NVIDIAGTX660显卡,共有2个GPU。
[0053] 任务提交方式:
[0054] 将任务全部提交到master节点上,对application直接使用先进先出调度算法,统计全部任务执行结束时,任务运行的总时间。
[0055] 按任务经过改进的application调度算法调度后的顺序提交到master节点上,统计全部任务执行结束时,任务运行的总时间。
[0056] 方案三:
[0057] 提交50个任务:20个Spark任务,20个MPI任务,10个GPU任务。
[0058] 资源配额:2个四核四线程节点,每个节点上1块NVIDIAGTX660显卡,共有2个GPU。直接将MPI计算时所需要的数据直接存放到节点的本地磁盘中。
[0059] 任务提交方式:
[0060] 将任务全部提交到master节点上,对application直接使用先进先出调度算法,统计全部任务执行结束时,任务运行的总时间。
[0061] 按任务经过改进的application调度算法调度后的顺序提交到master节点上,统计全部任务执行结束时,任务运行的总时间。
[0062] 上述方案一的实验测试结果见如下表1:
[0063] 表1
[0064]
[0065] 上述方案二的实验测试结果见如下表2:
[0066] 表2
[0067]提交方式 任务执行耗时
a 2801s
b 2494s
[0068] 上述方案三的实验测试结果见如下表3:
[0069] 表3
[0070]提交方式 任务执行耗时
a 5573s
b 4735s
[0071] 从方案一测试的结果来看,不同的任务提交顺序对任务执行的总时间是有影响。从不同提交顺序产生的差异上来看,执行速度最快的提交顺序比最慢的快了19.4%,因而,一个合理的执行顺序对于提高任务执行效率是有重要意义的。而从方案二的测试结果来看,使用我们的调度算法执行效率提升了约11.0%。随后我们又进行了50个任务的测试工作,结果执行效率提升了约15.0%。因而,从调度算法的执行结果上来看,提出的基于时间划分的贪心调度算法具有较好的效果。
[0072] 本发明提供的一种云计算平台中的异构分布式任务处理系统及其处理方法,首先,任务加载器加载任务描述信息并生成任务描述对象,并保存入任务队列中,然后任务调度器按照预定调度算法对任务描述对象进行调度排序,对任务队列中的任务描述对象重新排序,最后,任务启动器将排序后的任务描述对象依次加载到spark集群的对应节点上进行执行,采用调度算法对任务描述对象进行调度排序,对调度排序后的任务描述对象进行执行,任务的批处理执行效率得到了优化,提高了任务的执行效率;另外,在spark平台中嵌入了GPU程序和MPI程序,实现了异构分布式任务的处理,并且引入了GPU程序,GPU程序的执行效率远高于CPU的执行效率,因此,在spark平台中嵌入GPU程序,整个任务队列中的所有任务执行的效率会得到优化和提高。
[0073] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。