本发明属于资源分配技术领域,尤其涉及一种基于负载均衡机制的权重优先task任务调度方法。
背景技术:
目前,业内常用的现有技术是这样的:
在spark源码中,task任务至worker节点的调度过程是按照stage的优先级以及task的本地性进行优先级的区分,默认task采用一个线程来进行计算。在广播task的时候,如果task大于128mb-200mb,则直接将task丢弃。task将以队列的形式,由master节点分配到各个worker节点。这样会导致各节点之间的分配不均衡,出现高配置节点长期处于饥饿状态,而配置低的节点长期处于满负载状态,导致任务完成时间较长,性能较低,资源利用率较低。在现有的改进算法中,根据worker节点权值进行动态资源分配。每个worker节点通过节点监测模块可以根据自身资源情况及负载变化情况定期动态调整权值大小,master节点调度时读取各节点权值优先选择权值较大节点。但是该算法没有考虑到在高权值的worker节点上等待任务较多,造成任务拥堵的情况。并且,在task任务对worker节点的选择时,仅仅考虑到分配至权值最大的节点,会造成单个worker节点任务数量负载过高的情况。
综上所述,现有技术存在的问题是:现有的改进算法没有考虑到在高权值的worker节点上等待任务较多,造成任务拥堵的情况;在task任务对worker节点的选择时,仅仅考虑到分配至权值最大的节点,造成单个worker节点任务数量负载过高的情况。
解决上述技术问题的难度和意义:
针对hadoop云平台下,任务调度方案已经出现了很多,也较为成熟。但是在spark平台下,关于task的任务调度也出现了一些研究成果。在分布式计算领域中,调度策略的根本目标是根据当前集群中各个worker节点上的资源(包括cpu、内存和网络资源)剩余情况与各个task任务要求,在资源和任务之间做出最优的匹配。并且,各个worker节点的权值不同,节点的计算能力就不同。因此,分布式系统中的task任务调度是一个多目标优化问题,更进一步说,它是一个典型的np问题。
技术实现要素:
针对现有技术存在的问题,当前的spark版本中,在对task任务的调度过程仅用fifo的策略进行调度,未考虑到各个worker节点的计算能力不同的因素,导致计算能力弱的节点阻塞,计算能力强的节点资源闲置。现有的优化策略的研究就过程中,仅考虑到对worker节点进行权值计算,未考虑到这将导致task任务阻塞等待worker节点的资源,以至于增加任务运行时间。本发明提供了一种基于负载均衡机制的权重优先task任务调度方法。
本发明是这样实现的,一种基于负载均衡机制的权重优先task任务调度方法,所述基于负载均衡机制的权重优先task任务调度方法包括:将task任务进行分类,以task任务读取速度和占用资源量的大小两个条件,将task任务分为四类;在各个worker节点上加入负载均衡模块,使之成为分布式负载均衡模型;并动态监测各worker节点上的资源使用和负载情况,在master节点上根据权值的大小,再通过与task分类情况进行映射至各个worker节点,再进行task任务的调度。
进一步,所述基于负载均衡机制的权重优先task任务调度方法包括以下步骤;
步骤一,将task任务按照读取速度及占用资源量的大小进行分类;
步骤二,结合加权轮转算法的思想,对worker节点进行权值的计算;
步骤三,在原有模型上加入分布式负载均衡框架;
步骤四,将计算出的worker节点上的权值和task分类后的情况进行映射;并且worker权值为0的节点不进行分配,且占用数据量大且读取速度慢类型的task直接进行慢任务备份,并等待权值最大的worker节点进行分配。
进一步,所述步骤一具体包括:分为占用数据量小且读取速度快、占用数据量小且读取速度慢、占用数据量大且读取速度快、占用数据量大且读取速度慢四类;
其中判断task任务大小的方法:
判断task任务是否为慢任务的方法:
一个进程上task平均进度增长率-所以进程上task平均任务增长率≤σ×慢节点阈值。
进一步,所述步骤二具体包括:cu代表:cpu的利用率;mu代表:内存利用率;wcl代表:单个worker节点上负载的队列长度;capacity代表:该worker节点的权值;count代表:权值计算过程中的计算次数;
其中,cpu利用率的计算方法:
内存利用率的计算方法:
mu实时可用=m总量-mbuffer-mcache;
其中,m总量表示内存总量;mu实时可用表示目前可以使用的内存容量;mfree表示空闲内存容量;mcache表示缓存容量;
单个worker节点上负载的队列长度计算方法:
其中,wtask表示该worker机上负载task的数量;总task表示正在运行的task的数量;w权值表示该worker机的权值;总权值表示所有worker机的总权值。
进一步,所述步骤四的慢任务备份条件:未在进程上失败过的task;没有备份过的task;task所占用的资源量大;属于慢任务。
综上所述,本发明的优点及积极效果为:
针对现有的改进算法中结合加权轮转算法的思想,避免单个高权值worker节点负载过高,以及大的task任务直接被丢弃的问题进行改进。首先将task任务进行分类,以task任务读取速度和占用资源量的大小两个条件,将task任务分为四类;在各个worker节点上加入负载均衡模块,使之成为分布式负载均衡模型;并动态监测各worker节点上的资源使用和负载情况,在master节点上根据权值的大小,再通过与task分类情况进行映射至各个worker节点,再进行task任务的调度。通过计算worker节点的权值,能够更好的区分worker节点的计算能力,再将task分类后与worker节点进行映射更能充分利用资源,解决弱节点负载过高,强节点负载过低的问题。节省了任务运行时间,提高了资源利用率。
附图说明
图1是本发明实施例提供的基于负载均衡机制的权重优先task任务调度方法流程图。
图2是本发明实施例提供的结合加权轮转算法的思想,对worker节点进行权值的计算示意图。
图3是本发明实施例提供的在原有模型上加入分布式负载均衡框架示意图。
图4是本发明实施例提供的task/worker映射方式示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明实施例提供的基于负载均衡机制的权重优先task任务调度方法包括以下步骤:
s101:将task任务进行分类,以task任务读取速度和占用资源量的大小两个条件,将task任务分为四类;在各个worker节点上加入负载均衡模块,使之成为分布式负载均衡模型;
s102:动态监测各worker节点上的资源使用和负载情况,在master节点上根据权值的大小;
s103:通过与task分类情况进行映射至各个worker节点,再进行task任务的调度。
下面结合附图对本发明的应用原理作进一步的描述。
本发明实施例提供的基于负载均衡机制的权重优先task任务调度方法具体包括以下步骤:
1.首先将task任务按照读取速度及占用资源量的大小进行分类:
分为占用数据量小且读取速度快、占用数据量小且读取速度慢、占用数据量大且读取速度快、占用数据量大且读取速度慢四类。
其中判断task任务大小的方法:
判断task任务是否为慢任务的方法:
一个进程上task平均进度增长率-所以进程上task平均任务增长率≤σ×慢节点阈值(2)
2.其次结合加权轮转算法的思想,对worker节点进行权值的计算:如图2:
其中,cu代表:cpu的利用率;mu代表:内存利用率;wcl代表:单个worker节点上负载的队列长度;capacity代表:该worker节点的权值;count代表:权值计算过程中的计算次数;
其中,cpu利用率的计算方法:
内存利用率的计算方法:
mu实时可用=m总量-mbuffer-mcache;
其中,m总量表示内存总量;mu实时可用表示目前可以使用的内存容量;mfree表示空闲内存容量;mcache表示缓存容量。
单个worker节点上负载的队列长度计算方法:
其中,wtask表示该worker机上负载task的数量;总task表示正在运行的task的数量;w权值表示该worker机的权值;总权值表示所有worker机的总权值。若满足公式(5)的条件,则为单个worker节点的负载阈值。
3.然后在原有模型上加入分布式负载均衡框架:如图3;
4.最后将计算出的worker节点上的权值和task分类后的情况进行映射;并且worker权值为0的节点不进行分配,且占用数据量大且读取速度慢类型的task直接进行慢任务备份,并等待权值最大的worker节点进行分配:
慢任务备份条件:
(1)未在进程上失败过的task
(2)没有备份过的task
(3)task所占用的资源量大
(4)属于慢任务,见公式(2)
task/worker映射方式如图4。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。