一种HDFS运行时数据块平衡方法技术

技术编号:8347867 阅读:378 留言:0更新日期:2013-02-21 01:13
本发明专利技术公开了一种HDFS运行时数据块平衡方法,该方法首先对节点本地任务列表进行预处理,为每一个节点划分出完成本地任务和非完全本地任务,以提供启动HDFS数据块平衡判断的依据。接着对各个节点的运行速率就行评估和任务请求预测。完成以上步骤之后对各个节点的分配过程进行设计和实现。之后选择合适的节点间进行数据块的移动,从而数据块的分布就可以匹配预测的节点任务请求序列,最终达到数据块平衡的目的。本发明专利技术提出基于运行时数据块移动HDFS平衡策略,通过预测节点任务请求提前判断可能出现的非本地map任务执行,并在相应的节点间移动合适的数据块,使得节点发出实际任务请求时候能够得到本地map任务的分配响应,从而提高Map阶段的完成效率。

【技术实现步骤摘要】
一种HDFS运行时数据块平衡方法
本专利技术属于计算机
,涉及一种数据块平衡方法,尤其是一种云计算环境下HDFS (Hadoop Distributed File System)在运行过程中数据块平衡方法。
技术介绍
Hadoop是由Apache开源组织开发的一个高可靠性和高可扩展性的存储与分布式并行计算平台,最早是作为开源搜索引擎项目Nutch的基础平台而开发的,之后从Nutch项目中独立出来,成为典型的开源云计算平台之一。Hadoop核心实现了按块存储的分布式文件系统(Hadoop Distributed File System,HDFS)以及用于分布式计算的MapReduce计算模型。HDFS为Hadoop集群提供由众多节点组成的存储系统,在存储大规模数据文件时,会将文件切分成多个相同大小的数据块(最后一份数据块例外),分布在集群中所有节点上。 为了保证可靠性,HDFS会依据配置为每一份数据块创建多个副本,并放置在集群的不同节点上。HDFS为上层MapReduce计算引擎提供数据存储服务。Hadoop MapReduce将应用划分成许多小任务并行执行,每个小任务就对计算节点本地存储的数据块进行处理。HDFS文件系统采用分块机制分布式存储数据集,并通过数据块冗余策略来提高系统可靠性,每个数据块在系统中都有多个副本同时存在,这些副本分布在系统中多个机架内的多个节点上,防止因单个节点出现故障造成数据块的丢失。此外,这种分布式冗余机制能保证文件的并发读取,使得HDFS更适合“一次写,多次读”的数据处理模式。为实现这种数据块冗余策略,HDFS文件系统在写入数据时必须保证有多个副本同时写入。HDFS文件系统在写入数据流时需先通过NameNode获取多个节点构成节点管线, 当数据流到达管线中的第一个节点时,该节点存储数据并发送给管线中的第二个节点。同样的,第二个节点存储数据并发送给管线中的第三个节点……以此类推,完成多份副本的写入。HDFS文件系统在放置数据块及其副本时综合考虑以下几点I)当提交数据的节点也是HDFS文件系统中存储数据块的节点时,该节点上放置一份数据块的备份;2)—个数据块的备份必须分布在多个机架上,避免单个机架故障导致整个数据不可用;3)与提交数据节点处于同一个机架内的其他节点上也必须有数据块的备份,这样可以尽量减少机架间的通信和IO开销;4)在满足前面条件的前提下兼顾考虑节点存储空间的使用率,尽可能保证各个节点存储使用率平衡。Hadoop Map阶段是整个MapReduce作业执行的第一阶段,主要完成将外部输入数据转化为〈Key,Value)形式的中间数据,提供给后续Reduce阶段作为输入数据。分布式并行处理环境下,Hadoop Map阶段使用分布式文件系统HDFS作为输入数据源,并在“移动计算比移动数据更经济”的指导原则下,将用户在提交作业时指定的Map处理过程分配到各个HDFS数据块存储节点上执行。当某个节点被分配的处理过程所需的输入数据刚好在该节点上存储时,称该处理过程满足数据本地性。Hadoop MapReduce通过节点任务请求分配机制避免了多个数据块副本重复处理的问题。但从Hadoop Map阶段执行过程的分析可知,Map任务输入数据的本地性对Map任务的执行速率也会产生很大影响。当Map输入数据与Map任务执行在同一个节点上时将节省数据块网络传输开销,提高Map任务执行速率。在现有Hadoop体系结构中,HDFS数据块副本的分布状态通过Hadoop任务调度器直接影响Map任务输入数据的本地性。因此,现有的HDFS数据块放置策略虽然能保证各个节点间的数据块数量大致平衡,但由于某些数据块副本的分布不合理,导致某些节点“窃取”其他节点的本地Map任务后,其他节点由于本地Map任务被分配同样需要“任务窃取”,这种“任务分配偏移”现象进一步加大了 Map阶段非本地数据的传输量,给整个网络带来巨大的传输压力,影响整个阶段的运行效率。此外,当节点间数据块数目平衡时,节点任务处理速率不同也会导致出现较大程度的非本地化任务处理。
技术实现思路
本专利技术的目的在于解决由于HDFS数据块分布不均匀而导致的Map阶段map任务数据本地性较低的问题,提供一种HDFS运行时数据块平衡方法,该方法提出基于运行时数据块移动HDFS平衡策略,通过预测节点任务请求提前判断可能出现的非本地map任务执行,并在相应的节点间移动合适的数据块,使得节点发出实际任务请求时候能够得到本地 map任务的分配响应,从而提高Map阶段的完成效率。本专利技术的目的是通过以下技术方案来解决的这种HDFS运行时数据块平衡方法,包括以下步骤I)节点本地任务列表预处理I. I提出完全本地任务和非完全本地任务当HDFS的各个数据块存在多个副本的时候,导致同一个任务会出现在不同节点的本地Map任务列表中,从而某个节点本地任务列表中剩余的map任务数η,意味着该节点能够分配执行的本地任务数是η ;I. 2节点本地任务列表的预处理过程当各个节点依次发出任务请求时,从节点的本地任务列表中获取当前可执行的任务加入到节点的完全本地任务列表中,而本地任务列表中未被分配的任务则加入到非完全本地任务列表中;2)节点运行时信息统计通过设计NodeEvaluateInfo类来实现在该类中统计节点已经处理的数据块总数sum、节点已处理数据块总耗时cost和作业的执行进度tip,知道以上信息后计算节点平均块处理时间cost/sum、节点当前运行任务剩余时间(1-tip) / (cost/sum);3)节点速率评估与任务请求序列预测3. I节点速率的评估由步骤2),采用COSIVNUMi来表示各个节点的数据处理速率,即节点处理单个任务的平均耗时;其中,NUMi为某一时刻节点i已完成的本地map任务数,COSTi为处理这些本地任务所花费的总耗时;3. 2系统任务请求序列的预测系统任务请求序列即从当前时刻开始到作业完成时为止,各个从节点向主节点申请任务执行的时刻序列;在!'(|时刻,节点i正处理任务的进度为Pi,通过前面速率评估公式得到的节点处理单个数据块平均耗时为Ti,则该节点的第K 次任务请求时间点tik为T0+(I-Pi) XTi+(k-l) XTi k 彡 I ;其中k表示从当前时刻算起该节点第k次任务请求;获取各个节点的任务请求序列后,采用如下方式确定系统任务请求序列记系统剩余任务数为m,系统中节点数为n,对每个节点i,取其从当前时刻算起m次任务请求的时间点,记为{tn, ti2,…tim},n个节点将构成nXm个时间点{t11,t12,· · · tim t21,t22,··· t2m,···,tnl,tn2, -tj ;将所有时间点按升序排列,取前m个,则可得到从当前时刻开始对系统中剩余m个任务的请求序列Rm. Rm(J-)^ik 即表明系统中第j个任务请求将由节点i在tik时刻发出,且该请求是节点i的第k个请求;4)节点任务的分配分析与实现在步骤3)预测的节点请求序列下提前确定各个节点的任务分配情况;5)数据块移动节点对的选择从任务请求序列中获取发出请求的节点,接着从该节点的本地任务列表中获取任务,如果任务为空,则认定该节点是待平衡节点,将其加入本文档来自技高网
...

