CN104572297A - 一种基于遗传算法的Hadoop作业调度方法 - Google Patents

一种基于遗传算法的Hadoop作业调度方法 Download PDF

Info

Publication number
CN104572297A
CN104572297A CN201410816355.8A CN201410816355A CN104572297A CN 104572297 A CN104572297 A CN 104572297A CN 201410816355 A CN201410816355 A CN 201410816355A CN 104572297 A CN104572297 A CN 104572297A
Authority
CN
China
Prior art keywords
dispatch list
task
tasktracker
node
job
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.)
Granted
Application number
CN201410816355.8A
Other languages
English (en)
Other versions
CN104572297B (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.)
Xian Polytechnic University
Original Assignee
Xian Polytechnic 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 Xian Polytechnic University filed Critical Xian Polytechnic University
Priority to CN201410816355.8A priority Critical patent/CN104572297B/zh
Publication of CN104572297A publication Critical patent/CN104572297A/zh
Application granted granted Critical
Publication of CN104572297B publication Critical patent/CN104572297B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种基于遗传算法的Hadoop作业调度方法,首先对作业进行预处理,生成编码解码表,然后生成若干执行作业的初始调度表,对各初始调度表进行适应度检测排序,得到调度表队列,最后对调度表队列中的初始调度表进行遗传操作,形成最终调度表队列;将排在最终的调度表队列最前的调度表作为最优调度表,根据最优调度表分别将不同作业的任务分配到对应的TaskTracker上执行,完成Hadoop作业调度任务。本调度方法在作业调度前无需对平台中的资源进行预设,在调度过程中会动态的采集统计并分配,减轻了管理员的负担;另外,本调度方法能够在作业的总完成时间和作业的平均完成时间两个方面进行控制,既保证了执行作业的公平性,又能确保执行作业效率。

Description

