CN105117286B - MapReduce中任务的调度方法和流水化执行方法 - Google Patents

MapReduce中任务的调度方法和流水化执行方法 Download PDF

Info

Publication number
CN105117286B
CN105117286B CN201510607579.2A CN201510607579A CN105117286B CN 105117286 B CN105117286 B CN 105117286B CN 201510607579 A CN201510607579 A CN 201510607579A CN 105117286 B CN105117286 B CN 105117286B
Authority
CN
China
Prior art keywords
task
map
reduce
time
tasks
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.)
Expired - Fee Related
Application number
CN201510607579.2A
Other languages
English (en)
Other versions
CN105117286A (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.)
Peking University
Original Assignee
Peking University
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 Peking University filed Critical Peking University
Priority to CN201510607579.2A priority Critical patent/CN105117286B/zh
Publication of CN105117286A publication Critical patent/CN105117286A/zh
Application granted granted Critical
Publication of CN105117286B publication Critical patent/CN105117286B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明公布一种MapReduce系统中的任务调度方法和流水化执行方法,将有依赖关系的任务根据依赖关系和优先程度进行任务调度,使得有依赖关系的任务之间的执行重叠最大化:任务之间的依赖关系用DAG关系图表示,根据关键路径算法获得关键任务,通过流水化任务执行方法执行当前任务运行队列中的任务:执行上游map任务;进入上游reduce阶段;当输出第一个block时启动下游map阶段,分发一个map任务,同时设置下游任务map数量为最大数值;上游任务完成时设置下游任务map数量为正确数值;下游任务继续执行map任务和reduce阶段至执行完成。本发明方法可提高系统的资源利用率和程序的执行效率,提升系统运行性能。

Description