【技术保护点】
一种HDFS运行时数据块平衡方法,其特征在于,包括以下步骤:1)节点本地任务列表预处理1.1提出完全本地任务和非完全本地任务:当HDFS的各个数据块存在多个副本的时候,导致同一个任务会出现在不同节点的本地Map任务列表中,从而某个节点本地任务列表中剩余的map任务数n,意味着该节点能够分配执行的本地任务数是n;1.2节点本地任务列表的预处理过程:当各个节点依次发出任务请求时,从节点的本地任务列表中获取当前可执行的任务加入到节点的完全本地任务列表中,而本地任务列表中未被分配的任务则加入到非完全本地任务列表中;2)节点运行时信息统计通过设计NodeEvaluateInfo类来实现:在该类中统计节点已经处理的数据块总数sum、节点已处理数据块总耗时cost和作业的执行进度tip,知道以上信息后计算节点平均块处理时间cost/sum、节点当前运行任务剩余时间(1?tip)/(cost/sum);3)节点速率评估与任务请求序列预测3.1节点速率的评估:由步骤2),采用COSTi/NUMi来表示各个节点的数据处理速率,即节点处理单个任务的平均耗时;其中,NUMi为某一时刻节点i已完成的本地map任务数,COSTi为处理这些本地任务所花费的总耗时;3.2系统任务请求序列的预测:系统任务请求序列即从当前时刻开始到作业完成时为止,各个从节点向主节点申请任务执行的时刻序列;在T0时刻,节点i正处理任务的进度为Pi,通过前面速率评估公式得到的节点 处理单个数据块平均耗时为Ti,则该节点的第K次任务请求时间点tik为T0+(1?Pi)×Ti+(k?1)×Ti??k≥1;其中k表示从当前时刻算起该节点第k次任务请求;获取各个节点的任务请求序列后,采用如下方式确定系统任务请求序列:记系统剩余任务数为m,系统中节点数为n,对每个节点i,取其从当前时刻算起m次任务请求的时间点,记为{ti1,ti2,…tim},n个节点将构成n×m个时间点{t11,t12,…t1m,t21,t22,…t2m,…,tn1,tn2,…tnm};将所有时间点按升序排列,取前m个,则可得到从当前时刻开始对系统中剩余m个任务的请求序列Rm.Rm(j)=tik即表明系统中第j个任务请求将由节点i在tik时刻发出,且该请求是节点i的第k个请求;4)节点任务的分配分析与实现:在步骤3)预测的节点请求序列下提前确定各个节点的任务分配情况;5)数据块移动节点对的选择:从任务请求序列中获取发出请求的节点,接着从该节点的本地任务列表中获取任务,如果任务为空,则认定该节点是待平衡节点,将其加入到待平衡节点列表中;数据块移动节点对选择过程的第一步是遍历allocate数组,构建映射表Map>,记录所有数据块源节点上的所有未分配任务;6)节点间数据块的移动确定好待平衡节点和数据块源节点后便可进行实际的数据块移动;由于数据块移动与节点任务执行相互独立且考虑到可能有多个数据块需要移动,为提高效率以及简化编程实现,采用JAVA线程池技术实现整个数据块移动。...

【技术特征摘要】

【专利技术属性】
技术研发人员:曹海军伍卫国董小社樊源泉魏伟朱霍
申请(专利权)人:西安交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1