发明名称 一种HDFS运行时数据块平衡方法
摘要 本发明公开了一种HDFS运行时数据块平衡方法,该方法首先对节点本地任务列表进行预处理,为每一个节点划分出完成本地任务和非完全本地任务,以提供启动HDFS数据块平衡判断的依据。接着对各个节点的运行速率就行评估和任务请求预测。完成以上步骤之后对各个节点的分配过程进行设计和实现。之后选择合适的节点间进行数据块的移动,从而数据块的分布就可以匹配预测的节点任务请求序列,最终达到数据块平衡的目的。本发明提出基于运行时数据块移动HDFS平衡策略,通过预测节点任务请求提前判断可能出现的非本地map任务执行,并在相应的节点间移动合适的数据块,使得节点发出实际任务请求时候能够得到本地map任务的分配响应,从而提高Map阶段的完成效率。
申请公布号 CN102937918B 申请公布日期 2016.03.30
申请号 CN201210393176.9 申请日期 2012.10.16
申请人 西安交通大学 发明人 曹海军;伍卫国;董小社;樊源泉;魏伟;朱霍
分类号 G06F9/50(2006.01)I;G06F17/30(2006.01)I 主分类号 G06F9/50(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 徐文权
主权项 一种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),采用COST<sub>i</sub>/NUM<sub>i</sub>来表示各个节点的数据处理速率,即节点处理单个任务的平均耗时;其中,NUM<sub>i</sub>为某一时刻节点i已完成的本地Map任务数,COST<sub>i</sub>为处理这些本地任务所花费的总耗时;3.2系统任务请求序列的预测:系统任务请求序列即从当前时刻开始到作业完成时为止,各个从节点向主节点申请任务执行的时刻序列;在T<sub>0</sub>时刻,节点i正处理任务的进度为P<sub>i</sub>,通过前面速率评估公式得到的节点处理单个数据块平均耗时为T<sub>i</sub>,则该节点的第k次任务请求时间点t<sub>ik</sub>为T<sub>0</sub>+(1‑P<sub>i</sub>)×T<sub>i</sub>+(k‑1)×T<sub>i</sub> k≥1;其中k表示从当前时刻算起该节点第k次任务请求;获取各个节点的任务请求序列后,采用如下方式确定系统任务请求序列:记系统剩余任务数为m,系统中节点数为n<sub>1</sub>,对每个节点i,取其从当前时刻算起m次任务请求的时间点,记为{t<sub>i1</sub>,t<sub>i2</sub>,…t<sub>im</sub>},n<sub>1</sub>个节点将构成n<sub>1</sub>×m个时间点{t<sub>11</sub>,t<sub>12</sub>,…t<sub>1m</sub>,t<sub>21</sub>,t<sub>22</sub>,…t<sub>2m</sub>,…,t<sub>n1</sub>,t<sub>n2</sub>,…t<sub>nm</sub>};将所有时间点按升序排列,取前m个,则可得到从当前时刻开始对系统中剩余m个任务的请求序列R<sub>m</sub>,其中R<sub>m</sub>(j)=t<sub>ik</sub>表明系统中第j个任务请求将由节点i在t<sub>ik</sub>时刻发出,且该请求是节点i的第k个请求;4)节点任务的分配分析与实现:在步骤3)预测的节点请求序列下提前确定各个节点的任务分配情况;5)数据块移动节点对的选择:从任务请求序列中获取发出请求的节点,接着从该节点的本地任务列表中获取任务,如果任务为空,则认定该节点是待平衡节点,将其加入到待平衡节点列表中;数据块移动节点对选择过程的第一步是遍历allocate数组,构建映射表Map&lt;Node,List&lt;Task&gt;&gt;,记录所有数据块源节点上的所有未分配任务;6)节点间数据块的移动确定好待平衡节点和数据块源节点后便可进行实际的数据块移动;由于数据块移动与节点任务执行相互独立且考虑到可能有多个数据块需要移动,为提高效率以及简化编程实现,采用JAVA线程池技术实现整个数据块移动。
地址 710049 陕西省西安市咸宁西路28号