MapReduce中任务的调度方法和流水化执行方法
技术领域
本发明属于计算机软件应用技术领域,涉及分布式计算框架MapReduce系统中的任务执行和调度,尤其涉及一种MapReduce系统中的有依赖关系的任务之间的任务调度方法和流水化执行方法。
背景技术
云计算是当前工业界和学术界关注的热点,它改变了传统上由用户提供和维护计算资源的模式,改由云计算厂商集中化管理计算资源,用户可以根据不同的应用场景,按需获取相应的资源。如何利用资源集中化带来的并行性、容错性等特性,高效的提供云计算服务,成为了云计算模式最重要的研究问题之一。
MapReduce分布式计算框架是Google公司提出的软件架构,借鉴了函数式编程的思想,高效地进行大规模数据集的分布式计算。MapReduce框架以其优异的容错性、计算的高效性和使用的便捷性,迅速成为云计算环境下应用最广泛的分布式计算架构。尤其是2005年Apache Software Foundation引入基于MapReduce框架开发的Hadoop开源系统以来,MapReduce架构得到了更大的发展,利用MapReduce思想构建的分布式计算系统已经被Google、微软、Facebook、Yahoo!以及国内的腾讯、百度、阿里云等软件公司和互联网公司在各自的私有云集群中深度采用,并且也成为了当前部署云计算集群进行分布式计算的首选软件架构,在科学计算、人工智能、数据挖掘、信息处理等各个领域都得到了广泛的应用。
一个典型的MapReduce系统中有一个Master节点和多个Worker节点。Master节点负责接收用户提交的任务,向Worker节点分发执行任务,并且管理所有的Worker节点。Worker节点是负责执行由Master下发的map和reduce任务。
MapReduce共分为三个阶段,分别为Map阶段、Shuffle阶段和Reduce阶段,其中,Map阶段是负责将所有的输入数据(键值对的形式)通过用户的map函数转化为中间结果(也是键值对的形式),这个过程是分布式进行的,由Master下发Map任务,Worker节点负责执行具体的Map任务。Shuffle阶段是在Map和Reduce中间的一个过程,因为reduce的处理的数据是按照键值分区的,所以需要shuffle阶段对map产生的中间结果的数据按照键值进行排序。每一个reduce都知道自己要处理的键值的区间,所以每一个reduce任务都会去每一个map任务处拉取属于自己键值区间的数据,这样每个reduce任务就会有对应map任务数量那么多的小的分区数据,然后全部拉取到reduce任务本地后,再将它们进行合并。这个拉取数据和合并数据的过程就是shuffle过程。Reduce阶段就是将map产生的中间结果(键值对)转化为最终的输出数据(键值对)。具体的转化方法是根据用户写的reduce函数。Reduce任务也是由Master下发的,由Worker节点进行分布式执行的。
一个具体的任务执行过程如下:
(一)用户上传数据到分布式文件系统中(一般是GFS,开源实现为HDFS),并且向MapReduce系统提交一个Job。
(二)MapReduce的Client将输入数据划分成多个分片(split,每个split默认是64M大小),并生成分片的信息(包括存储位置,开始位置,以及split的真实大小),然后把任务和分片信息提交给Master节点。
(三)Master节点根据分片信息,产生多个Map任务,并将这些Map任务调度到不同的节点并行执行。
(四)每个Map任务会根据用户定义的map和combine函数将输入的key-value对转换为中间结果的key-value对;然后根据用户定义的分区函数,将中间结果按照key划分成不同的分区。并将这些分区内容存放到本地磁盘上。
(五)当Map任务完成一定比例之后,Master节点会开始分发Reduce任务。
(六)每一个Reduce任务从每一个Map任务处拷贝自己的分区数据,当所有的Map任务都完成之后,Reduce任务用多路归并方法根据中间数据的key将多个Map取来的数据合并成一个输入数据流,然后根据用户定义的reduce函数,将中间结果表示的key-value类型转换成最终的key-value表示,最后将数据输出到用户指定的分布式文件系统的目录中。
在上述的任务执行过程中,Master没有指定任务的执行计划,没有任务调度,而只是简单的按照用户提交的顺序将任务依次执行,而任务提交的顺序是由用户来决定的。另外,在MapReduce中,任务在开始执行之前,其所需要的数据必须是准备好任务才可以执行。这是因为任务执行之前必须知道输入数据的split信息。当遇到了有依赖关系的一系列任务的时候(比如迭代式的机器学习库、复杂的分布式数据库查询系统hive或pig等),任务的执行就只能是:一个任务在执行之前就要等待与该任务有依赖关系的所有的其他任务都已经执行完毕,该任务才可以执行。因此,针对多任务的应用,现有任务执行过程不能进行任务调度,也无法提供流水化(pipeline)的任务执行优化,难以最大化有依赖的任务之间的执行重叠。
发明内容
为了克服上述现有技术的不足,本发明提供一种MapReduce系统中的有依赖关系的任务之间的任务调度方法和流水化执行方法,将有依赖关系的任务根据依赖关系和优先程度进行任务调度,使得有依赖关系的任务之间的执行重叠最大化,提供流水化(pipeline)的任务执行优化。
本发明的原理是:MapReduce框架中的任务依赖关系包括:第一种依赖关系是任务B的输入数据是任务A的输出数据;第二种是任务B在Map阶段或者Reduce阶段需要在代码中直接对A的输出文件进行读取,本文定义第二种依赖关系为硬依赖关系。MapReduce框架本身不维护任务之间的依赖关系,所以在所有的有依赖关系的任务之间,需要通过输出文件来进行同步。本发明提供的任务调度方法采用DAG关系图(Directed acyclic graph,有向无环图)表示任务之间的依赖关系;MapReduce框架中的Master根据任务时间预测方法预测得到任务的执行时间;再根据DAG图和关键路径算法,获得关键路径和关键任务;根据优先程度找到一个任务添加到当前任务运行队列中,并更新该组任务的DAG关系图。为提供依赖任务的流水化执行过程,需要了解一个任务在执行完毕之前的输出数据在哪里和以哪种形式存在、决定该任务应该将输出数据流水给下游的哪个任务,并使得下游的任务在一个不断增长的数据上进行执行过程,而保证下游任务执行的正确性并提供容错性。MapReduce框架为了支持失败任务的回滚,会将输出数据输出到HDFS的一个临时文件夹内,当所有的任务都已经执行成功,再将这个临时文件夹移动到最终的输出位置。而且,一旦有一个block产生,系统就会将其刷新到HDFS中。因此,只要是有一个输出的block产生,就可以马上看到,由此获得一个任务在执行完毕之前的输出数据在哪里和以哪种形式存在的信息。然后,根据任务之间的第一种依赖关系,给所有的任务建立一个DAG图,如果两个任务之间有依赖关系,就会有一条边;因此,我们只需要在DAG图中找到当前任务的下游任务,将数据流水给下游任务即可。之后,为使得下游的任务在一个不断增长的数据上进行执行,当该下游任务还不在可以执行的队列中(也就是它还存在依赖的任务还没有执行完),则初始化它的map任务的数量为最大的整数值;因此reduce任务就会一直等待在shuffle阶段;当检测到上游任务有一个新的block产生的时候,就会通知所有的下游任务,下游任务会产生新的map任务进行执行;与MapReduce框架本身相比,本发明提供方法可以在运行过程中动态的添加分片信息;针对第一种依赖关系,下游任务对应的上游任务只要是进入了reduce阶段,并且产生了至少一个block的输出时,就可以将该下游任务加入到可执行队列中进行执行了。若为硬依赖关系,则跟原来需要等待所有的任务执行完毕才可以执行下游相同,只能按照系统原来的方式,等待其所有的上游任务执行完毕才开始执行该任务;当该下游任务的所有上游任务都执行完毕之后,就可以修改该任务的map的数量为正确的数量,继续reduce阶段。
本发明提供的技术方案是:
一种MapReduce系统中的任务调度方法,将有依赖关系的任务根据依赖关系和优先程度进行任务调度,使得有依赖关系的任务之间的执行重叠最大化,具体包括如下步骤:
1)用户提交一组任务到MapReduce框架系统中;设定当前任务运行队列为空;
2)Master更新得到该组任务的DAG关系图;DAG关系图表示该组任务之间的依赖关系;
3)Master根据任务时间预测方法预测得到任务的执行时间;
4)当当前任务运行队列为空时,若DAG图中不为空,根据DAG图和关键路径算法,获得关键路径和关键任务;根据优先程度找到一个或多个任务添加到当前任务运行队列中,并更新该组任务的DAG关系图(从DAG图中将添加到当前任务运行队列的这些任务删除),转入执行步骤5);若DAG图中为空,则系统执行完毕;
5)执行当前任务运行队列中的一个任务,更新当前任务运行队列(从当前任务运行队列的队首取一个任务执行,并将该任务从当前任务运行队列中删掉);转入步骤4)。
针对上述MapReduce系统中的任务调度方法,其中,步骤2)中的任务之间的依赖关系为第一种依赖关系。
任务之间的依赖关系包括两种,第一种依赖关系是任务B的输入数据是任务A的输出数据;第二种是任务B在Map阶段或者Reduce阶段需要在代码中直接对A的输出文件进行读取,即硬依赖关系。针对第一种依赖关系,本发明将任务以及任务之间的依赖关系抽象为DAG图表示。比如,设有n个任务需要调度,第i个任务有Mi个Map任务,Ri个Reduce任务。每个map的平均执行时间是Ti M,每个reduce任务的平均执行时间是Ti R。我们定义:DAG G=<V,E>,DAG中的每个节点V都代表一个任务,每一条有向边E代表一个依赖关系。根据DAG图,如果两个任务之间有一个依赖关系,就会有一条边。因此,针对任务之间的第一种依赖关系,可在DAG图中找到当前任务的下游任务。而对于硬依赖关系,可以在map中读取HDFS信息的代码,通过检查配置文件(由于在配置文件中写明要读的数据并将其放在分布式缓存中),就可以检测到硬依赖关系。
针对上述MapReduce系统中的任务调度方法,其中,步骤3)中的任务时间预测方法具体是通过局部权重线性回归方法(LWLR,locally weighted linear regression)来预测在给定任务输入数据大小的情况下的任务执行时间。局部权重线性回归方法通过式1计算历史任务的权重:
式1中,wi为任务的权重值,表示任务xi在预测任务x执行时间的时候占的比重;d(x,xi)表示任务x与xi之间输入数据大小之差;rank(d(x,xi))表示任务xi与任务x之间输入数据大小之差的排名,距离越大排名越大;time(x,xi)表示执行任务xi的时刻与执行任务x的时刻之间的时间差;q为常数,表示最近的q次数据,即只考虑与当前任务x距离最近的q个任务。所以用该公式衡量权重时,距离当前时间越近的事件权重越大,输入数据距离与当前数据差别越小的事件权重越大。
通过局部权重线性回归方法(LWLR)来预测在给定任务输入数据的大小的情况下的任务执行时间的,现有文献(Cleveland W S,Devlin S J.Locally weightedregression:an approach to regression analysis by local fitting.Journal of theAmerican Statistical Association,1988,83(403):596-610)记载该方法具体通过式2计算得到预测时间结果:
Tj=J*Inver(X*(W*Trans(X)))*(Y*(W*Trans(Y))) (式2)
式2中,Tj是当前要预测的任务j的预测时间结果;J是当前要预测的任务j的输入数据量;Inver函数是求一个矩阵的逆矩阵;X是任务J的历史数据的大小,是一个行向量;Y是对于X任务的执行时间,也是一个行向量;W是每个历史任务对应的权重,是一个对角矩阵,由上述式1计算得到;Trans函数是一个将矩阵转置的函数。通过该公式,即可得出当前要执行的任务j的预测时间Tj。
对于那些还没有历史执行记录的任务,可以用其他所有任务的平均值来表示该任务的执行时间。
针对上述MapReduce系统中的任务调度方法,其中,步骤4)中的关键路径算法包括如下步骤:
41)根据DAG图中的依赖关系,通过式3计算每个任务的最早开始时间:
b(i)=max{b(j)+max{Tjob reduce(j),Tjob map(i)}},<j,i>∈E (式3)
式3中,b(i)表示任务i的最早开始时间;起始任务s的最早开始时间是b(s)=0;Tjob reduce(j)表示任务j的reduce阶段的执行时间;Tjob map(i)表示任务i的map阶段的执行时间;Tjob reduce(j)和Tjob map(i)均通过步骤3)中的任务时间预测方法得到;<j,i>∈E表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j。式3的含义是:一个任务要开始,那么其所有依赖的任务都要完成,所以取所有的依赖的任务最早开始执行时间的最大值。由于提供了依赖任务之间的流水执行,所以需要在上游任务的reduce时间和下游任务的map时间之间取一个最大值。
42)然后再根据上述计算得到的每个任务的最早开始时间,通过式4计算每个任务的最晚结束时间:
e(i)=min{e(j)-Tjob_reduce(j)-max{0,Tjob_map(j)-Tjob_reduce(i)}},<i,j>∈E (式4)
式4中,e(i)表示任务i的最晚结束时间;起始条件是终止任务t的最晚结束时间e(t)=b(t);Tjob_reduce(i)和Tjob_reduce(j)分别表示任务i和j的reduce阶段的执行时间;Tjob_map(j)表示任务j的map阶段的执行时间;<j,i>∈E表示边<j,i>表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j。式4的含义是:在保证该任务所有下游任务能按时完成的前提下,尽量的晚一些开始当前的任务,所以是取所有的下游任务的最晚结束时间的最早的那个时间。
43)定义所有满足b(i)+Tjob_reduce(i)=e(i)条件的任务为关键任务;
因为这些关键任务的执行会影响到整个大的任务的执行时间。所以我们要在调度的时候给这些任务更高的优先级,优先执行关键任务。
针对上述MapReduce系统中的任务调度方法,其中,步骤4)中根据优先程度找到一个任务添加到当前任务运行队列中,具体是:首先,根据DAG图中的信息,可以找到一些当前可以执行的任务,这些任务是没有上游任务的任务);然后,在这些任务中找到一个或者几个优先级最高的任务,加入到当前执行队列中;其中,在关键路径上的任务的优先级比不在关键路径上的任务的优先级要高。
针对上述MapReduce系统中的任务调度方法,步骤5)中执行当前任务运行队列中的任务,本发明提供一种MapReduce系统中的流水化任务执行(pipeline)方法,当下游任务依赖于上游任务时,任务流水化执行方法依次包括如下步骤:
51)系统正常执行上游任务的map任务;
52)上游任务的map任务执行完毕,上游任务进入reduce阶段;
53)当上游任务的reduce输出第一个block时,启动下游任务的map阶段,并且分发一个对应该block的map任务;同时,设置下游任务的map数量是最大的整数数值;
MapReduce框架为了支持失败任务的回滚,会将输出数据输出到HDFS的一个临时文件夹内,当所有的任务都已经执行成功,再将这个临时文件夹移动到最终的输出位置。而且,一旦有一个block产生,系统就会将其刷新到HDFS中。因此,只要是有一个输出的block产生,我们就可以马上看到。
54)然后接下来,每当上游任务有一个block产生的时候,就启动下游任务的一个map任务;直到上游任务的reduce阶段完全完成,这时候设置下游任务的map数量设置为正确的数值;
55)然后下游任务继续执行map阶段,直到下游任务所有map任务都结束之后,启动下游任务的reduce阶段;
56)下游任务的reduce阶段完成,下游任务即执行完成。
针对上述MapReduce系统中的流水化任务执行(pipeline)方法,在下游任务执行过程中,为了保证map的正确性,我们只需要保证任何一个block都被处理并且只处理了一次;具体方法是:在上述步骤54)中,我们设定一个当前处理的指针,每当有一个新的block产生的时候,我们就讲该指针向前移动一个block并且添加一个下游的map任务,该指针永远都不会往回走,所以可以保证任何一个block只被处理一次。又因为该指针每次只走一个block的长度,所以我们可以保证所有的block都被处理过了。另一方面,因为我们在下游任务的上游任务还没有执行完毕之前设定了map任务的数量是整数的最大值,所以所有的下游任务都会等待在shuffle阶段,只有当所有上游任务都执行完毕之后,才会将map任务的数量修改为正确的数值,这时候才会进行shuffle和reduce阶段。所以reduce任务可以保证正确性。MapReduce框架中,在下游的map任务执行的时候,其输入文件改为了其上游任务的临时输出文件夹,所以如果上游任务已经完成,将临时文件移动到了最终的输出文件夹,那么这时候下游任务如果因为失败或者是缓慢而重启或者备份任务的话,就找不到原来的输入文件了。所以我们为了处理这个问题,给MapReduce框架添加了硬链接特性。将上游任务的临时输出文件夹和真正的输出文件夹作为同一个硬链接,当上游任务执行完毕之后,只是将真正的输出文件夹指向了该文件。当下游任务都执行完毕之后,再将临时文件的硬链接删掉。这样就可以保证下有任务的容错性了。
与现有技术相比,本发明的有益效果是:
MapReduce系统现有的任务执行过程中,Master没有指定任务的执行计划,没有任务调度,而只是简单的按照用户提交的顺序将任务依次执行,而任务提交的顺序是由用户来决定的。另外,在MapReduce中,任务在开始执行之前,其所需要的数据必须是准备好任务才可以执行。当遇到了有依赖关系的一系列任务的时候,任务的执行就只能是:一个任务在执行之前就要等待与该任务有依赖关系的所有的其他任务都已经执行完毕,该任务才可以执行。因此,针对多任务的应用,现有任务执行过程不能进行任务调度,也无法提供流水化(pipeline)的任务执行优化,难以最大化有依赖的任务之间的执行重叠。本发明提供一种MapReduce系统中的有依赖关系的任务之间的任务调度方法和流水化执行方法,将MapReduce框架中具有依赖关系的任务,通过DAG图和关键路径算法找到关键任务添加到当前任务运行队列,给这些任务更高的优先级。依赖任务的流水化执行过程,具体在DAG图中找到当前任务的下游任务,将数据流水给下游任务。本发明提供的根据多任务依赖DAG图的关键路径算法,可对多任务的应用进行更加有效的调度,使得关键任务能够以更高的优先级优先执行,从而提高系统的执行效率;此外,可将有依赖关系的任务进行流水执行,使得上游任务的reduce阶段和下游任务的map阶段可以并行执行,从而提高系统的资源利用率和程序的执行效率。因此,本发明提供方法可针对多任务的应用,最大化有依赖的任务之间的执行重叠,并提供流水化(pipeline)的任务执行优化,从而提升系统运行性能。
附图说明
图1是本发明实施例提供的任务调度方法的流程框图。
图2是本发明实施例中根据任务依赖关系生成的DAG图。
图3是本发明实施例提供的任务流水化执行方法的流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本实施例采用Hadoop1.0.0中的MapReduce框架,Hadoop1.0.0系统默认是没有任务调度方法的。本发明中,MapReduce框架中的任务依赖关系包括两种,第一种依赖关系是任务B的输入数据是任务A的输出数据;第二种是任务B在Map阶段或者Reduce阶段需要在代码中直接对A的输出文件进行读取,即硬依赖关系。由于MapReduce框架本身不维护任务之间的依赖关系,所以,在所有的有依赖关系的任务之间需要通过输出文件来进行同步。
本发明提供MapReduce系统中的有依赖关系的任务之间的任务调度方法,通过任务调度方法找到关键任务,因为这些任务的执行会影响到整个大的任务的执行时间,所以我们要在调度的时候给这些关键任务更高的优先级,优先执行关键任务。
利用本发明提供的任务调度方法实现的调度器具体执行如下步骤:
1)用户提交一组任务到MapReduce框架系统中;
2)Master更新任务的DAG关系图;
我们将任务以及任务之间的依赖关系抽象为DAG图表示。比如,设有n个任务需要调度,第i个任务有Mi个Map任务,Ri个Reduce任务。每个map的平均执行时间是Ti M,每个reduce任务的平均执行时间是Ti R。我们定义:DAG G=<V,E>,DAG中的每个节点V都代表一个任务,每一条有向边E代表一个依赖关系。
根据任务之间的第一种依赖关系,通过任务之间的依赖关系,给所有的任务建立一个DAG图,如果两个任务之间有一个依赖关系,就会有一条边。因此,针对任务之间的第一种依赖关系,在DAG图中,如果两个任务之间有依赖关系,就会有一条边,可在DAG图中找到当前任务的下游任务,执行过程中,将数据流水给下游任务即可;对于硬依赖关系,可以在map中读取HDFS信息的代码,通过检查配置文件(由于在配置文件中写明要读的数据并将其放在分布式缓存中),就可以检测到硬依赖关系。
本实施例中,根据任务依赖关系生成的DAG图如图2所示,其中,S表示起点任务;T表示终点任务。
3)Master根据任务时间预测方法预测得到任务的执行时间;
一个任务的执行时间跟任务本身的算法复杂度有关、跟输入输出数据的大小有关,跟数据的倾斜程度也有关。但是这三个因素在系统动态运行时进行获取都比较难。而我们分析一下就会发现,很多应用都是迭代式的或者是经常重复执行的,所以我们可以利用应用的名称来识别某个应用,然后根据该应用的历史执行信息来预测当前该应用在当前的输入数据的情况下的执行时间。
因为任务的算法复杂度不一定是线性的,所以我们预测任务执行时间的方法具体是:针对有历史执行记录的任务,采用局部权重线性回归算法(LWLR,locally weightedlinear regression)来预测在给定输入数据的大小的情况下,预测程序执行时间。与线性回归算法不同的是,LWLR使用最近的q次数据,而不是使用所有的历史数据;另外,距离当前时间越近的数据的权重越大,距离当前权重越远就越小。所以该算法可以更好的预测程序执行时间。局部权重线性回归(LWLR,locally weighted linear regression)算法为式1:
式1中,wi为任务的权重值,表示任务xi在预测任务x执行时间的时候占的比重;d(x,xi)表示任务x与xi之间输入数据大小之差;rank(d(x,xi))表示任务xi与任务x之间输入数据大小之差的排名,距离越大排名越大;time(x,xi)表示执行任务xi的时刻与执行任务x的时刻之间的时间差;q为常数,表示最近的q次数据,即只考虑与当前任务x距离最近的q个任务。所以用该公式衡量权重时,距离当前时间越近的事件权重越大,输入数据距离与当前数据差别越小的事件权重越大。
对于那些还没有历史执行记录的任务,可以用其他所有任务的平均值来表示该任务的执行时间。
4)当系统中有空闲资源,并且DAG图中不为空且当前任务运行队列为空时,调度器就根据DAG图和关键路径算法,获得关键路径和关键任务,并找到一个任务添加到当前任务运行队列中;
关键路径算法中,任务调度可以看做是一个DAG图中的拓扑排序问题,我们把所有没有依赖上游任务的任务添加一个执行时间为0的起点任务;把所有没有下游任务的任务都添加一下执行时间为0的终点任务。本实施例中,根据任务依赖关系生成的DAG图如图2所示,其中,S表示起点任务;T表示终点任务。
然后根据DAG图中的依赖关系,通过式3计算每个任务的最早开始时间:
b(i)=max{b(j)+max{Tjob reduce(j),Tjob map(i)}},<j,i>∈E (式3)
式3中,b(i)表示任务i的最早开始时间;Tjob reduce(j)表示任务j的reduce阶段的执行时间;Tjob map(i)表示任务i的map阶段的执行时间;<j,i>∈E表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j。式3的含义就是:一个任务要开始,那么其所有依赖的任务都要完成,所以取所有的依赖的任务的最大值。由于提供了依赖任务之间的流水执行,所以需要在上游任务的reduce时间和下游任务的map时间之间取一个最大值。起始条件是b(s)=0
然后再根据上述计算得到的每个任务的最早开始时间,计算每个任务的最晚结束时间:
e(i)=min{e(j)-Tjob reduce(j)-max{0,Tjob map(j)-Tjob reduce(i)}},<i,j>∈E (式4)
式4中,e(i)表示任务i的最晚结束时间;Tjob_reduce(j)表示任务j的reduce阶段的执行时间;Tjob_map(j)表示任务j的map阶段的执行时间;<j,i>∈E表示边<j,i>表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j。式4的含义是:在保证该任务所有下游任务能按时完成的前提下,尽量的晚一些开始当前的任务,所以是取所有的下游任务的最晚结束时间的最早的那个时间。起始条件是e(t)=b(t)。
然后,我们定义所有满足b(i)+Tjob_reduce(i)=e(i)条件的任务为关键任务,因为这些任务的执行会影响到整个大的任务的执行时间。所以我们要在调度的时候给这些任务更高的优先级,优先执行关键任务。
在具体实施时,首先在DAG中找到一些可以执行的任务(那些没有上游任务的任务);然后在这些可以执行的任务中,找到一个最高优先级的任务,关键任务具有更高的优先级。如果有多个最高优先级的任务,则任选一个任务执行,即将该任务添加到当前任务运行队列中。
本实施例中,有八个任务的一组任务,根据任务依赖关系生成的DAG图如图2所示,其中,S表示起点任务;T表示终点任务。每个任务的预测的map时间和reduce时间;以及根据关键路径算出来的每个任务的最早开始时间和最晚结束时间如表1:
表1 每个任务预测的map时间Tjob_map、reduce时间Tjob_reduce、最早开始时间b(i)和最晚结束时间e(i)
项目\任务 S 1 2 3 4 5 6 7 8 T
Tjob_map 0 1 1 1 1 1 2 2 4 0
Tjob reduce 0 1 1 2 3 6 1 5 1 0
b(i) 0 1 1 1 2 3 5 5 9 10
e(i) 0 2 3 3 5 9 10 10 10 10
表1中,满足b(i)+Tjob_reduce(i)=e(i)的任务就是关键任务,所以可以看出,关键任务有1、3、4、5、7、8;关键路径有两条。调度的时候优先调度这些任务。具体可以设定只有两种优先级,关键任务的可优先级较高,非关键任务的优先级较低,从而实现优先调度关键任务。
5)当DAG图中为空,且当前任务运行队列为空时,系统执行完毕。
上述任务调度算法可能会产生饥饿问题:因为新的任务会不断的添加到系统中,先前的任务如果一直不在关键的路径上的话,就会一直得不到调度。为了解决这个问题,可允许用户定义任务的优先级。调度的时候,先找出所有的最高优先级的任务作为候选,然后用关键路径算法找出一个进行执行。如果一个任务提交后长时间得不到执行,那么用户可以自己提高该任务的优先级,这样就可以解决饥饿问题了。
本发明还提供MapReduce系统中的流水化任务执行(pipeline)方法,当下游任务依赖于上游任务时,任务流水化执行方法依次包括如下步骤:
本实施例中,用户提交一组有依赖关系的任务,比如实施例中包括了任务一、任务二两个任务,任务二的输入就是任务一的输出,也就是任务二依赖于任务一;通过任务调度方法,确定任务一为上游任务,任务二为下游任务;
51)系统正常执行任务一的map任务;
52)任务一的map任务执行完毕,任务一进入reduce阶段;
53)当任务一的reduce输出第一个block时,启动任务二的map阶段,并且分发一个对应该block的map任务;同时,设置任务二的map数量是最大的整数数值;
MapReduce框架为了支持失败任务的回滚,会将输出数据输出到HDFS的一个临时文件夹内,当所有的任务都已经执行成功,再将这个临时文件夹移动到最终的输出位置。而且,一旦有一个block产生,系统就会将其刷新到HDFS中。因此,只要是有一个输出的block产生,我们就可以马上看到。
54)然后接下来,每当任务一有一个block产生的时候,就启动任务二的一个map任务;直到任务一的reduce阶段完全完成,这时候设置任务二的map数量设置为正确的数值;
55)然后任务二继续执行map阶段,直到任务二所有map任务都结束之后,启动任务二的reduce阶段;
56)任务二的reduce阶段完成。
流水化任务执行方法需要任务调度程序的调度,才能真正实现流水。因为Hadoop1.0.0系统默认的是没有调度方法的,所以只能按照用户提交任务的顺序,依次执行。而本发明提供了系统的调度算法,所以可以使得真正需要流水的任务可以流水执行。如果只是有任务调度算法而没有任务流水化执行,系统可以正常运行,但性能提升效果不如任务调度加上流水化执行。
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (5)