一种基于遗传算法的Hadoop作业调度方法
技术领域
本发明属于信息技术领域,涉及一种基于遗传算法的Hadoop作业调度方法。
背景技术
Apache Hadoop是一个开源的分布式平台,主要由MapReduce和HDFS两大核心项目组成。MapReduce是Hadoop的核心计算框架,它是一种主从结构的软件框架,分为JobTracker和TaskTracker两种角色。JobTracker节点通过对作业数据Job的预处理形成任务分片(split)再分发到各个TaskTracker节点以确保任务的并行性,然后再对各分片经过Map阶段的分解和Reduce阶段的汇总,最后输出处理结果并保存;HDFS是Hadoop实现分布式计算的存储基石。它是一个具有高度容错性,适合部署在廉价的机器上的系统。HDFS也是一种主从结构的框架,有NameNode和DataNode两种节点。NameNode节点负责存储文件的元数据信息而DataNode负责存储数据。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
Hadoop的作业调度是影响Hadoop平台整体性能的一个重要方面。Hadoop中自带三种调度方式:FIFO(First In First Out)调度、Fair调度、Capacity调度。其中,FIFO是默认的调度方式,该调度是将所有的作业都提交到一个JobQueue队列,然后JobTracker按照先来后到的顺序调度执行作业。该方式最大的特点是简单明了,对JobTracker的负担较小,但是局限性很大。在面向多用户时,没有考虑作业的紧急程度,另外对小作业不利。对于FIFO存在的问题,FaceBook和Yahoo分别开发了Fair调度和Capacity调度,两种方法都支持多用户且兼顾公平性,但两者的实现策略不同。Fair调度是按照资源池(pool)的方式来组织作业,并把资源公平地分配到这些资源池里。保证每个pool的最小共享量、支持时间片抢占、闲置作业的并发量且动态调整各个资源池的资源量。Capacity调度支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略。为了防止同一个用户的作业独占该队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。调度时,首先选择一个合适的队列:计算每个队列中正在运行的任务数与其应分得的计算资源的比值,选择一个该比值最小的队列,然后按照作业的优先级和提交时间的选后顺序,同时考虑用户资源的闲置和内存的限制从该队列中选择一个任务。这两种调度方法都需要在调度前对平台资源进行配置,这需要预先对平台的资源非常的了解,无疑加重了平台管理员的负担。
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法采纳了自然进化模型,如选择、交叉、变异、迁移、局域与邻域等。计算开始时,一定数目N个个体(父个体1、父个体2、父个体3,父个体4......)即种群随机地初始化,并计算每个个体的适应度函数,第一代也即初始代就产生了。如果不满足优化准则,开始产生新一代的计算。为了产生下一代,按照适应度选择个体,父代要求基因重组(交叉)而产生子代。所有的子代按一定概率变异,然后子代的适应度又被重新计算,子代被插入到种群中将父代取而代之,构成新的一代(子个体1、子个体2、子个体3、子个体4......)。这一过程循环执行,直到满足优化准则为止。由于遗传算法自身具有自组织、自适应和自学习性的智能性、本质的并行性、只与搜索的目标函数和适应度函数相关而不受其它条件等影响的一系列特征,是解决作业调度问题的一个强有力的数学工具。
发明内容
本发明的目的是提供一种基于遗传算法的Hadoop作业调度方法,解决了现有技术中存在的在作业调度前需对集群资源进行预配置,且无法兼顾作业的公平性和作业的执行效率的技术问题。
本发明的技术方案为:一种基于遗传算法的Hadoop作业调度方法,按照以下步骤实施:
步骤1:对等待调度的作业进行预处理,在JobTracker节点汇总等待调度的作业Jobm和集群中的节点TaskTrackern
步骤2:生成编码解码表;
步骤3:根据编码解码表生成若干初始调度表;
步骤4:对各初始调度表进行适应度检测排序,得到调度表队列A;
步骤5:对调度表队列A中的初始调度表进行遗传操作,形成最终调度表队列;
步骤6:选取最终的调度表队列中处于队首的调度表作为最优调度表,然后根据最优调度表分别将不同作业Jobm的任务分配到对应的TaskTrackern上执行,完成Hadoop作业调度任务。
本发明的特点还在于,
步骤1中对等待调度的作业进行预处理的具体步骤如下:
1.1,在JobTracker节点统计出每个作业的分片数lm和它能被调度的最大TaskTracker数bm
1.2,对于每个TaskTracker节点,读取对应配置文件中最大并行slots数sn
1.3,计算||Tmn||,计算公式如下:
其中,||Tmn||表示Jobm任务集分配在TaskTrackern上子集中任务的个数,此处用范数表示,Tmn表示Jobm任务集分配在TaskTrackern上的任务子集。
所述步骤2中生成编码解码表的具体步骤如下:
根据||Tmn||的大小,得到编码解码表,从编码解码表行的角度,任务分配时遵循如下约束:
∪ i = 1 n T mn = Job m ∪ i = 1 n | | T mn | | = l m ∩ i = 1 n T mn = 0 - - - ( 2 ) ;
从列的角度,保证调整过程中需要在作业和任务节点两个方面满足如下不同的约束条件:
| | TaskTracker n | | ≤ s n Σ j = 1 n | | TaskTracker j | | ≤ 0.9 * Σ j = 1 n s j - - - ( 3 ) .
步骤3中生成初始调度表的具体步骤如下:
3.1,令编码解码表中任务子集Tmn中所有的元素为初始调度表的数量此时为0;
3.2,依照||Tmn||的大小在任务子集Tmn中随机分配任务,生成新的调度表;
3.3,每次任务分配完成都要对新的调度表按照公式(2)、(3)进行约束限制性检测;若满足约束条件,初始调度表的数量加1;
重复步骤3.1-3.3,直至生成规定数量的初始调度表。
步骤4中对各初始调度表进行适应度检测排序的具体步骤如下:
4.1,首先计算Jobm在TaskTrackern节点上的平均执行时间,计算公式如下:
t ‾ mn = t mn ′ - t 0 | | T mn | | - - - ( 4 ) ;
其中,t′mn表示Jobm在TaskTrackern中的最后一个任务的完成时间点,t0表示Jobm在TaskTrackern中第一个任务的开始执行时间点;
4.2,首先采用直接以目标函数转化为适应度函数的方式得到适应度函数,即F(x)=f(x)的形式,目标函数如下:
f ( i , j ) = MIN [ MAX j = 1 n Σ i = 1 m t T ij ] f ( i ) = MIN i = 1 m [ MAX t ‾ ij j = 1 n ] - - - ( 5 ) ;
其中,表示Jobi在TaskTrackerj节点上平均执行时间,表示Jobi在TaskTrackerj节点上的执行时间;
4.3,步骤3中生成的每个初始调度表均依据适应度函数生成两个值,即执行任务的总时间和执行任务的平均时间,这两个值按照以总时间为主、平均时间为次的策略把调度表从大到小进行排序:初始调度表按照总时间从大到小的顺序排序,若总时间相等,平均时间大的调度表排在前,若两个值都相等则按照调度表进行适应度检测的顺序排列,然后再将初始调度表逆序排序,形成调度表队列A。
步骤5中遗传操作的具体步骤如下:在此算法中把数据的本地性作为首要考虑条件,初始调度表作为进行遗传操作的父个体;
5.1,选择操作
5.1.1选择需要进行交叉操作的调度表,为了便于交叉列的选取,选择方法如下:首先从调度表队列A中将没有数据本地性任务的初始调度表选出,其次在具有数据本地性任务的中,依照初始调度表中数据本地性任务的数量从小到大依次选取,当初始调度表中所有任务都具有数据本地性时,不选取该初始调度表,也就是说该父个体不进行遗传操作,选择出的初始调度表形成新的调度表队列B;
5.1.2选取交叉列:首先在调度表队列B随机选取两个调度表作为一组,再选出各组中两个调度表的交叉列,选取方法如下:
首先从(1,n)的有序集合中随机选出一个数字,确定本组中每个调度表参与交叉的列的数量,其次在各个参与交叉操作的调度表中随机选取对应数量的列参与交叉;
其中,选取进行交叉操作的调度表组数需要保证在交叉完毕后所有父个体的数量与子个体的数量之和为初始调度表数量的一倍;
5.2,交叉操作
找出一组中两个调度表即两个父个体每个作业交叉列子任务的交集,形成每个作业的交叉列子任务的交集集合,若一个作业的交集集合中的子任务在其所在的调度表中具有数据本地性,则该子任务保持不变,若一个作业中交集集合中的子任务a在所在的调度表中不具有数据本地性,则按照以下原则处理:选择子任务a在两个父个体调度表的交叉列中具有数据本地性的TaskTracker节点b,在子任务a所在的调度表中,若子任务a具有数据本地性的TaskTracker节点b下的任务数不超过其允许的最大任务数,子任务a直接移动其所在调度表相应作业的TaskTracker节点b下;若子任务a具有数据本地性的TaskTracker节点b下的任务数达到其允许的最大任务数且存在相应作业的非本地性任务,则在非本地性任务中随机选择出一个与子任务a交换;若子任务a具有数据本地性的TaskTracker节点b下任务数达到其允许的最大任务数且全部是相应作业具有本地性的任务,则子任务a不做移动处理;每组调度表交叉完成后形成两个新的调度表,即两个子个体;交叉完成后父个体与子个体形成调度表队列C;
5.3,变异操作
将变异率设定为小于等于10%,参与变异的调度表最少有一个而且参与变异的调度表从调度表队列C中随机选取;
对于随机选取的每一个参与变异的调度表,随机选择其中一个作业下的两列子任务进行交换操作,其中具有数据本地性的子任务不参与交换;变异操作完成后,形成新的调度表队列D;
步骤5.4,淘汰调度表个体
上述三个操作完成之后,表示本次进化完成,进化代数加1,形成了新的种群;然后将调度表队列D进行适应度检测排序形成调度表队列E,将排在调度表队列E中后50%的调度表个体淘汰,得到调度表队列F,调度表队列F作为下一次遗传操作进化的基础;
重复进行步骤5.1-5.4,继续进化,直至进化代数达到为50,形成最终的调度表队列。
步骤6中按照如下规则执行作业中的任务:首先按照作业先来先到的顺序依次执行每个作业在第一个节点任务集中的一个任务,然后依次执行每个作业在第一个节点任务集中的二个任务,直至最后一个节点中的最后一个任务执行完毕。
本发明的有益效果是:本调度方法在作业调度前无需对平台中的资源进行预设,它在调度过程中会动态的采集统计并分配,减轻了管理员的负担;另外,本调度方法能够在作业的总完成时间和作业的平均完成时间两个方面进行控制,既保证了执行作业的公平性,又能确保执行作业效率。
附图说明
图1是本发明的基于遗传算法的Hadoop作业调度流程图;
图2是本发明中的调度表执行任务的总时间和平均时间队列图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
参见图1,本发明的基于遗传算法的Hadoop作业调度方法,包括以下步骤:
步骤1:作业预处理
在JobTracker节点首先对等待调度的作业和集群中TaskTracker节点的情况作一个汇总,对于作业队列中的各个作业,统计出每个作业的分片数lm和它能被调度的最大TaskTracker数bm,如表1所示:
表1
Job Split TaskTracker
Job1 l1 b1
Job2 l2 b2
…… …… ……
Jobm lm bm
其中,Job1、Job2……Jobm的顺序为作业先来后到的顺序。
对于每个TaskTracker节点,读取对应配置文件中的最大并行slots数sn,见表2:
表2
TaskTracker slots
TaskTracker1 s1
TaskTracker2 s2
…… ……
TaskTrackern sn
由以上的统计信息,可以计算Jobm任务集分配在TaskTrackern上子集中任务的个数,即Tmn的大小,其在计算时用范数表示,计算公式如下:
其中,||Tmn||表示Jobm任务集分配在TaskTrackern上子集中任务的个数,此处用范数表示,Tmn表示Jobm任务集分配在TaskTrackern节点上的任务子集。
步骤2:生成编码解码表,具体步骤如下:
任务的编码解码的方式不仅要直接明了,还要便于封装解析处理。在此采用Job-TaskTracker间直接的分配方式,具体步骤如下:根据每个TaskTracker节点上各个作业对应任务子集个数大小,即||Tmn||的大小,得到编码解码表,为了保证任务的分配在各个节点保持均衡性,每个TaskTracker按照自身能够并行的slots数在集群总slots数中的比例对各个作业进行划分,得到的编码解码表如表3所示:
表3
从行的角度看,Tmn是Jobm任务集分配在TaskTrackern节点上的任务子集,它可以是Jobm任务集中的任意子集,包括空集,任务分配时遵循如下约束:
∪ i = 1 n T mn = Job m ∪ i = 1 n | | T mn | | = l m ∩ i = 1 n T mn = 0 - - - ( 2 )
其中,Jobm在Tmn任务子集中任务个数总和为Jobm的所有作业分片数,且它们之间任意两个都是互斥的,以防止同一个任务同时被分配到两个TaskTracker上。进化过程中每一轮的调整,都是对Tmn中各个子任务集间的一次动态调整,但具有数据本地性的任务要保留,不参与调整。
从列的角度看,保证调整过程中需要在作业和任务节点两个方面满足如下不同的约束条件,
| | TaskTracker n | | ≤ s n Σ j = 1 n | | TaskTracker j | | ≤ 0.9 * Σ j = 1 n s j - - - ( 3 )
其中,每个TaskTracker上并行的任务数不能超过它的slots数,操作中需要预留一部分节点,以防止在任务节点失联宕机等故障下能够及时补充,预留节点以预留率表示,在此处预留率取10%,所以公式(3)中总节点数乘以系数0.9。
步骤3:根据编码解码表生成初始调度表
由于对作业的分配无任何先验条件,因此采用随机分配生成的方式,初始调度表生成的数量取100,具体步骤如下:
3.1,令Tmn中所有的元素为初始调度表的数量取0;
3.2,依照||Tmn||的大小在任务子集Tmn中随机分配任务;
3.3,每次分配完成都要对调度表按照公式(2)、(3)进行约束限制性检测;若满足约束条件,初始调度表的数量加1;
3.4,当初始调度表生成数量达到100,则初始调度表生成完毕;初始调度表形式上如表5、表6所示。
步骤4:检测适应度
4.1,首先计算Jobm在TaskTrackern节点上平均执行时间,见表4
表4
由于任务的不同导致完成时间点的不确定,并且除了执行中的任务外,其余的任务都是处于就绪状态的,因此,选用Jobm在TaskTrackern节点上平均执行时间代表Jobm在TaskTrackern节点上的执行时间。
平均执行时间的计算公式如下,
t ‾ mn = t mn ′ - t 0 | | T mn | | - - - ( 4 )
其中,t′mn表示Jobm在TaskTrackern中的最后一个任务的完成时间点,t0表示Jobm在TaskTrackern中第一个任务的开始执行时间点;
所以在操作中需要对Jobm在TaskTrackern中的最后一个任务的完成时刻和第一个任务的起始时进行存储,如表示Job1分配到TaskTracker1节点上任务集的平均执行时间,||T11||表示Job1分配到TaskTracker1节点上任务集中任务的个数。
4.2适应度检测排序
适应度函数是遗传算法进化的依据,同调度目标是相符的。首先资源的动态分配是利用遗传算法的本质特性;其次在作业的总完成时间和平均完成时间上是通过目标函数来控制的,目标函数的表达式如下:
f ( i , j ) = MIN [ MAX j = 1 n Σ i = 1 m t T ij ] f ( i ) = MIN i = 1 m [ MAX t ‾ ij j = 1 n ] - - - ( 5 )
其中,表示Jobi在TaskTrackerj节点上平均执行时间,表示Jobi在TaskTrackerj节点上的执行时间;
一般而言,适应度函数是目标函数通过变换或某种映射关系而成,在此为了减少计算复杂性的同时加快算法的收敛速度,最大化目标函数的效益,采用直接以目标函数转化为适应度函数的方式,即F(x)=f(x)的形式。具体操作是步骤3生成的每个初始调度表都会依据适应度函数生成两个值,即执行任务的总时间和执行任务的平均时间,这两个值按照以总时间为主、平均时间为次的策略把调度表从大到小进行排序:初始调度表按照总时间从大到小的顺序排序,若总时间相等,平均时间大的调度表排在前,若两个值都相等则按进行适应度检测的顺序排列,然后再将初始调度表逆序排序,形成调度表队列A,此处队列内调度表的个数取100,一方面同初始调度表的规模保持一致,减少计算量,另一方面增大算法的淘汰率,加快算法收敛速度,其中与调度表对应的总时间和平均时间也依次分别进入总完成时间队列和平均完成时间队列,如图2所示。
步骤5:采用遗传算法生成调度表新种群,搜索最优调度表,即搜索最优解
搜索最优解对应于遗传算法中的遗传操作,遗传操作是遗传算法中最重要的一步,具体依照先后顺序分为3个步骤:选择操作、交叉操作、变异操作,其中,进化代数上限取50,初始值取0。在此算法中我们一直把数据的本地性作为首要考虑条件,这里初始调度表为进行遗传操作的父个体。
5.1,选择操作
选择操作是交叉操作的基础,首先要基于本地性的考虑,这是一种最优解,选择操作的具体步骤如下:
5.1.1选择需要进行交叉操作的调度表,为了便于交叉列的选取,选择方法如下:首先从调度表队列A中将没有数据本地性任务的调度表选出,其次在具有数据本地性任务的调度表中,依照调度表中数据本地性任务的数量从小到大依次选取,当该调度表中所有任务都具有数据本地性时,不选取该调度表,也就是说该父个体不进行遗传操作,选择出的初始调度表形成新的调度表队列B;
5.1.2选取交叉列:随机在调度表队列B选取两个调度表作为一组,再选出各组中两个调度表的交叉列,选取方法如下:
首先从(1,n)的有序集合中随机选出一个数字,确定本组中每个调度表参与交叉的列的数量,如表5、表6的两个调度表选取的数字为3,即该组中每个调度表选取进行交叉的列的数量为3;
其次在各个参与交叉操作的调度表中随机选取对应数量的列参与交叉,如表5中的选取的1、2、3列分别指向TaskTracker2,TaskTracker3,TaskTrackern-1三列、表6中选取的1、2、3列分别指向TaskTracker1,TaskTracker2,TaskTrackern三列。
5.2,交叉操作
由于交叉的操作在Job和TaskTracker上均有公式(2)、(3)所示的约束条件,且要保证最优解的保留策略。在此,我们选择一种多点交叉的方法,对于选择操作中选出的交叉列,我们采取取交集、移位、数据本地性任务保留的策略生成子个体,具体步骤如下:
找出一组中两个调度表即两个父个体每个作业交叉列子任务的交集,形成每个作业的交叉列子任务的交集集合,若一个作业的交集集合中的子任务在其所在的调度表中具有数据本地性,则该子任务保持不变,若一个作业中交集集合中的子任务a在所在的调度表中不具有数据本地性,则按照以下原则处理:选择子任务a在两个父个体调度表的交叉列中具有数据本地性的TaskTracker节点b,在子任务a所在的调度表中,若子任务a具有数据本地性的TaskTracker节点b下的任务数不超过其允许的最大任务数,子任务a直接移动其所在调度表相应作业的TaskTracker节点b下;若子任务a具有数据本地性的TaskTracker节点b下的任务数达到其允许的最大任务数且存在相应作业的非本地性任务,则在非本地性任务中随机选择出一个与子任务a交换;若子任务a具有数据本地性的TaskTracker节点b下任务数达到其允许的最大任务数且全部是相应作业具有本地性的任务,则子任务a不做移动处理;每组调度表交叉完成后形成两个新的调度表,即两个子个体。
每组调度表交叉完成后形成两个新的调度表,即两个子个体。
在此以父个体1,父个体2中Job6进行交叉操作生成子个体1,子个体2过程来进一步详细说明,表5中,1,2,3代表父个体1选择出做交叉操作的列,表6中,1’,2’,3’是父个体2选择出做交叉操作的列,其余Job同理,具体过程如下:
(1)取父个体1、父个体2中Job6中任务的交集,结果为{t64,t66};
(2)父个体1中{t64,t66}是具有本地性的任务,因此保持不变,即子个体1中Job6这一行是保持不变的,父个体2中,{t66}具有本地性,保持不变。{t64}不具有本地性,因此{t64}会在表5中表示的1,2,3列,表6中表示的1’,2’,3’列中移动。由于{t64}在TaskTracker3列下具有数据本地性,因此子个体2中{t64}是否移动到TaskTracker3列下;遵循上述移动规则,即若TaskTracker3列下任务数不超过该任务机允许的最大任务数,则直接移动该列下;若任务数达到该任务机允许的最大任务数且存在非本地性任务,则在非本地性任务中随机选择出一个与{t64}交换;若任务数达到该任务机允许的最大任务数且全部是具有本地性的任务,则不做移动处理。
最终生成子个体2中Job6所在的行符合移动规则,任务{t64}移动到TaskTracker3列下。
表5
表6
注:{t66}在父个体1,父个体2中都具有本地性,但不在同一个TaskTracker下,这是Hadoop的冗余副本存储机制。
每组调度表中父个体间的一次交叉操作,都会产生两个新的子个体。为了尽快地淘汰不良基因,保证优良基因的快速集中,加快最优解的搜索,在变异操作进行完毕后的适应度检测中会淘汰50%的调度表个体,因此,为了保证淘汰后的调度表与初始调度表的数目一致,步骤5.1中选取进行交叉操作的调度表的组数需要保证在交叉完毕后父个体的数量与子个体的数量之和为初始调度表数量的一倍,交叉完成后父个体与子个体形成调度表队列C,调度表队列C中的调度表不进行适应度检测排序。
5.3,变异操作
变异操作是模拟生物进化中的基因突变现象,以防止进化进入局部最优的情形,理论上变异率不超过50%,在此变异率不超过10%,参与变异的调度表最少有一个而且参与变异的调度表随机选取;其中,变异率为参与变异的调度表占调度表队列C中调度表数量的比率。
变异操作中,对于随机选中的每一个参与变异的调度表,随机选择其中一个作业下的两列子任务进行交换操作,但其中具有数据本地性的子任务不参与交换;变异操作完成后,形成新的调度表队列D。
表7
如表7所示,具体操作如下:随机选择一个调度表的两列,TaskTracker2和TaskTrackern,以Job6为例,随机选择这两列中不具有本地性的任务交换位置即可,其余的Job同理。
步骤5.4,淘汰调度表个体
上述三个操作完成之后,表示本次进化完成,进化代数加1,形成了新的种群;然后将调度表队列D进行适应度检测排序形成调度表队列E,方法同步骤4,将排在调度表队列E中后50%的调度表个体淘汰,得到调度表队列F,调度表队列F作为下一次进化进行遗传操作的基础,至此本轮搜索最优解阶段结束。
重复进行步骤5.1-5.4,继续进行进化,直至进化代数达到为50,形成最终的调度表队列。
步骤6:确定最优解,根据最优解分别将不同作业的任务分配到对应的TaskTracker上执行,完成Hadoop作业调度任务,具体步骤如下:
选取步骤5中形成的最终的调度表队列中的处于队首中的调度表作为最优解,这是遗传算法中的一种精英选择方式,然后进入解码阶段,即根据最优调度表分别将不同作业的任务分配到对应的TaskTracker上执行,调度任务完毕。其中,按照如下规则执行任务:首先按照作业先来先到的顺序依次执行每个作业在第一个节点任务集中的一个任务,然后依次执行每个作业在第一个节点任务集中的二个任务,直至最后一个节点中的最后一个任务执行完毕,下面举例说明:
假设有3个作业,其中TaskTracker1上分配了如表8所示的任务,考虑到不同作业间的差异以及调度公平性的情况下,TaskTracker是按照{t11,t21,t31,t12,t22,t32,t13,t33,t14}的竖向首尾相接的顺序调度执行的,这样可以保证到小作业的及时响应和大作业的执行时间,在每个TaskTracker中任务是以对应节点的slots数为单位并行的。
表8同一个TaskTracker节点上不同作业的执行顺序
本调度方法在作业调度前无需对平台中的资源进行预设,它在调度过程中会动态的采集统计并分配,减轻了管理员的负担;另外,本调度方法能够在作业的总完成时间和作业的平均完成时间两个方面进行控制,既保证了执行作业的公平性,又能确保执行作业效率。

