CN107273209B - 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法 - Google Patents

基于最小生成树聚类改进遗传算法的Hadoop任务调度方法 Download PDF

Info

Publication number
CN107273209B
CN107273209B CN201710432104.3A CN201710432104A CN107273209B CN 107273209 B CN107273209 B CN 107273209B CN 201710432104 A CN201710432104 A CN 201710432104A CN 107273209 B CN107273209 B CN 107273209B
Authority
CN
China
Prior art keywords
task
tasktracker
tasks
taskqueue
hadoop
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.)
Active
Application number
CN201710432104.3A
Other languages
English (en)
Other versions
CN107273209A (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.)
Beijing University of Technology
Original Assignee
Beijing University of Technology
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 Beijing University of Technology filed Critical Beijing University of Technology
Priority to CN201710432104.3A priority Critical patent/CN107273209B/zh
Publication of CN107273209A publication Critical patent/CN107273209A/zh
Application granted granted Critical
Publication of CN107273209B publication Critical patent/CN107273209B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/004Artificial life, i.e. computing arrangements simulating life
    • G06N3/006Artificial life, i.e. computing arrangements simulating life based on simulated virtual individual or collective life forms, e.g. social simulations or particle swarm optimisation [PSO]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了基于最小生成树聚类改进遗传算法的Hadoop任务调度方法,包括待调度任务TaskQueue的建立,任务预测执行时间矩阵ETC的建立,任务本地性矩阵LTC的建立,机器负载列表loadList的建立;进行个体编码、初始化数据,并设定参数;进行种群初始化;对种群内的个体进行解码得到表现型空间,计算表现型空间个体的任务预测执行时间、本地性任务个数和机器负载,然后根据这三个值计算种群内个体的适应度值;在表现型空间对种群进行最小生成树聚类;选择种群内个体参加遗传操作;对选择的个体进行交叉和变异操作;重复迭代直到得到最佳个体。本发明采用改进的遗传算法作为优化算法,同时以任务预测执行时间、本地性任务个数、机器负载三个因素作为参数进行优化求解。

Description