1.一种MapReduce系统中的任务调度方法,所述任务调度方法将有依赖关系的任务根据依赖关系和优先程度进行任务调度,使得有依赖关系的任务之间的执行重叠最大化,具体包括如下步骤:
1)用户提交一组任务到MapReduce框架系统中,设定当前任务运行队列为空;
2)该组任务之间的依赖关系用DAG关系图表示;MapReduce的Master节点更新得到该组任务的DAG关系图;
3)Master节点根据任务时间预测方法预测得到该组任务中每一个任务的执行时间;
4)当当前任务运行队列为空时,若DAG关系图中也为空,则系统执行完毕,结束操作;若DAG关系图中不为空,则根据DAG关系图和关键路径算法获得关键路径和关键任务,根据优先程度从DAG关系图中找到一个或多个任务添加到当前任务运行队列中,并从DAG关系图中将所述一个或多个任务删除,转入执行步骤5);
所述关键路径算法包括如下步骤:
41)根据DAG关系图中的依赖关系,通过式3计算每个任务的最早开始时间:
b(i)=max{b(j)+max{Tjob reduce(j),Tjob map(i)}},<j,i>∈E (式3)
式3中,b(i)表示任务i的最早开始时间;起始任务s的最早开始时间是b(s)=0;Tjobreduce(j)表示任务j的reduce阶段的执行时间;Tjob map(i)表示任务i的map阶段的执行时间;Tjob reduce(j)和Tjob map(i)均通过步骤3)所述任务时间预测方法得到;<j,i>∈E表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j;
42)再根据步骤41)计算得到的每个任务的最早开始时间,通过式4计算每个任务的最晚结束时间:
e(i)=min{e(j)-Tjob_reduce(j)-max{0,Tjob_map(j)-Tjob_reduce(i)}},<i,j>∈E (式4)
式4中,e(i)表示任务i的最晚结束时间;起始条件是终止任务t的最晚结束时间e(t)=b(t);Tjob_reduce(i)和Tjob_reduce(j)分别表示任务i和j的reduce阶段的执行时间;Tjob_map(j)表示任务j的map阶段的执行时间;<j,i>∈E表示边<j,i>表示边<j,i>存在在边的集合E中,也就是任务i依赖于任务j;
43)获得所有满足b(i)+Tjob_reduce(i)=e(i)的任务,作为关键任务;所述关键任务的优先程度比非关键任务的优先度高;
5)执行当前任务运行队列的队首任务,并将该任务从当前任务运行队列中删掉,再转入步骤4)。
2.如权利要求1所述MapReduce系统中的任务调度方法,其特征是,步骤2)中的任务之间的依赖关系为第一种依赖关系。
3.如权利要求1所述MapReduce系统中的任务调度方法,其特征是,步骤3)所述任务时间预测方法采用局部权重线性回归方法,具体通过式2计算得到预测任务执行的时间:
Tj=J*Inver(X*(W*Trans(X)))*(Y*(W*Trans(Y))) (式2)
式2中,Tj是当前要预测的任务j的预测时间结果;J是当前要预测的任务j的输入数据量;Inver函数是求一个矩阵的逆矩阵;X是任务J的历史数据的大小,是一个行向量;Y是对于X任务的执行时间,也是一个行向量;W是每个历史任务对应的权重,是一个对角矩阵;Trans函数是一个将矩阵转置的函数。
4.如权利要求3所述MapReduce系统中的任务调度方法,其特征是,所述式2中每个历史任务对应的权重W通过式1计算得到:
式1中,wi为任务的权重值,表示任务xi在预测任务x执行时间的时候占的比重;d(x,xi)表示任务x与xi之间输入数据大小之差;rank(d(x,xi))表示任务xi与任务x之间输入数据大小之差的排名,距离越大排名越大;time(x,xi)表示执行任务xi的时刻与执行任务x的时刻之间的时间差;q为常数,表示最近的q次数据,即与当前任务x距离最近的q个任务。
5.如权利要求1所述MapReduce系统中的任务调度方法,其特征是,步骤5)通过流水化任务执行方法执行当前任务运行队列中的任务,当下游任务依赖于上游任务时,所述流水化任务执行方法依次包括如下步骤:
51)系统正常执行上游任务的map任务;
52)上游任务的map任务执行完毕,上游任务进入reduce阶段;
53)当上游任务的reduce输出第一个block时,启动下游任务的map阶段,并且分发一个对应该block的map任务,同时设置下游任务的map数量是最大的整数数值;
54)每当上游任务有一个block产生的时候,就启动下游任务的一个map任务;直到上游任务的reduce阶段完全完成,这时候设置下游任务的map数量设置为正确的数值;
55)下游任务继续执行map任务,直到下游任务结束map阶段;之后启动下游任务的reduce阶段;
56)下游任务的reduce阶段完成,下游任务即执行完成。
CN201510607579.2A 2015-09-22 2015-09-22 MapReduce中任务的调度方法和流水化执行方法 Expired - Fee Related CN105117286B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510607579.2A CN105117286B (zh) 2015-09-22 2015-09-22 MapReduce中任务的调度方法和流水化执行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510607579.2A CN105117286B (zh) 2015-09-22 2015-09-22 MapReduce中任务的调度方法和流水化执行方法