Claims (7)

1.一种基于遗传算法的Hadoop作业调度方法,其特征在于,按照以下步骤实施:
步骤1:对等待调度的作业进行预处理,在JobTracker节点汇总等待调度的作业Jobm和集群中的节点TaskTrackern
步骤2:生成编码解码表;
步骤3:根据编码解码表生成若干初始调度表;
步骤4:对各初始调度表进行适应度检测排序,得到调度表队列A;
步骤5:对调度表队列A中的初始调度表进行遗传操作,形成最终调度表队列;
步骤6:选取最终的调度表队列中处于队首的调度表作为最优调度表,然后根据最优调度表分别将不同作业Jobm的任务分配到对应的TaskTrackern上执行,完成Hadoop作业调度任务。
2.根据权利要求1所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述的步骤1中对等待调度的作业进行预处理的具体步骤如下:
1.1,在JobTracker节点统计出每个作业的分片数lm和它能被调度的最大TaskTracker数bm
1.2,对于每个TaskTracker节点,读取对应配置文件中最大并行slots数sn
1.3,计算||Tmn||,计算公式如下:
其中,||Tmn||表示Jobm任务集分配在TaskTrackern上子集中任务的个数,此处用范数表示,Tmn表示Jobm任务集分配在TaskTrackern上的任务子集。
3.根据权利要求2所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述步骤2中生成编码解码表的具体步骤如下:
根据||Tmn||的大小,得到编码解码表,从编码解码表行的角度,任务分配时遵循如下约束:
∪ i = 1 n T mn = Job m ∪ i = 1 n | | T mn | | = l m ∩ i = 1 n T mn = 0 - - - ( 2 ) ;
从列的角度,保证调整过程中需要在作业和任务节点两个方面满足如下不同的约束条件:
| | TaskTracker n | | ≤ s n Σ j = 1 n | | TaskTracker j | | ≤ 0.9 * Σ j = 1 n s j - - - ( 3 ) .
4.根据权利要求3所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述的步骤3中生成初始调度表的具体步骤如下:
3.1,令编码解码表中任务子集Tmn中所有的元素为初始调度表的数量此时为0;
3.2,依照||Tmn||的大小在任务子集Tmn中随机分配任务,生成新的调度表;
3.3,每次任务分配完成都要对新的调度表按照公式(2)、(3)进行约束限制性检测;若满足约束条件,初始调度表的数量加1;
重复步骤3.1-3.3,直至生成规定数量的初始调度表。
5.根据权利要求2所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述的步骤4中对各初始调度表进行适应度检测排序的具体步骤如下:
4.1,首先计算Jobm在TaskTrackern节点上的平均执行时间,计算公式如下:
t ‾ mn = t mn ′ - t 0 | | T mn | | - - - ( 4 ) ;
其中,t′mn表示Jobm在TaskTrackern中的最后一个任务的完成时间点,t0表示Jobm在TaskTrackern中第一个任务的开始执行时间点;
4.2,首先采用直接以目标函数转化为适应度函数的方式得到适应度函数,即F(x)=f(x)的形式,目标函数如下:
f ( i , j ) = MIN [ MAX j = 1 n Σ i = 1 m t T ij ] f ( i ) = MIN i = 1 m [ MAX j = 1 n t ‾ ij ] - - - ( 5 ) ;
其中,表示Jobi在TaskTrackerj节点上平均执行时间,表示Jobi在TaskTrackerj节点上的执行时间;
4.3,步骤3中生成的每个初始调度表均依据适应度函数生成两个值,即执行任务的总时间和执行任务的平均时间,这两个值按照以总时间为主、平均时间为次的策略把调度表从大到小进行排序:初始调度表按照总时间从大到小的顺序排序,若总时间相等,平均时间大的调度表排在前,若两个值都相等则按照调度表进行适应度检测的顺序排列,然后再将初始调度表逆序排序,形成调度表队列A。
6.根据权利要求1所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述的步骤5中遗传操作的具体步骤如下:在此算法中把数据的本地性作为首要考虑条件,初始调度表作为进行遗传操作的父个体;
5.1,选择操作
5.1.1选择需要进行交叉操作的调度表,为了便于交叉列的选取,选择方法如下:首先从调度表队列A中将没有数据本地性任务的初始调度表选出,其次在具有数据本地性任务的中,依照初始调度表中数据本地性任务的数量从小到大依次选取,当初始调度表中所有任务都具有数据本地性时,不选取该初始调度表,也就是说该父个体不进行遗传操作,选择出的初始调度表形成新的调度表队列B;
5.1.2选取交叉列:首先在调度表队列B随机选取两个调度表作为一组,再选出各组中两个调度表的交叉列,选取方法如下:
首先从(1,n)的有序集合中随机选出一个数字,确定本组中每个调度表参与交叉的列的数量,其次在各个参与交叉操作的调度表中随机选取对应数量的列参与交叉;
其中,选取进行交叉操作的调度表组数需要保证在交叉完毕后所有父个体的数量与子个体的数量之和为初始调度表数量的一倍;
5.2,交叉操作
找出一组中两个调度表即两个父个体每个作业交叉列子任务的交集,形成每个作业的交叉列子任务的交集集合,若一个作业的交集集合中的子任务在其所在的调度表中具有数据本地性,则该子任务保持不变,若一个作业中交集集合中的子任务a在所在的调度表中不具有数据本地性,则按照以下原则处理:选择子任务a在两个父个体调度表的交叉列中具有数据本地性的TaskTracker节点b,在子任务a所在的调度表中,若子任务a具有数据本地性的TaskTracker节点b下的任务数不超过其允许的最大任务数,子任务a直接移动其所在调度表相应作业的TaskTracker节点b下;若子任务a具有数据本地性的TaskTracker节点b下的任务数达到其允许的最大任务数且存在相应作业的非本地性任务,则在非本地性任务中随机选择出一个与子任务a交换;若子任务a具有数据本地性的TaskTracker节点b下任务数达到其允许的最大任务数且全部是相应作业具有本地性的任务,则子任务a不做移动处理;每组调度表交叉完成后形成两个新的调度表,即两个子个体;交叉完成后父个体与子个体形成调度表队列C;
5.3,变异操作
将变异率设定为小于等于10%,参与变异的调度表最少有一个而且参与变异的调度表从调度表队列C中随机选取;
对于随机选取的每一个参与变异的调度表,随机选择其中一个作业下的两列子任务进行交换操作,其中具有数据本地性的子任务不参与交换;变异操作完成后,形成新的调度表队列D;
步骤5.4,淘汰调度表个体
上述三个操作完成之后,表示本次进化完成,进化代数加1,形成了新的种群;然后将调度表队列D进行适应度检测排序形成调度表队列E,将排在调度表队列E中后50%的调度表个体淘汰,得到调度表队列F,调度表队列F作为下一次遗传操作进化的基础;
重复进行步骤5.1-5.4,继续进化,直至进化代数达到为50,形成最终的调度表队列。
7.根据权利要求1所述的一种基于遗传算法的Hadoop作业调度方法,其特征在于,所述的步骤6中按照如下规则执行作业中的任务:首先按照作业先来先到的顺序依次执行每个作业在第一个节点任务集中的一个任务,然后依次执行每个作业在第一个节点任务集中的二个任务,直至最后一个节点中的最后一个任务执行完毕。
CN201410816355.8A 2014-12-24 2014-12-24 一种基于遗传算法的Hadoop作业调度方法 Expired - Fee Related CN104572297B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410816355.8A CN104572297B (zh) 2014-12-24 2014-12-24 一种基于遗传算法的Hadoop作业调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410816355.8A CN104572297B (zh) 2014-12-24 2014-12-24 一种基于遗传算法的Hadoop作业调度方法

