一种基于Hadoop的任务优化调度方法
【技术领域】
[0001]本发明属于计算机分布式系统数据处理领域,涉及一种基于Hadoop的任务优化调 度方法。
【背景技术】
[0002] Hadoop是一种开源的分布式系统基础架构,常用于大规模数据处理。作业调度是 Hadoop的核心技术之一。它的主要功能是按照特定的算法来选择调度作业并对计算资源进 行控制,因此,作业调度算法直接关系到Hadoop整个系统的性能和资源的利用情况。目前, Hadoop的作业调度算法都是将系统中的多类资源抽象成单一资源,分配给作业的资源均是 节点资源中固定大小的一部分,称为槽位。这类基于槽位的作业调度算法主要存在三个问 题。首先,这类算法并没有考虑到节点的实际运行能力,只是按照运行的任务个数来判断节 点能否再接受任务,可能会造成集群的某些节点负载过重。其次,它将多类资源抽象成单一 资源进行公平分配,并未考虑系统中多类资源的公平分配。再者,它忽略了不同类型作业对 资源的不同需求。作业占用的资源均是节点中固定大小的一部分资源,不管作业对资源需 求的不同。这造成了作业已分配资源与需求资源之间的不匹配,这种不匹配并不能通过改 变节点槽位的个数来解决。
【发明内容】
[0003] 本发明涉及一种基于Hadoop的任务优化调度方法,通过动态分析与估计集群作业 中各任务实际资源需求,以及本地节点的实际负载情况,实现任务优化分配。首先,提出了 集群资源利用分析算法,通过以完成的任务所需资源量来预测未进行任务所需资源,为集 群资源优化配置奠定基础;其次,选出待分配任务方法,建立待运行任务的队列;第三,当前 队列任务为空且时,选出集群候选任务,使得集群性能最大化。
[0004] 实现本发明目的的技术解决方案为:一种基于Hadoop的任务优化调度方法,包括 以下步骤:
[0005] 步骤1,分析Hadoop集群中各节点所有作业中正在运行任务的资源需求,每个作业 包含一个或多个任务,通过测量各任务已占用资源情况,预估未执行任务对资源的需求情 况;并根据资源占用情况,分配任务到工作节点;资源包括集群CPU、内存和输入输出带宽 10;
[0006] 步骤2,确定任务的工作节点后,通过工作调度器JobTracker向工作节点的任务跟 踪器TaskTracker派发任务,更新工作节点待执行任务列表,并根据数据本地任务优先的原 贝1J,优化任务执行序列,按顺序配置本地资源,进行工作;
[0007] 步骤3,当集群中有节点作业队列为空,且经查询当前作业队列中已无任务,以文 件数据备份数、集群全部节点空闲时间预测值、磁盘负载量三个指标为参数,选择Hadoop集 群中其他待执行任务执行,实现集群资源利用效能最优化。
[0008] 步骤1包括:当任务t运行完成时,st表示该任务t在各节点资源平均利用率,资源 平均利用率st用于表示该任务对资源的需求情况,st采用如下公式表示:
[0010]其中,η表示Hadoop集群中的节点数量,η取值为自然数,St, i表示任务t在节点i采 集到的资源利用率,i取值范围1~η;
[0011]通过已运行任务对于资源的需求情况来估计未运行任务对于资源的需求Dt,采用 如下公式表示:
[0013]其中,m表示按照实际的资源进行任务的调度时作业中已运行任务的集合,m取值 为自然数。
[0014] 步骤2包括如下步骤:
[0015]步骤2-1,根据未运行任务对于资源的需求Dt,由工作调度器JobTracker根据任务 所需数据所在节点位置及该节点资源闲置情况,选择任务工作节点,优先选择任务数据本 地节点,若该节点资源不足,则采用就近原则,选择现存资源许可的工作节点;
[0016] 步骤2-2,当工作节点为本地数据节点时,更新本地任务序列,将该任务前置,直接 建立本地工作目录,运行任务;执行任务所需资源槽位slot由本地资源提供,该节点所使用 的槽位也是最有可能快速释放的槽位,该槽位释放后,资源回归系统资源池中;
[0017] 步骤2-3,当工作节点为非本地数据节点时,工作调度器JobTracke将该任务所需 文件从共享文件系统复制到任务跟踪器TaskTracker所在的文件系统,同时将执行任务过 程中系统所需要的全部文件从分布式缓存复制到本地磁盘,为非本地数据任务新建一个本 地工作目录,新建任务执行器TaskRunner执行任务;
[0018] 步骤2-4:任务在执行过程中,不论本地任务还是非本地任务,当任务执行失败后, 该任务会进入到系统任务失败队列中,如果任务失败队列不为空,则对其中失败次数最多 的任务进行数据本地化筛选,即若是本地数据任务,则本地节点继续执行该任务;若不是本 地数据任务,则选择该失败次数最多的任务作为下一步执行任务,从而优化任务序列。
[0019] 步骤3包括:
[0020]设在Hadoop集群中未执行的任务组中,1为任务t在候选节点上槽位的耗时,R为任 务在集群中的备份数目,Qk为任务在第k个执行节点上的可用槽位数,则任务t预期的所需 资源槽位时间T(t)即集群全部节点空闲时间预测值为:
[0022] 候选节点磁盘负载量为节点自身运行的数据输入输出量与Hadoop集群节点间数 据输入输出量的总和,选择数据交换量最小的任务,忽略网络节点间的磁盘负荷量,该磁盘 的负载量表不为:
[0024] 其中,A为节点的槽位数,N为读取数据并运行的任务数,
[0025] 备份权重W(t)与文件数据备份份数R相关,表示为:
[0027] max(R)和min(R)分别表示任务最大与最小的文件数据数目,文件数据备份数目越 大,备份权重W( t)的值越大,T(t)、E(t)与W(t)的取值范围在[0,1 ]之间,则任务优先排序多 项式公式F(t),表示为:
[0028] F(t) =max{ X Τ(?)+βΧ (l_E(t))+γ X (l_W(t))},
[0029]系数《;、β、γ为多项式的可调参数,〇<α,β<1,γ <1,参数值越小,权值越高。
[0030] 通过分析Hadoop现有调度算法在任务数据本地性方面的劣势,以及考虑到Hadoop 生产集群中网络资源的弥足珍贵,任务如果不得不分配到非本地节点上,则会浪费等待本 地性节点或任务的时间,最终仍会造成不小的网络开销,作业执行效率和资源利用率均会 随之降低。
[0031] 本发明与现有技术相比,其显著优点为:针对Hadoop集群多任务环境下的资源优 化调度问题,通过在动态分析集群CPU、内存和10资源利用率,评估同一作业中各任务的资 源需求,根据任务实际资源需求以及任务节点负载情况进行优化调度,以充分利用集群各 节点资源。
【附图说明】
[0032] 下面结合附图和【具体实施方式】对本发明做更进一步的具体说明,本发明的上述 和/或其他方面的优点将会变得更加清楚。
[0033]图1为本发明方法工作流程图。
[0034] 图2为调度器在任务的数据本地性上表现差异示意图。
[0035] 图3为改进后的作业调度法与原有方法比较示意图。
【具体实施方式】
[0036]结合图1,本发明提供了一种基于Hadoop的任务优化调度方法,步骤如下:
[0037]步骤1:首先对集群作业中已运行任务资源占有情况进行统计分析,以便预估未执 行任务的资源需求。任务所需资源包含任务所占用的集群CPU、内存和10资源,通过top以及 Iotop工具周期性的测量任务资源使用情况,并通过Task Tracker的心跳包报告给Job Tracker,Job Tracker对采集到的数据进行处理,当任务t运行完成时,st表示该任务在各 节点资源利用率的平均值,可表示为:
[0039]式中,η是节点数量,st>1是任务t在节点i采集到的资源利用率,表示该任务的资源 需求,即任务运行过程中各个采样点的资源利用率的平均值作为该任务对CPU、内存以及输 入输出i〇资源需求。同一作业中的任务大多具有相同的程序代码以及数据分块大小,因此 可以通过已经运行完成的任务的资源需求,来评估作业中未进行任务的资源需求,从而确 定未运行任务的资源需求D t所需的集群节点,可表示为:
[0041]式中,m表示按照实际的资源进行任务的调度,作业中已运行任务的集合,
[0042]步骤2:确定候选计算节点后,如果有出现空闲槽位并请求新的任务,工作调度器 JobTracker则会把分配任务的工作交给调度器来处理,给该节点分配最合适的任务。节点 读取内部调用最新作业队列,判别本地数据任务,并将其排列前面。
[0043]步骤2-1:读取最新的候选任务列表,并从中选取排列在第一位的Task Tracker, 即接下来最有可能释放资源的槽位。
[0044] 步骤2-2:对非本地数据任务,将本地化作业文件,从共享文件系统复制到 TaskTracker所在的文件系统。同时将应用程序所需要的全部文件从分布式缓存复制到本 地磁盘,为任务新建一个本地工作目录,新建TaskRunner运行任务。对本地数据任务,直接 建立本地工作目录,运行任务。
[0045] 步骤2-3:
为了保证当前作业失败任务可以快速被重新调度,对于当前运行作业, 如果失败任务集合不为空,则对其中失败次数最多的任务严格按其相对于步骤。对选出的 任务根据数据本地性进行筛选。若为本地任务,则执行;若不是,则选择该失败次数最多的 任务作为候选任务。
[0046]步骤3:如果当前正在运行的作业队列为空,从三个方面考虑集群中工作任务节点 工作效率最优,一是输入文件数据块的备份数量,二是节点任务空闲的时间预测,三是任务 输入数据的磁盘当前负载量。
[0047]设了={七...ti}为集群中未被安排工作序列的任务组。h为任务U在候选节点上 槽位的耗时,Rt为任务备份数目,slk为任务在第k个候选节点上的可用槽位数,则任务^预 期的下一个槽位空闲时间TUO为:
[0049]候选节点磁盘负载量为节点自身运行的数据输入输出量与集群节点间数据输入 输出量的总和。为减小能量负荷,选择数据交换量最小的任务,忽略网络节点间的磁盘负荷 量。那么,该磁盘的负载量可表示为:
[0051 ]其中,Ns为节点的槽位数,Ni为读取数据并运行的任务数。
[0052]相似的,备份权重W( t)与备份分数R相关,可表示为:
[0054] max(R)和min(R)分别表示任务最大与最小的备份数。备份数目越大,WU0的值越 大。EUOdUO与WU0的取值范围在[0,1]之间,则任务优先排序多项式公式S(t〇,可表 示为:
[0055] S(ti) =max{°c ΧΤ(??)+βΧ (l-D(ti))+y X(l-ff(ti))},l < i <n
[0056] 系数~、β、γ为多项式的可调参数,参数值越小,权值越高;n表示已安排在调度策 略中的本节点可运行的本地任务。这项计算的开销很小,这是因为每个节点本地工作任务 数量并不多,基本上可以忽略不计。
[0057] 实施例
[0058]在本实施例中,根据机器的配置情况与作业对资源的需求,设置插槽数为13,CPU 的个数为2,内存大小范围设置为2GB。平台设计为分布式多节点部署,在机架服务器内通过 虚拟机实现。部署操作系统为Centos5.5,部署节点为10个,其中一个节点作为Job Tracker 节点,其他节点作为Task Tracker节点。为了更加精确地分析新方法的效能,混合采用2个 8GB左右数据的大作业和6个500MB数据左右的小作业。
[0059] 表1混合处理作业数据列表
[0061] 依次在Hadoop实验集群上配置通常使用的优化调度器(FIFO)、公平调度器(Fair Scheduler)、计算能力调度器(Capacity Scheduler),按相同方式、相同顺序提交所有作 业,观察其运行结果,并进行统计分析得出如下结果。
[0062] 1、数据本地性
[0063]如图2所示,相同的实验场景下,Hadoop原有的三种调度器在任务的数据本地性上 表现相差不大,均保持在50 %-70 %左右,这是由于这二种度算法在任务级调度阶段所米用 的策略基本相同,仅简单比较任务是否为本地,结果表明这并不能保证良好的数据本地性。 而改进后的调度方法(New Scheduler),由于在任务级调度策略进行了相应改进,相比于 Hadoop原有的调度算法,对任务的数据本地性均有较大改善。经计算可知,通过引入资源预 取策略可以对任务的数据本地性提升10%~20%不等,平均可提升15%左右。
[0064] 2、作业响应时间
[0065]如图3所示,与Hadoop原有各调度算法相比,改进后的作业调度法,由于资源预取 减少了非本地任务等待本地节点出现的时间,作业的响应时间仍有相应的减少30%左右 (单位为秒)。
[0066]综上所述,通过在小型Hadoop实验集群上的模拟实验表明,相对于Hadoop原有作 业调度算法来说,改进后的调度算法不仅在一定程度上提升了任务的数据本地性,也相应 地减少了作业的响应时间,从而证明了该改进思想的可行性与有效性。
[0067]本发明提供了一种基于Hadoop的任务优化调度方法,具体实现该技术方案的方法 和途径都不多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技 术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰 也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
【主权项】
1. 一种基于Hadoop的任务优化调度方法,其特征在于,包括以下步骤: 步骤1,分析Hadoop集群中各节点所有作业中正在运行任务的资源需求,通过测量各任 务已占用资源情况,预估未执行任务对资源的需求情况;并根据资源占用情况,分配任务到 工作节点;资源包括集群CPU、内存和输入输出带宽10; 步骤2,确定任务的工作节点后,通过工作调度器向工作节点的任务跟踪器派发任务, 更新工作节点待执行任务列表,并根据数据本地任务优先的原则,优化任务执行序列,按顺 序配置本地资源,进行工作; 步骤3,当集群中有节点作业队列为空,且经查询当前作业队列中已无任务,以文件数 据备份数、集群全部节点空闲时间预测值、磁盘负载量三个指标为参数,选择Hadoop集群中 其他待执行任务执行,实现集群资源利用效能最优化。2. 根据权利要求1所述的一种基于Hadoop的任务优化调度方法,其特征在于,步骤1包 括:当任务t运行完成时,St表示该任务t在各节点资源平均利用率,S t采用如下公式表示:其中,η表示Hadoop集群中的节点数量,η取值为自然数,st,i表示任务t在节点i采集到 的资源利用率,i取值范围1~η; 通过已运行任务对于资源的需求情况来估计未运行任务对于资源的需求Dt,采用如下 公式表示:其中,m表示按照实际的资源进行任务的调度时作业中已运行任务的集合,m取值为自 然数。3. 根据权利要求2所述的一种基于Hadoop的任务优化调度方法,其特征在于,步骤2包 括如下步骤: 步骤2-1,根据未运行任务对于资源的需求Dt,由工作调度器根据任务所需数据所在节 点位置及该节点资源闲置情况,选择任务工作节点,优先选择任务数据本地节点,若该节点 资源不足,则采用就近原则,选择现存资源许可的工作节点; 步骤2-2,当工作节点为本地数据节点时,更新本地任务序列,将该任务前置,直接建立 本地工作目录,运行任务;执行任务所需资源槽位由本地资源提供,该槽位释放后,资源回 归资源池中; 步骤2-3,当工作节点为非本地数据节点时,工作调度器将该任务所需文件从共享文件 系统复制到任务跟踪器所在的文件系统,同时将执行任务过程中所需要的全部文件从分布 式缓存复制到本地磁盘,为非本地数据任务新建一个本地工作目录,新建任务执行器执行 任务; 步骤2-4:任务在执行过程中,不论本地任务还是非本地任务,当任务执行失败后,该任 务进入到系统任务失败队列中,如果任务失败队列不为空,则对其中失败次数最多的任务 进行数据本地化筛选,即若是本地数据任务,则本地节点继续执行该任务;若不是本地数据 任务,则选择该失败次数最多的任务作为下一步执行任务,从而优化任务序列。4. 根据权利要求3所述的一种基于Hadoop的任务优化调度方法,其特征在于,步骤3包 括: 设在Hadoop集群中未执行的任务组中,1为任务t在候选节点上槽位的耗时,R为任务在 集群中的备份数目,Qk为任务在第k个执行节点上的可用槽位数,则任务t预期的所需资源 槽位时间T(t)即集群全部节点空闲时间预测值为:候选节点磁盘负载量为节点自身运行的数据输入输出量与Hadoop集群节点间数据输 入输出量的总和,选择数据交换量最小的任务,该磁盘的负载量表示为:其中,A为节点的槽位数,N为读取数据并运行的任务数, 备份权重W( t)与文件数据备份份数R相关,表示为:max(R)和min(R)分别表示任务最大与最小的文件数据数目,文件数据备份数目越大, 备份权重W( t)的值越大,T(t)、E(t)与W( t)的取值范围在[0,1 ]之间,则任务优先排序多项 式公式F(t),表示为: F(t)=max{^ XT(t)+0X(l-E(t))+y X(l-ff(t))}, 系数《:、β、γ为多项式的可调参数,〇〈α,β〈1,γ〈1,参数值越小,权值越高。
【专利摘要】本发明提出了基于Hadoop的任务优化调度方法,包括:分析Hadoop集群中各节点所有作业中正在运行任务的资源需求,预估未执行任务对资源的需求情况;并根据资源占用情况,分配任务到工作节点;资源包括集群CPU、内存和输入输出带宽IO;通过工作调度器向工作节点的任务跟踪器派发任务,更新工作节点待执行任务列表,并根据数据本地任务优先的原则,优化任务执行序列,按顺序配置本地资源,进行工作;当集群中有节点作业队列为空,且经查询当前作业队列中已无任务,以文件数据备份数、集群全部节点空闲时间预测值、磁盘负载量三个指标为参数,选择Hadoop集群中其他待执行任务执行,实现集群资源利用效能最优化。
【IPC分类】G06F9/50
【公开号】CN105487930
【申请号】CN201510863483
【发明人】崔桐
【申请人】中国电子科技集团公司第二十八研究所
【公开日】2016年4月13日
【申请日】2015年12月1日