基于最小生成树聚类改进遗传算法的Hadoop任务调度方法
技术领域
本发明属于Hadoop平台的任务调度问题,实际上也是任务和TaskTracker之间的组合优化问题。首先通过引入MinJob和SinglePercent两个参数以及结合当前集群中可用的slot数量构建调度模型,然后将预测执行时间、本地任务个数和机器负载作为优化目标,最后采用基于聚类改进的遗传算法对其进行优化,是一种使用计算技术、遗传算法、聚类分析实现对大数据处理平台Hadoop任务调度的方式。
背景技术
由于现在的衣食住行和工作等越来越依赖于互联网,导致了互联网中数据的爆发式增长,而这些数据不仅仅是量级上的增长,在这些数据的背后隐藏着很多的信息,这些信息往往对某个企业乃至某个行业来说都是至关重要的。在这样的背景下开源大数据平台Hadoop成为了使用最广泛的大数据处理平台之一。
Hadoop平台中最关键的的一个环节之一便是根据任务对资源的需求控制任务执行顺序和资源使用的调度环节。这个环节直接关系到Hadoop平台的整体性能和系统资源的利用情况。Hadoop官方现在有三种调度算法FIFO、Capacity和Fair,但是FIFO只适合于单用户和集群负载比较小的情况,Capacity和Fair虽然是多用户的但都是根据配置文件来控制资源的资源使用,这需要配置大量的参数,这无疑加大了管理的难度并且在一个有几百台机器的异构集群中几乎是不可能的。
针对Hadoop现有调度算法的缺点,很多研究学者都对其进行了研究和改进并提出了自己的调度算法。Matei Zaharia等人提出了延迟调度算法,在这种算法中,当有slave节点请求分配Map任务时,如果无法满足节点的本地性,则先让Map任务等待D1时长,希望在这段时间以内有满足Map任务本地性的slave节点请求任务。但是这样在集群负载很大的时候容易造成某个任务等待时间过长。Ghods等人提出了Dominant Resouce Fairness(DRF),DRF算法意在将资源公平地分给不同的用户,但这种算法不适用于异构集群。Rasooli等人提出了COSHH,他针对不同类型的作业对资源的需求不同提出了这种算法,但是这种算法开销很大,当集群的负载变轻时,并不适用。Jian Tan等人提出了一种调度Reduce任务的策略,在该算法中,根据Map任务的进度计算Reduce任务的调度时机。但是该算法中没有考虑Map任务的执行时间问题。Xiaotong Zhang等人提出了改进的SRT算法,该算法根据Map任务的最短食欲时间来调度任务。但该算法容易导致系统资源得不到充分的利用。国内学者杨倩茹等人提出了一种引入内存平衡的Hadoop平台作业调度算法FMscheduler,在调度过程中加入了内存比较机制、调整作业公平权重计算方法以及作业预留机制。朱宗斌等人提出了一种基于自适应调整交叉和变异操作的概率的遗传算法的Hadoop调度算法,但是他对任务本身只考虑了任务执行时间这一个约束条件并且并没有对遗传算子进行改进。徐肖等提出了一种基于分段编码遗传算法的Hadoop调度算法,但是他的适应度函数也只考虑了任务执行时间这一个约束条件。
因此,本发明通过引入了2个参数:一次最少处理job个数MinJob和当一个大任务独占资源时最多可占用的资源比例SinglePercent并结合当前集群中可用的slot数目来建立Hadoop任务调度模型,并以任务预测执行时间、本地任务个数以及机器负载作为优化目标,使用基于最小生成树聚类改进的遗传算法(CGA)来求解模型。
发明内容
本发明的目的是通过较少的配置文件项以及集群中的可用slot数目建立一个更合理的使用遗传算法进行Hadoop任务调度的模型,然后采用任务预测执行时间、本地任务个数和机器负载作为优化目标,并采用基于最小生成树聚类改进的遗传算法求解模型以得到性能更好的调度器。
设定一个Hadoop集群,Hadoop集群中有p个TaskTracker,m个Job被提交到JobTracker,ttsL表示TaskTracker的列表,且ttsL={tts1,tts2,…,ttsp},ttsL中的各个元素表示各个TaskTracker的列表;JobQueue表示Job的队列,JobQueue={job1,job2,...,jobm},JobQueue中的各个元素表示各个Job。
1.构建TaskQueue
用户使用Hadoop集群时,被初始化后的Job都以JobInProgress对象的形式都存放在JobQueue中。Hadoop调度问题最终是一个Task和TaskTracker的组合优化问题,因此使用遗传算法解决Hadoop调度问题的第一步便是将JobQueue中的Job使用策略构造TaskQueue。
通过引入两个参数和当前集群中可用的slot数目来自适应地确定TaskQueue的长度和TaskQueue中的task,该TaskQueue与编码紧密相关,参数如下:
MinJob:一次最少处理job个数,由用户配置文件实现,是一个大于1的整数。
SinglePercent:当一个大任务独占资源时最多可占用的资源比例,由用户配置文件实现,是一个0-1之间的浮点数。
numsOfSlot:当前集群中可用的slot的数目,由系统自动获取。
2.适应度函数
在遗传算法中,适应度函数有着至关重要的作用,因遗传算法的思想来源于自然进化中的“优胜劣汰”,每个染色体的优劣程度便是由适应度函数决定的。
在Hadoop集群中,调度器的性能直接影响着Hadoop的性能,而衡量一个调度器性能的指标有以下几条:
(1)所有作业的平均完成时间。
(2)任务的本地性
(3)能否满足用户的资源需求
(4)集群中各个节点的负载
采用任务预测执行时间、本地任务个数以及机器负载三项性能指标的组合作为适应度函数。而且这三个性能指标是通过构建3个矩阵来完成计算的,分别是任务预测执行时间ETC矩阵,本地任务LTC矩阵以及机器负载loadList。
2.1构建三个数据结构
(1)构建ETC矩阵
构建ETC矩阵是根据TaskQueue和TaskTracker的列表进行构建的,如图2所示为一个ETC矩阵,其元素eij代表第i个任务在第j个TaskTracker上的预测执行时间。
(2)构建LTC矩阵
构建LTC矩阵是根据TaskQueue和TaskTracker的列表进行构建的,如图3所示为一个LTC矩阵,其元素lij代表第i个任务在第j个TaskTracker上是否为本地任务。
(3)构建loadList
loadList是根据TaskTracker上的能够使用的资源个数和正在执行的任务个数来确定的。
2.2构建适应度函数
有了以上三个数据结构就可以构造适应度函数了。
本方法对染色体的评价是对染色体解码以后进行计算,并且使用预测执行时间、本地性个数、负载三个标准同时进行衡量。
3.在表现型空间进行种群划分操作
编码使用任务编号-TaskTracker编号,所以遗传算法种群中个体之间的有以下特点:
(1)基因型空间中个体的索引代表任务的编号
(2)基因型空间中每一个索引上的值代表的是TaskTracker的编号
(3)表现型空间解码后的个体有任务预测执行时间、本地任务个数和机器负载三个特征
以上三个特点导致按照基因型空间各个基因位上值的欧式距离表示个体间的相似性是没有意义的。
因此在计算种群的相似度矩阵时要在表现型空间,计算方法:根据解码后个体的任务预测执行时间、本地任务个数和机器负载三个特征计算欧式距离确定他们之间的相似性。
4.使用基于最小生成树改进的遗传算法(CGA)寻找最优解
将CGA用于调度Hadoop任务,编码方式采用Task编号-TaskTracker编号,适应度函数采用预测执行时间、本地任务个数、负载三个指标的组合。聚类操作在表现型空间进行,如下为基于CGA的Hadoop调度算法的步骤:
Step1.根据配置文件中的参数MinJob和SinglePercent以及JobQueue中的Job生成待调度的任务列表TaskQueue。
Step2.通过TaskTrackerManager获取集群中TaskTracker列表ttsL。
Step3.根据TaskQueue和ttsL构建ETC矩阵,LTC矩阵以及loadList。
Step4.根据TaskQueue、ttsL以及popsize进行种群初始化,设当前代数为1。
Step5.令当前种群为pop,判断是否满足停止进化条件,如果满足执行Step10;如果不满足到Step6。
Step6.对pop中的染色体进行解码,解码后求出每个染色体的预测执行时间timeExcute、本地任务个数totalNumLocal、机器负载load,然后根据这三个属性求出种群中个体的相似度矩阵dis。
Step7.将pop中的染色体两两之间形成一条边构建一个无向图,并使用dis中的值作为无向图中边的权值形成有权无向图G,然后使用最小生成树聚类对种群进行划分。
Step8.对pop进行轮盘赌选出一个个体indiv1,然后随机生成一个0-1之间的浮点数,如果浮点数大于交叉概率pc,直接把选择出的个体遗传到新种群popN中,否则,获取indiv1的类别为classid1,再随机的在pop中选取一个个体indiv2,获取indiv2的类别为classid2,使得classid1!=classid2,然后使得indiv2与indiv1进行交叉操作,然后把新个体放入popN中,并把这个过程循环popsize次。
Step9.对popN进行轮盘赌选择选出一个个体indiv,随机生成一个0-1间的浮点数,如果这个浮点数大于pm,则把indiv直接遗传至popNM中,否则,对indivi进行变异操作,把变异后的结果放入popNM中,把这个过程循环popsize次。并使pop=popNM;
Step10.选出pop中适应度值最好的一个染色体记为bestIndiv,对bestIndiv进行解码操作生成一个map数据结构,key值为TaskTracker的编号,value值为要在该TaskTracker上执行的任务列表。
Step11.根据请求调度任务的TaskTracker的名称,把任务列表返回给JobTracker。
与现有技术相比,本发明具有以下优点:
1).本发明中的调度器配置文件中只有两个配置参数:MinJob和SinglePercent,再系统自动获取的当前集群中可用的slot数目不仅可以自适应地确定TaskQueue的长度,即遗传算法编码长度,而且可以防止一个大的任务独占资源,建立了更加合理的模型。
2).本发明中将Hadoop任务调度问题看做是任务和taskTracker之间的组合优化问题,使用任务预测执行时间、本地任务个数和机器负载作为性能指标同时也是优化目标,采用遗传算法进行寻优可以为taskTracker分配更加合适的任务列表。
2).本发明采用了基于最小生成树聚类改进遗传算法对建立Hadoop任务调度模型进行优化求解,改进的遗传算法通过对种群进行最小生成树聚类,使物种内的个体具有很高的相似度,而物种间的相似度较低,利用物种间的交叉可以维持种群多样性,抑制未成熟收敛现象。
3).将本发明使得聚类操作在表现型空间进行,采用每个个体解码后的预测执行时间、本地任务个数以及机器负载计算个体间的间距,使得聚类更有实际意义,最终得到的调度器性能更高。
附图说明
图1构建TaskQueue流程;
图2ETC矩阵图示;
图3LTC矩阵图示;
图4为本发明所涉及方法的主流程图;
图5染色体示意图
图6解码后的染色体示意图
具体实施方式
下面结合附图对本发明做进一步说明。
本方法将Hadoop任务调度看做是任务和TaskTracker的组合优化问题,采用Task编号-TaskTracker编号,即一条染色体即为一种解决方案。使用预测执行时间、本地任务个数和机器负载的组合作为适应度函数。使用CGA对所构建的模型求解对中得到一种在预测执行时间、本地任务个数和机器负载三个方面都相对较好的解决方案。
本方法所涉及的主流程如图4所示,包括以下步骤;
步骤一,设定参数,进行个体编码。
1.设定参数
需要用户设定的参数只有两个,MinJob和SinglePercent,这里令MinJob=3,LengthOfTaskQueue=20。
遗传算法参数:popsize=50,pc=0.6,pm=0.2,聚类系数0.9,maxGen=80。
2.计算taskQueue
3.构建TaskQueue的整个过程如图1所示,步骤如下:
(1)设置配置文件,在配置文件中设置两个变量,一个是默认处理的Job数量MinJob,它的值是一个整数,默认值是3;一个是当某个大Job出现时,为了避免它独占集群中的资源,允许它占资源总量的百分比SinglePercent,它的值是一个大于0小于1的浮点数,默认值0.5。这也是使用遗传算法构建Hadoop调度器的一个优点,相比Hadoop现有三种调度器的十几项繁琐的配置参数,本方法的调度器仅需配置这两个参数。
(2)对比配置文件中的MinJob的值和JobQueue的长度,如果JobQueue的长度大于等于MinJob则从JobQueue中取出MinJob个Job,否则把JobQueue中的Job都取出,并令MinJob=JobQueue.size()。
(3)创建一个TaskQueue,初始长度lengthOfTaskQueue为此时集群中可用的slot数量。并获取MinJob个Job的Task总数s。
(4)如果s>lengthOfTaskQueue,并且MinJob>1,令MinJob=MinJob-1,再获取s并与lengthOfTaskQueue比较;如果s<lengthOfTaskQueue跳转到(5),s=lengthOfTaskQueue,跳转到(6)。
(5)如果s<lengthOfTaskQueue,令offset=lengthOfTaskQueue–s,并再从JobQueue中取第MinJob+1个Job的offset个Task。
(6)如果s=lengthOfTaskQueue,则把MinJob个Job的Task直接放到TaskQueue中。
(7)如果s>lengthOfTaskQueue并且MinJob=1,TaskQueue为空,则令s=int[lengthOfTaskQueue*SinglePercent],然后取这个Job的s个Task放入TaskQueue中;再令lengthOfTaskQueue=lengthOfTaskQueue–s,MinJob=配置文件中的初始值,然后取JobQueue中从第2个Job开始的MinJob个,s为这MinJob个Job的Task数,转入(4)。
4.计算ETC矩阵
因为不同用户编写的Mapreduce对资源需求不相同,所以在调度的过程中要考虑Job本身的资源需求和TaskTracker的资源特性对任务执行的影响。Job本身的资源需求被称为作业特征,用来表示Job对资源的使用情况,比如Job的CPU平均使用率、内存的平均使用率等,作业特征用户编写Mapreduce程序的时候进行设定;TaskTracker的资源特性被称为节点特征,用来描述单个TaskTracker节点上计算资源的状态和质量,如某个TaskTracker上CPU的使用率、空闲的物理内存以及可用的slot数量等,TaskTracker的节点特征又分为两类,系统运行过程中保持不变的节点属性,如处理器的个数、物理内存总量等,和在作业执行过程会随之变化的节点属性,如CPU的使用率、内存的空闲量等。TaskTracker的节点特性会通过心跳信息汇报给JobTracker。
设有m种资源M[r1,r2,...,rm],如果任务T用户为其配置的资源为T[X1,X2,...,Xm],而某个TaskTracker拥有的资源量为[Y1,Y2,...,Ym]。
通过这两者间资源的比值得出一个相对权值,取所有资源中权值最大的那个,就是该任务在该TaskTracker上执行时TaskTracker拥有的资源相对于任务对资源的需求最少满足的那个资源。权值ω计算方式:
Figure GDA0002677684790000061
通过TaskTracker的历史信息计算出该TaskTracker在以往的历史任务中,执行map任务的平均速度aveMapExcuteTime和执行reduce的平均速度aveReduceExcuteTime;
使得权值ω和任务在该节点上执行的平均速度相乘便估算出该任务在该TaskTracker上执行需要的时间。即
mapExcuteTime=ω*aveMapExcuteTime (2)
reduceExcuteTime=ω*aveReduceExcuteTime (3)
但是根据Task的某些不同性质计算的方式也略有差别。根据Mapreduce框架任务分为map和reduce,而对于map任务来说又有数据本地性和非本地性之分,任务是否在本地执行对于任务执行时间来说是关键的。根据作业对资源的需求不同,将作业分为I/O密集型和CPU密集型。这两种类型的作业正如其名,I/O密集型的任务一般会伴随有大量数据的输入输出,需要较大的存储空间,而CPU密集型的任务多是计算复杂型但是并没有太大的数据输出输入,因此需要占用较多的CPU,这两类任务的执行预测时间计算方式也是不同的。
因此,在公式(2)和公式(3)的基础上按照以下分类计算某个任务在某个TaskTracker上的预测执行时间。
map
在Hadoop中,CPU密集型的任务多是做科学计算,因此根据一个mapTask是否有输入的block来判断是否为CPU密集型任务。JobInProgress中有一个方法getNonLocalMaps()能够用来判断一个Task是否有输入数据块。如果没有输入数据块,则说明该任务为CPU密集型,否则为I/O密集型。
A CPU密集型map
在使用公式(1)计算ω时,为每一项资源增加一个权值,并且各项的权值之和为1,由于CPU密集型的任务,要占用较多的CPU,所以给CPU的权值较大一些,剩下的资源权值相同,以突显CPU的比重。假设现有一个CPU密集型的map,其需要占用CPU百分比为X1,而TaskTracker的CPU使用率为Y1,a和b均为子权值,此处,a为第一项
Figure GDA0002677684790000071
的子权值,b为其余项
Figure GDA0002677684790000072
的子权值,且a>b,a+(m-1)*b=1,则
Figure GDA0002677684790000073
mapExcuteTime=ω*aveMapExuteTime (5)
B I/O密集型map
由于I/O密集型需要读取大量的输入数据并伴随大量输出数据的写入,所以这类任务对内存的需求会比较大,因此在计算ω时要把内存的权重设置大一些,而且涉及到计算所输入的数据是否是在TaskTracker本地,如果不在本地,任务的执行时间的估算需要加上从HDFS下载输入数据所需的时间。
现假设有一个I/O密集型map任务,其需要占用内存为X2,而TaskTracker的可用内存为Y2,a和b均为子权值,此处,a为第二项
Figure GDA0002677684790000074
的子权值,b为其余项
Figure GDA0002677684790000075
的子权值,且a>b,a+(m-1)*b=1,则
Figure GDA0002677684790000076
如果TaskTracker为该map所需输入数据的本地节点,则
mapExcuteTime=ω*aveMapExcuteTime (7)
否则,假设该节点从HDFS将map执行所需输入数据下载到本地需要的时间为tdownload,则
mapExcuteTime=ω*aveMapExcuteTime+tdownload (8)
reduce
由于数据本地性这个概念只是针对map才有的,所以对于reduce
reduceExcuteTime=ω*ave Re duceExcuteTime (9)
为了便于适应度函数值的计算,这里引入一个矩阵,用来表示各个任务在每个TaskTracker上的预测执行时间,称为ETC矩阵。假设现在集群中有p个任务等待调度,有q个TaskTracker作为执行任务的节点,即
T=[t1,t2,...,tp]
R=[tt1,tt2,...,ttq]
则ETC矩阵的大小为p*q,如图2所示,其中i∈[1,p],j∈[1,q]
ETC矩阵中的元素ei,j表示第i个任务在第j个TaskTracker上面的预测执行时间,是通过上面提到的流程计算出的。
5.计算LTC矩阵
任务的本地性也是衡量调度器性能的一个重要标准,在本文中会构建一个矩阵LTC,其元素li,j表示第i个任务在第j个TaskTracker上面是否为本地任务,即该任务的执行数据是否存储在该TaskTracker所在的节点上,如果是,则li,j=1,否则li,j=0。LTC矩阵的大小为p*q,如图3所示,其中i∈[1,p],j∈[1,q]
6.计算loadList
在Hadoop集群中,单个TaskTracker的负载也是很重要的,尤其是在异构集群中,因为不同的节点的节点属性有所差别,如果在调度的过程中不考虑这个因素,便会造成一部分节点负载过大,一部分节点资源浪费,于集群来说这样不利于资源的充分利用,于任务来说,被分配到一个负载大的节点上会增加它等待的时间,因此本文中构建了一个列表loadList用来记录集群中各个节点的负载。
设有一个TaskTracker,其slot总数为numsOfSlot,其上正在运行的任务数为runningNums,则
load=runningNums/numsOfSlot (10)
load可以代表该节点上的负载情况,load越大说明这个节点上的正在执行的任务数越多,空闲的资源越少,负载越大。如公式(11)所示为loadList,其大小为q,i∈[1,q]
loadList(i)=[load1,load2,...,loadq] (11)
7.进行个体编码
本方法采用了Task编号-TaskTracker编号的编码方式,所以首先要获取TaskTracker列表ttsL,然后根据图1所示流程构建TaskQueue,假设ttsL={tts1,tts2,...,ttsp},TaskQueue={task1,task2,...,taskn},则染色体长度为n,染色体每一位的取值代表该编号的Task被分配到的TaskTracker的编号,则基因位上的最大取值为ttsL的长度p,即每一位基因的取值范围为[1,p]。一条染色体代表一种解决方案。则一条染色体中第i个基因位的值j代表第i个任务在第j个TaskTracker上面执行。如图5所示为染色体示意图。
8.计算个体适应度
本方法中的适应度函数是使用任务预测执行时间、本地性任务个数以及机器负载三个参数联合组成的,过程如下:
(1)预测执行时间
由于Hadoop集群的各个TaskTracker之间是并行的,所以各个TaskTracker上的任务时同时进行得,所以对于一个染色体来说,整体的预测执行时间是各个TaskTracker上任务预测执行时间的最大值,而单个TaskTracker上的任务的执行时间是调度分配给该TaskTracker的任务列表中所有任务的预测执行时间总和。假设第j个TaskTracker的任务列表为list,且list中任务的个数为n,即第j个TaskTracker上任务的预测执行时间:
Figure GDA0002677684790000091
设集群中一共有q个TaskTracker,则该染色体所代表的解决方案的预测执行时间为:
timeExcute=max{timeOfTT(1),timeOfTT(2),...,timeOfTT(q)} (13)
因本文中遗传算法设计为了寻最大值,所以令
Figure GDA0002677684790000092
(2)本地性数目
由于Hadoop任务执行时需要的输入数据存储在HDFS中,并且通常数据量比较大,因此如果任务被分配到它所需的输入数据所在的节点执行会比较高效,所以在评价一个分配方案时,要考虑该方案中本地任务的个数。
假设第j个TaskTracker的任务列表为list,且list中任务的个数为n,即第j个TaskTracker上本地执行的任务数为:
Figure GDA0002677684790000093
因此,设集群中一共有q个TaskTracker,则一条染色体所代表的方案的本地执行任务总数为:
Figure GDA0002677684790000101
因本地任务的数本身是一个最大化问题,所以
flocal(x)=totalNumLocal(x),x∈[1,popsize] (17)
(3)负载
Hadoop中负载是衡量调度性能的一个重要指标,对整个集群来说,各个节点的负载越平衡越好,对单个TaskTracker来说负载越小越好,因此用来评价染色体的负载是在负载列表loadList中挑选最大值,然后使得这个值最小,这样就避免某个性能相对较优的TaskTracker上负载过重。
因此,设集群中一共有q个TaskTracker,则一条染色体所代表的方案的负载为:
load=max{loadList[1],loadList[2],...,loadList[q]} (18)
在寻优的过程中是寻找最大值,所以
Figure GDA0002677684790000102
综上所述,基于遗传算法的Hadoop调度器中,适应度函数为:
F(x)=ftime(x)+flocal(x)+fload(x),x∈[1,popsize] (20)
在遗传算法的进化过程中使用该适应度函数评价,使用轮盘赌选择算法将适应度值相对较大的染色体进行遗传操作。
步骤二,进行种群初始化
采用随机初始化方法随机地生成popsize个染色体,每个染色体的长度为TaskQueue的长度n,每一个基因位上的值为[1,p]中任意的整数值。
步骤三,对种群进行解码,记录适应度值。
采用的适应度函数为公式(20),而预测执行时间、本地任务个数和机器负载都是表现型空间中个体的特性,所以要先将初始种群中的个体解码形成表现型空间,然后根据ETC、LTC、loadList计算并记录每个个体的预测执行时间、本地任务个数和机器负载,然后根据公式(20)计算适应度值。
所采用的编码方式觉得了解码方式,只要按照基因位上TaskTracker的编号获取相应的任务编号,最终的结果是按照ttsL中TaskTracker的编号获取到相同个数的任务列表。如图6为解码后的染色体。
步骤四,对种群进行最小生成树聚类。
(1)根据解码后得出每个染色体的预测执行时间timeExcute、本地任务个数totalNumLocal、机器负载load以及公式(21)求出种群中个体的相似度矩阵dis
Figure GDA0002677684790000111
(2)将pop中的染色体两两之间形成一条边构建一个无向图,并使用dis中的值作为无向图中边的权值形成有权无向图G。
(3)利用Prim算法求出这个无向图的最小生成树。
(4)确定最小生成树的断边阈值δ*M,M为最小生成树中popsize-1条边的平均权重,δ是一个大于0小于1的调节因子,这里取0.999。
(5)通过切断生成树中的边进行分类:从最小生成树起点开始遍历,将权重大于阈值的边去掉,形成一个森林,属于同一个树的边就属于同一类。
(6)对森林进行深度遍历,对每一类进行记录保存。
步骤五,种群内个体进行交叉操作
使用轮盘赌从种群中选择一个个体indiv1,然后随机生成一个0-1之间的浮点数,如果浮点数大于pc,直接把选择出的个体遗传到新种群中,否则,获取indiv1的类别为classid1,再随机的在pop中选取一个个体indiv2,获取indiv2的类别为classid2,使得classid1!=classid2,然后使得indiv2与indiv1进行交叉操作,然后把新个体放入新种群中,并把这个过程循环popsize次。
步骤六,种群内个体进行变异操作。
从新种群中进行轮盘赌选择选出一个个体indiv,随机生成一个0-1间的浮点数,如果这个浮点数大于pm,则把indiv直接遗传至新种群中,否则,对indivi进行变异操作,把变异后的结果放入新种群中,把这个过程循环popsize次。
步骤七,重复执行三到六步骤,得到最佳个体。
步骤八,解码最佳个体,为各个TaskTracker准好待调度的任务列表。
实验结果
根据以上步骤本发明开发出了基于CGA的Hadoop调度器CGAFxNew,并将该调度器应用到了一个由表1中所示的4台机器组成的异构集群中,并提交了10个处理不同大小和类别的mapreduce任务,并与FIFO,Fair,Capacity做比较。
表1集群中四台机器的硬件条件er
Figure GDA0002677684790000112
软件:四台主机的操作系统为32位的centos6.8,Hadoop版本为1.2.1,jdk为jdk1.7.0_80。
(1)任务执行时间如表2所示:
表2任务执行时间
Figure GDA0002677684790000121
从表2中可以看到CGAFxNew的任务执行时间比GAFxNew的大部分有所减短,并且在六种算法中有很多Job的任务执行时间是最短的。
(2)本地性任务个数如表3所示
表3本地性任务个数
Figure GDA0002677684790000122
从表3中可以看到,使用CGAFxNew对10个Job的任务进行调度后,本地性任务所占比例有所提高,本地性任务的增多也很大程度上的减短了任务执行的时间。
(3)任务在三个slave节点上的分布如表4所示
表4任务在节点中的分布
Figure GDA0002677684790000123
从表4可以看到,任务在三个slave节点上的分布按照节点的资源多少、性能好坏分布合理。
综上所述,将CGA应用到Hadoop的调度后,并且任务的本地性比例有所增加,并且任务在三个节点上的分布更加合理,失败率下降,而且Job的执行时间也普遍在减短,从而可以得出基于CGA的Hadoop调度算法能使得集群中的资源被更加合理的应用,而且对于用户来说所提交的Job的执行时间也减短,因此,基于最小生成树聚类改进的遗传算法的Hadoop调度算法性能有所提高。