Publications (2)

Publication Number Publication Date
CN104572297A true CN104572297A (zh) 2015-04-29
CN104572297B CN104572297B (zh) 2018-04-24

Family

ID=53088442

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410816355.8A Expired - Fee Related CN104572297B (zh) 2014-12-24 2014-12-24 一种基于遗传算法的Hadoop作业调度方法

Country Status (1)

Country Link
CN (1) CN104572297B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022670A (zh) * 2015-07-17 2015-11-04 中国海洋大学 一种云计算平台中的异构分布式任务处理系统及其处理方法
CN106095574A (zh) * 2016-06-13 2016-11-09 北京唯智佳辰科技发展有限责任公司 海量计算粗颗粒并行实现及计算任务随机动态分配方法
CN106354633A (zh) * 2016-08-25 2017-01-25 中国电子科技集团公司第四十研究所 基于算法插件的任务调度表生成方法
CN106372660A (zh) * 2016-08-30 2017-02-01 西安电子科技大学 一种基于大数据分析的航天产品装配质量问题分类方法
CN107273197A (zh) * 2017-06-14 2017-10-20 北京工业大学 基于正交实验改进的谱聚类遗传算法的Hadoop任务调度方法
CN107273209A (zh) * 2017-06-09 2017-10-20 北京工业大学 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法
CN108170530A (zh) * 2017-12-26 2018-06-15 北京工业大学 一种基于混合元启发式算法的Hadoop负载均衡任务调度方法
CN108415761A (zh) * 2018-01-31 2018-08-17 西北工业大学 一种基于网络流量优化的Storm任务调度方法
CN110196775A (zh) * 2019-05-30 2019-09-03 苏州浪潮智能科技有限公司 一种计算任务处理方法、装置、设备以及可读存储介质
CN110970038A (zh) * 2019-11-27 2020-04-07 云知声智能科技股份有限公司 语音解码方法及装置
CN113361833A (zh) * 2020-03-02 2021-09-07 联芯集成电路制造(厦门)有限公司 化学机械抛光系统以及相关的派工管理方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090228550A1 (en) * 2008-03-07 2009-09-10 Kiyokuni Kawachiya System, method, and computer program for determining whether object is genuine or fake in metaverse
CN103902375A (zh) * 2014-04-11 2014-07-02 北京工业大学 一种基于改进遗传算法的云任务调度方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090228550A1 (en) * 2008-03-07 2009-09-10 Kiyokuni Kawachiya System, method, and computer program for determining whether object is genuine or fake in metaverse
US20120266256A1 (en) * 2008-03-07 2012-10-18 International Business Machines Corporation Determining whether object is genuine or fake in metaverse
CN103902375A (zh) * 2014-04-11 2014-07-02 北京工业大学 一种基于改进遗传算法的云任务调度方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
徐肖等: "一种Hadoop中基于改进遗传算法的作业调度算法", 《计算机技术与发展》 *
苏小会等: "Hadoop中任务调度算法的改进", 《电子设计工程》 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105022670B (zh) * 2015-07-17 2018-03-13 中国海洋大学 一种云计算平台中的异构分布式任务处理系统及其处理方法
CN105022670A (zh) * 2015-07-17 2015-11-04 中国海洋大学 一种云计算平台中的异构分布式任务处理系统及其处理方法
CN106095574A (zh) * 2016-06-13 2016-11-09 北京唯智佳辰科技发展有限责任公司 海量计算粗颗粒并行实现及计算任务随机动态分配方法
CN106095574B (zh) * 2016-06-13 2019-01-08 北京唯智佳辰科技发展有限责任公司 海量计算粗颗粒并行实现及计算任务随机动态分配方法
CN106354633A (zh) * 2016-08-25 2017-01-25 中国电子科技集团公司第四十研究所 基于算法插件的任务调度表生成方法
CN106354633B (zh) * 2016-08-25 2019-01-04 中国电子科技集团公司第四十一研究所 基于算法插件的任务调度表生成方法
CN106372660A (zh) * 2016-08-30 2017-02-01 西安电子科技大学 一种基于大数据分析的航天产品装配质量问题分类方法
CN107273209A (zh) * 2017-06-09 2017-10-20 北京工业大学 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法
CN107273197B (zh) * 2017-06-14 2020-08-28 北京工业大学 基于正交实验改进的谱聚类遗传算法的Hadoop任务调度方法
CN107273197A (zh) * 2017-06-14 2017-10-20 北京工业大学 基于正交实验改进的谱聚类遗传算法的Hadoop任务调度方法
CN108170530A (zh) * 2017-12-26 2018-06-15 北京工业大学 一种基于混合元启发式算法的Hadoop负载均衡任务调度方法
CN108170530B (zh) * 2017-12-26 2021-08-17 北京工业大学 一种基于混合元启发式算法的Hadoop负载均衡任务调度方法
CN108415761A (zh) * 2018-01-31 2018-08-17 西北工业大学 一种基于网络流量优化的Storm任务调度方法
CN108415761B (zh) * 2018-01-31 2021-11-05 西北工业大学 一种基于网络流量优化的Storm任务调度方法
CN110196775A (zh) * 2019-05-30 2019-09-03 苏州浪潮智能科技有限公司 一种计算任务处理方法、装置、设备以及可读存储介质
CN110970038A (zh) * 2019-11-27 2020-04-07 云知声智能科技股份有限公司 语音解码方法及装置
CN113361833A (zh) * 2020-03-02 2021-09-07 联芯集成电路制造(厦门)有限公司 化学机械抛光系统以及相关的派工管理方法
US11397425B2 (en) 2020-03-02 2022-07-26 United Semiconductor (Xiamen) Co., Ltd. CMP polishing system and associated pilot management system