Publications (2)

Publication Number Publication Date
CN105117286A CN105117286A (zh) 2015-12-02
CN105117286B true CN105117286B (zh) 2018-06-12

Family

ID=54665287

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510607579.2A Expired - Fee Related CN105117286B (zh) 2015-09-22 2015-09-22 MapReduce中任务的调度方法和流水化执行方法

Country Status (1)

Country Link
CN (1) CN105117286B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659069B (zh) * 2018-06-28 2022-08-19 赛灵思公司 用于执行神经网络计算的指令调度方法及相应计算系统

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105808334B (zh) * 2016-03-04 2016-12-28 山东大学 一种基于资源重用的MapReduce短作业优化系统及方法
CN105956049A (zh) * 2016-04-26 2016-09-21 乐视控股(北京)有限公司 数据输出控制方法及装置
CN108427602B (zh) * 2017-02-14 2021-10-29 全球能源互联网研究院有限公司 一种分布式计算任务的协同调度方法及装置
CN107133332B (zh) * 2017-05-11 2020-10-16 广州视源电子科技股份有限公司 一种查询任务的分配方法及装置
CN107025141B (zh) * 2017-05-18 2020-09-01 成都海天数联科技有限公司 一种基于大数据混合作业模型的调度方法
CN107562528B (zh) * 2017-09-11 2021-06-29 金蝶软件(中国)有限公司 支持多种计算框架的单元化按需计算方法及相关装置
CN107748696B (zh) * 2017-09-20 2020-05-01 深圳壹账通智能科技有限公司 一种任务调度的方法及终端设备
CN109783273B (zh) * 2017-11-14 2022-12-13 阿里巴巴集团控股有限公司 分布式处理中的容错方法及设备
CN109799991B (zh) * 2017-11-16 2022-03-18 中标软件有限公司 基于MapReduce框架分布式计算环境的源代码编译方法及系统
CN108228328B (zh) * 2018-01-05 2020-11-06 北京奇艺世纪科技有限公司 一种流任务实现方法、装置及电子设备
US11093225B2 (en) 2018-06-28 2021-08-17 Xilinx, Inc. High parallelism computing system and instruction scheduling method thereof
CN109189572B (zh) * 2018-08-02 2021-06-04 中兴飞流信息科技有限公司 一种资源预估方法及系统、电子设备和存储介质
CN109542616A (zh) * 2018-10-26 2019-03-29 深圳点猫科技有限公司 一种教育系统的多节点间数据计算的调度方法及电子设备
CN111221643B (zh) * 2018-11-23 2023-04-07 阿里巴巴集团控股有限公司 任务处理方法和任务处理装置
CN109857532B (zh) * 2019-01-22 2020-11-17 杭州电子科技大学 基于蒙特卡洛树搜索的dag任务调度方法
CN110058932B (zh) * 2019-04-19 2021-08-27 中国科学院深圳先进技术研究院 一种用于数据流驱动计算的存储方法和存储系统
CN110134505A (zh) * 2019-05-15 2019-08-16 湖南麒麟信安科技有限公司 一种集群系统的分布式计算方法、系统及介质
CN110673939B (zh) * 2019-09-23 2021-12-28 汉纳森(厦门)数据股份有限公司 一种基于airflow和yarn的任务调度方法、装置及介质
CN111163056B (zh) * 2019-12-06 2021-08-31 西安电子科技大学 一种针对MapReduce计算的数据保密方法及系统
CN113094155B (zh) * 2019-12-23 2023-07-18 中国移动通信集团辽宁有限公司 Hadoop平台下的任务调度方法及装置
CN113760488A (zh) * 2020-08-28 2021-12-07 北京沃东天骏信息技术有限公司 调度任务的方法、装置、设备和计算机可读介质
CN112905259A (zh) * 2021-02-05 2021-06-04 北京有竹居网络技术有限公司 数据处理方法、装置、设备及存储介质
CN113806038A (zh) * 2021-08-04 2021-12-17 北京房江湖科技有限公司 任务调度方法、装置、电子设备、存储介质及程序产品
CN114168275B (zh) * 2021-10-28 2022-10-18 厦门国际银行股份有限公司 任务调度方法、系统、终端设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336723A (zh) * 2013-07-21 2013-10-02 哈尔滨理工大学 基于关键路径的适应处理器内核紧缺调度方法
CN103617087A (zh) * 2013-11-25 2014-03-05 华中科技大学 一种适合迭代计算的MapReduce优化方法
CN104199820A (zh) * 2014-07-03 2014-12-10 浙江大学 云平台MapReduce工作流调度优化方法
EP2863309A2 (en) * 2013-10-11 2015-04-22 Accenture Global Services Limited Contextual graph matching based anomaly detection

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130339972A1 (en) * 2012-06-18 2013-12-19 Zhuoyao Zhang Determining an allocation of resources to a program having concurrent jobs

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103336723A (zh) * 2013-07-21 2013-10-02 哈尔滨理工大学 基于关键路径的适应处理器内核紧缺调度方法
EP2863309A2 (en) * 2013-10-11 2015-04-22 Accenture Global Services Limited Contextual graph matching based anomaly detection
CN103617087A (zh) * 2013-11-25 2014-03-05 华中科技大学 一种适合迭代计算的MapReduce优化方法
CN104199820A (zh) * 2014-07-03 2014-12-10 浙江大学 云平台MapReduce工作流调度优化方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于蚁群算法和DAG工作流的云计算任务调度研究;熊磊;《中国优秀硕士学位论文全文数据库》;20140915;1-60 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110659069B (zh) * 2018-06-28 2022-08-19 赛灵思公司 用于执行神经网络计算的指令调度方法及相应计算系统