Claims (1)

1.基于最小生成树聚类改进遗传算法的Hadoop任务调度方法,其特征在于:
通过较少的配置文件项以及集群中的可用slot数目建立一个更合理的使用遗传算法进行Hadoop任务调度的模型,然后采用任务预测执行时间、本地任务个数和机器负载作为优化目标,并采用基于最小生成树聚类改进的遗传算法求解模型以得到性能更好的调度器;
设定一个Hadoop集群,Hadoop集群中有p个TaskTracker,m个Job被提交到JobTracker,ttsL表示TaskTracker的列表,且ttsL={tts1,tts2,...,ttsp},ttsL中的各个元素表示各个TaskTracker的列表;JobQueue表示Job的队列,JobQueue={job1,job2,...,jobm},JobQueue中的各个元素表示各个Job;
1.构建TaskQueue
用户使用Hadoop集群时,被初始化后的Job都以JobInProgress对象的形式都存放在JobQueue中;Hadoop调度问题使用遗传算法解决Hadoop调度问题的第一步便是对JobQueue中的Job,使用一定策略,构造出TaskQueue;
通过引入两个参数和当前集群中可用的slot数目来自适应地确定TaskQueue的长度和TaskQueue中的task,该TaskQueue与编码紧密相关,参数如下:
MinJob:一次最少处理job个数,由用户配置文件实现,是一个大于1的整数;
SinglePercent:当一个大任务独占资源时最多可占用的资源比例,由用户配置文件实现,是一个0-1之间的浮点数;
numsOfSlot:当前集群中可用的slot的数目,由系统自动获取;
TaskQueue的初始长度lengthOfTaskQueue为此集群中可用的slot的数量,s为MinJob个Job的Task总数;如果s>lengthOfTaskQueue,并且MinJob>1令MinJob=MinJob-1,并进一步比较s与lengthOfTaskQueue的关系,如果s=lengthOfTaskQueue则把MinJob中s个Task全部放入TaskQueue;如果s<lengthOfTaskQueue,则令offset=lengthOfTaskQueue–s,并且再从JobQueue中取第MinJob+1个job的offset个Task,放入TaskQueue;如果s>lengthOfTaskQueue并且MinJob=1,则令s=int(lengthOfTaskQueue*SinglePercent),然后在取s个Task放入TaskQueue,此时在更新lengthOfTaskQueue值为lengthOfTaskQueue-s,MinJob恢复其初始值,然后在取JobQueue中第2个MinJob的数量在重新比较s与lengthOfTaskQueue关系;因此得到一个自适应长度的TaskQueue;
2.适应度函数
在Hadoop集群中,调度器的性能直接影响着Hadoop的性能,而衡量一个调度器性能的指标有以下几条:
(1)所有作业的平均完成时间;
(2)任务的本地性
(3)能否满足用户的资源需求
(4)集群中各个节点的负载
采用任务预测执行时间、本地任务个数以及机器负载三项性能指标的组合作为适应度函数;而且这三个性能指标是通过构建3个矩阵来完成计算的,分别是任务预测执行时间ETC矩阵,本地任务LTC矩阵以及机器负载loadList;
2.1构建三个数据结构
(1)构建ETC矩阵
构建ETC矩阵是根据TaskQueue和TaskTracker的列表进行构建,ETC矩阵元素eij代表第i个任务在第j个TaskTracker上的预测执行时间;
(2)构建LTC矩阵
构建LTC矩阵是根据TaskQueue和TaskTracker的列表进行构建,LTC矩阵元素lij代表第i个任务在第j个TaskTracker上是否为本地任务;
(3)构建loadList
loadList是根据TaskTracker上的能够使用的资源个数和正在执行的任务个数来确定的;
2.2构建适应度函数
有了以上三个数据结构就可以构造适应度函数了;
对染色体的评价是对染色体解码以后进行计算,并且使用预测执行时间、本地任务个数和机器负载三个标准同时进行衡量;
3.在表现型空间进行种群划分操作
在计算种群的相似度矩阵时要在表现型空间,计算方法:根据解码后个体的任务预测执行时间、本地任务个数和机器负载三个特征计算欧式距离确定他们之间的相似性;
4.使用基于最小生成树改进的遗传算法寻找最优解
将最小生成树改进的遗传算法用于调度Hadoop任务,编码方式采用Task编号-TaskTracker编号,适应度函数采用任务预测执行时间、本地任务个数、机器负载三个指标的组合;聚类操作在表现型空间进行,如下为基于最小生成树改进的遗传算法的Hadoop调度算法的步骤:
Step1.根据配置文件中的参数MinJob和SinglePercent以及JobQueue中的Job生成待调度的任务列表TaskQueue;
Step2.通过TaskTrackerManager获取集群中TaskTracker列表ttsL;
Step3.根据TaskQueue和ttsL构建ETC矩阵,LTC矩阵以及loadList;
Step4.根据TaskQueue、ttsL以及popsize进行种群初始化,设当前代数为1;
Step5.令当前种群为pop,判断是否满足停止进化条件,如果满足执行Step10;如果不满足到Step6;
Step6.对pop中的染色体进行解码,解码后求出每个染色体的预测执行时间timeExcute、本地任务个数totalNumLocal、机器负载load,然后根据这三个属性求出种群中个体的相似度矩阵dis;
Step7.将pop中的染色体两两之间形成一条边构建一个无向图,并使用dis中的值作为无向图中边的权值形成有权无向图G,然后使用最小生成树聚类对种群进行划分;
Step8.对pop进行轮盘赌选出一个个体indiv1,然后随机生成一个0-1之间的浮点数,如果浮点数大于交叉概率pc,直接把选择出的个体遗传到新种群popN中,否则,获取indiv1的类别为classid1,再随机的在pop中选取一个个体indiv2,获取indiv2的类别为classid2,使得classid1!=classid2,然后使得indiv2与indiv1进行交叉操作,然后把新个体放入popN中,并把这个过程循环popsize次;
Step9.对popN进行轮盘赌选择选出一个个体indiv,随机生成一个0-1间的浮点数,如果这个浮点数大于pm,则把indiv直接遗传至popNM中,否则,对indivi进行变异操作,把变异后的结果放入popNM中,把这个过程循环popsize次;并使pop=popNM;
Step10.选出pop中适应度值最好的一个染色体记为bestIndiv,对bestIndiv进行解码操作生成一个map数据结构,key值为TaskTracker的编号,value值为要在该TaskTracker上执行的任务列表;
Step11.根据请求调度任务的TaskTracker的名称,把任务列表返回给JobTracker。
CN201710432104.3A 2017-06-09 2017-06-09 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法 Active CN107273209B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710432104.3A CN107273209B (zh) 2017-06-09 2017-06-09 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710432104.3A CN107273209B (zh) 2017-06-09 2017-06-09 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法