Also Published As

Publication number Publication date
CN104572297B (zh) 2018-04-24

Similar Documents

Publication Publication Date Title
CN104572297A (zh) 一种基于遗传算法的Hadoop作业调度方法
CN107168267B (zh) 基于改进粒子群与启发式策略的生产排产方法及系统
CN108880663A (zh) 基于改进遗传算法的天地一体化网络资源分配方法
CN107329815B (zh) 一种基于BP-Tabu搜索的云任务负载均衡调度方法
CN104035816A (zh) 一种基于改进nsga-ii的云计算任务调度方法
CN105159762A (zh) 基于贪心策略的启发式云计算任务调度方法
CN104077634B (zh) 基于多目标优化的主动‑反应式动态项目调度方法
CN110909787A (zh) 基于聚类的进化算法进行多目标批调度优化的方法和系统
CN112685138B (zh) 云环境下基于多种群混合智能优化的多工作流调度方法
CN102256369A (zh) 基于能量和通信开销的无线传感器网格任务调度方法
CN110414863A (zh) 一种智能制造车间资源调度方法
CN108427602B (zh) 一种分布式计算任务的协同调度方法及装置
CN105550825B (zh) 云计算环境下的基于MapReduce并行化的柔性工厂作业调度方法
CN102982389A (zh) 使用基于MapReduce的蚁群优化技术求解组合优化问题的方法
CN106371924A (zh) 一种最小化MapReduce集群能耗的任务调度方法
CN107219824B (zh) 基于滚动窗口调度技术的软件机器人集成控制调度方法
CN104635709B (zh) 考虑费用和时间双目标的柔性综合调度方法
CN105005503A (zh) 基于元胞自动机的云计算负载均衡任务调度方法
Pooranian et al. Independent task scheduling in grid computing based on queen bee algorithm
CN117077981B (zh) 融合邻域搜索变异和差分进化的停机位分配方法及装置
CN111026534B (zh) 云计算环境下基于多种群遗传算法的工作流执行优化方法
CN112148446A (zh) 一种用于多技能资源受限项目调度的进化策略算法
Konovalov et al. Job control in heterogeneous computing systems
Navimipour et al. The LGR method for task scheduling in computational grid
Hoogsteen et al. On the scalability of decentralized energy management using profile steering

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: 20180424

Termination date: 20191224

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