Also Published As

Publication number Publication date
CN105117286A (zh) 2015-12-02

Similar Documents

Publication Publication Date Title
CN105117286B (zh) MapReduce中任务的调度方法和流水化执行方法
Gu et al. SHadoop: Improving MapReduce performance by optimizing job execution mechanism in Hadoop clusters
Hu et al. Flutter: Scheduling tasks closer to data across geo-distributed datacenters
Bhatotia et al. Incoop: MapReduce for incremental computations
Kwon et al. A study of skew in mapreduce applications
CN108108233B (zh) 任务多副本执行的集群作业调度方法及系统
Shi et al. A DAG model of synchronous stochastic gradient descent in distributed deep learning
Wang et al. Phase-reconfigurable shuffle optimization for Hadoop MapReduce
Jiang et al. Parallel K-Medoids clustering algorithm based on Hadoop
Gunarathne et al. Portable parallel programming on cloud and hpc: Scientific applications of twister4azure
Abualigah et al. Advances in MapReduce big data processing: platform, tools, and algorithms
US20210390405A1 (en) Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof
CN104778235A (zh) 一种基于MapReduce云计算模型的树遍历搜索方法
Ying et al. Towards fault tolerance optimization based on checkpoints of in-memory framework spark
Tang et al. A network load perception based task scheduler for parallel distributed data processing systems
CN104503820B (zh) 一种基于异步启动的Hadoop优化方法
Liu et al. A survey of speculative execution strategy in MapReduce
Katrawi et al. Straggler handling approaches in mapreduce framework: a comparative study.
Fan et al. Model aggregation method for data parallelism in distributed real-time machine learning of smart sensing equipment
Ma et al. Cloud-based multidimensional parallel dynamic programming algorithm for a cascade hydropower system
Wang et al. A survey of system scheduling for hpc and big data
Zhu et al. Smart-mDAG: An intelligent scheduling method for multi-DAG jobs
Senger et al. Bounds on the scalability of bag-of-tasks applications running on master-slave platforms
Kang et al. A comparative analysis of iterative MapReduce systems
Wang et al. An adaptive elasticity policy for staging based in-situ processing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180612

Termination date: 20200922

CF01 Termination of patent right due to non-payment of annual fee