Publications (2)

Publication Number Publication Date
CN107273209A CN107273209A (zh) 2017-10-20
CN107273209B true CN107273209B (zh) 2020-11-03

Family

ID=60067478

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710432104.3A Active CN107273209B (zh) 2017-06-09 2017-06-09 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法

Country Status (1)

Country Link
CN (1) CN107273209B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170530B (zh) * 2017-12-26 2021-08-17 北京工业大学 一种基于混合元启发式算法的Hadoop负载均衡任务调度方法
CN108415761B (zh) * 2018-01-31 2021-11-05 西北工业大学 一种基于网络流量优化的Storm任务调度方法
CN108399491B (zh) * 2018-02-02 2021-10-29 浙江工业大学 一种基于网络图的员工多样性排序方法
CN108428051B (zh) * 2018-03-01 2020-06-05 山东大学 面向大数据平台基于最大化收益的MapReduce作业调度方法及装置
CN108984301B (zh) * 2018-07-04 2020-12-25 中国人民解放军国防科技大学 自适应云资源调配方法和装置
CN110109753A (zh) * 2019-04-25 2019-08-09 成都信息工程大学 基于多维度约束遗传算法的资源调度方法及系统
CN110262897B (zh) * 2019-06-13 2023-01-31 东北大学 一种基于负载预测的Hadoop计算任务初始分配方法
CN110990063B (zh) * 2019-11-28 2021-11-23 中国科学院计算技术研究所 一种用于基因相似性分析的加速装置、方法和计算机设备
CN112148443A (zh) * 2020-09-02 2020-12-29 安徽中科龙安科技股份有限公司 龙芯大数据一体机的任务优化调度方法及系统
CN113641471B (zh) * 2021-07-30 2024-02-02 平安科技(深圳)有限公司 基于遗传算法模型的软负载调度方法、装置、设备及介质
CN113778646B (zh) * 2021-08-22 2024-04-05 物产中大公用环境投资有限公司 一种基于执行时间预测的任务层级调度方法及装置
CN116739319B (zh) * 2023-08-15 2023-10-13 中国兵器装备集团兵器装备研究所 一种提高智能终端任务执行时间安全性的方法和系统
CN117234711B (zh) * 2023-09-05 2024-05-07 合芯科技(苏州)有限公司 Flink系统资源动态分配方法、系统、设备及介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9258765B1 (en) * 2003-05-08 2016-02-09 Dynamic Mesh Networks, Inc. Chirp networks
CN102932422B (zh) * 2012-09-29 2014-12-10 南京邮电大学 基于改进蚁群算法的云环境任务调度方法
CN103902375B (zh) * 2014-04-11 2017-09-29 北京工业大学 一种基于改进遗传算法的云任务调度方法
CN104572297B (zh) * 2014-12-24 2018-04-24 西安工程大学 一种基于遗传算法的Hadoop作业调度方法

Also Published As

Publication number Publication date
CN107273209A (zh) 2017-10-20

Similar Documents

Publication Publication Date Title
CN107273209B (zh) 基于最小生成树聚类改进遗传算法的Hadoop任务调度方法
Kalra et al. A review of metaheuristic scheduling techniques in cloud computing
Cho et al. A hybrid meta-heuristic algorithm for VM scheduling with load balancing in cloud computing
Rekha et al. Efficient task allocation approach using genetic algorithm for cloud environment
CN110489229B (zh) 一种多目标任务调度方法及系统
Ben Alla et al. A novel task scheduling approach based on dynamic queues and hybrid meta-heuristic algorithms for cloud computing environment
Alkayal et al. Efficient task scheduling multi-objective particle swarm optimization in cloud computing
CN105656973B (zh) 一种分布式节点组内任务调度方法及系统
CN107273197B (zh) 基于正交实验改进的谱聚类遗传算法的Hadoop任务调度方法
CN110737529A (zh) 一种面向短时多变大数据作业集群调度自适应性配置方法
WO2019217573A1 (en) Task assignment in virtual gpu enabled systems
Chhabra et al. Multi-criteria HPC task scheduling on IaaS cloud infrastructures using meta-heuristics
Malik et al. Comparison of task scheduling algorithms in cloud environment
CN109491761A (zh) 基于eda-ga混合算法的云计算多目标任务调度方法
Khan et al. Task scheduling in cloud computing using hybrid optimization algorithm
CN108427602B (zh) 一种分布式计算任务的协同调度方法及装置
Vila et al. Energy-saving scheduling on IaaS HPC cloud environments based on a multi-objective genetic algorithm
Ari et al. Efficient and scalable ACO-based task scheduling for green cloud computing environment
Devi et al. Multi-objective heuristics algorithm for dynamic resource scheduling in the cloud computing environment
Kumar et al. An efficient load balancing technique based on cuckoo search and firefly algorithm in cloud
Kodli et al. Hybrid Max-Min Genetic Algorithm for Load Balancing and Task Scheduling in Cloud Environment.
Manikandan et al. LGSA: Hybrid task scheduling in multi objective functionality in cloud computing environment
Ding et al. Kubernetes-oriented microservice placement with dynamic resource allocation
Ahmad et al. Pso-based task scheduling algorithm using adaptive load balancing approach for cloud computing environment
Ghazali et al. A classification of Hadoop job schedulers based on performance optimization approaches

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant