基于hdfs的迭代式回溯算法的负载均衡与计算本地化方法
【专利摘要】本发明涉及基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,包括:S1:Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态;S2:Planner从名称节点上读取表的所有数据包的分布信息;S3:通过Planner读取的所有数据分析引擎系统中全部存活节点的IP地址和负载状态以及从名称节点上读取表的所有数据包的分布信息利用迭代式回溯算法实现负载均衡。本发明通过产生的Planner在尽力保证计算本地化的基础上,能够快速、高效的实现负载均衡。
【专利说明】基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法
【技术领域】
[0001]本发明涉及计算机分布式数据库【技术领域】,尤其涉及基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法。
【背景技术】
[0002]目前,大部分数据分析引擎是通过搬动HDFS文件来实现负载均衡,即改变HDFS文件的物理位置,例如,从Data Node A (数据节点A)搬到Data Node B (数据节点B),本发明人还没有发现在数据运行时实现负载均衡方面的相关研究。Map Reduce模型的不足是分配任务方式存在一些不必要的远程读取,影响查询或者存储数据的性能。
【发明内容】
[0003]本发明所要解决的技术问题是如何将大表计算发送到数据存储的节点去执行,尽量避免数据通过网络传输到其它节点去计算,节约带宽占用的关键问题。
[0004]为此目的,本发明提出了基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,提高系统的计算和查询速度。具体包括以下步骤:
[0005]SI =Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态;
[0006]S2 =Planner从名称节点上读取表的所有数据包的分布信息;
[0007]S3:通过Planner读取的数据分析引擎系统中全部存活节点的IP地址和负载状态以及从所述名称节点上读取表的所有数据包的分布信息利用迭代式回溯算法实现负载均衡。
[0008]进一步地,所述步骤SI还包括:Planner将全部存活节点的负载状态换算为相对应大小的数据包。
[0009]进一步地,所述步骤SI还包括:内存空间量最大的节点不需要进行换算为相对应大小的数据包。
[0010]具体地,所述Planner将全部存活节点的负载状态换算为相对应大小的数据包的具体过程为:找到空闲内存量最大的节点,将其空闲内存值记SMfflax;以及分别计算其它节点的数据包的大小,等于Mmax-Mfree其中,Mf_为当前机器的空闲内存量。
[0011]进一步地,所述步骤S2还包括:如果副本所在的节点地址列表为空,则该数据包的副本所在的机器上没有运行数据分析引擎,通过远程读取,将副本地址设置成所有存活的数据分析引擎的地址;如果副本所在的节点地址列表不为空,则不添加数据分析引擎地址到地址列表中。
[0012]进一步地,所述步骤S3还包括:
[0013]S31 =Planner将所有的数据包分成N组,每组M个数据包;
[0014]S32:将可能最优解初始化为空,评价值设为-1 ;
[0015]S33:从第一组开始,每向前搜索一步,便用剪枝函数判断该条分支是否有可能产生更优的解;
[0016]S34:如果该分支不能产生更优解则剪掉该分支,后退一步,用剪枝函数寻找到可能产生更优解的其它分支,继续搜索;
[0017]S35:搜索到此组数据包队列的末尾,产生新的解;
[0018]S36:利用评价函数A计算新解的评价值;
[0019]S37:如果可能最优解的评价值为-1,则将所述新产生的解保存为可能最优解;如果评价值小于可能最优解,则判定新产生的解更好,则将所述新产生的解保存为可能最优解;如果评价值大于可能最优解,则丢弃掉。
[0020]S38:Planner根据所有的数据包的分配结果和当前组将要分配的数据包的数据量进行计算的,其中,Planner使用S31-S37上述这种方法可以使之前分配的信息对后续数据包的分配产生影响,且分配方式能让每组数据包的分配不会彼此独立,使得分配的数据量更接近均衡。
[0021]进一步地,所述步骤S37还包括:如果评价值大于可能最优解,则丢弃掉,继续搜索其它分支,直到搜索组的搜索结束,其中,保存的可能最优解是所有产生的可能解中最优的解。
[0022]具体地,所述负载状态包括CPU使用情况与内存使用情况。
[0023]具体地,所述读取表的所有数据包的分布信息包括:数据包的大小和副本所在的节点地址。
[0024]本发明公开了基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,通过Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态;Planner从名称节点上读取表的所有数据包的分布信息;通过Planner读取的所有数据分析引擎系统中全部存活节点的IP地址和负载状态以及从名称节点上读取表的所有数据包的分布信息利用迭代式回溯算法实现负载均衡。即产生的Planner在尽力保证计算本地化的基础上,能够快速、高效的实现负载均衡。
【专利附图】
【附图说明】
[0025]通过参考附图会更加清楚的理解本发明的特征和优点,附图是示意性的而不应理解为对本发明进行任何限制,在附图中:
[0026]图1示出了本发明实施例中的基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法的步骤流程图。
【具体实施方式】
[0027]下面将结合附图对本发明的实施例进行详细描述。
[0028]计算本地化是将计算发到数据存储的节点去执行,尽量避免数据通过网络传输到其它节点去计算,节约带宽的占用。本发明数据分析引擎中的Planner,即执行计划产生器根据数据包的分析信息以及各个节点的负载状况,选择在哪些节点进行扫描,以及扫描哪些数据包。
[0029]为了更好的理解与应用本发明提出的基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,以如下附图示例进行详细说明。
[0030]如图1所示,本发明提供了基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,具体包括以下步骤:
[0031]步骤SI =Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态。其中,负载状态包括CPU、内存的使用情况。
[0032]具体地,Planner将全部存活节点的负载状态换算成相应大小的数据包。其中,内存空闲量最大的节点不需要进行换算成相应大小的数据包,对于其他节点预先分配一个数据包,但是数据包的大小不相同,且计算数据包大小的规则为:首先找到空闲内存量最大的节点,将其空闲内存值记为Mmax ;以及分别计算其它节点的数据包的大小,等于Mmax-Mfree其中,Mf_为当前机器的空闲内存量。因此,Planner在后续分配数据包时,会给负载重的节点减少分配任务,给负载轻的节点增多分配任务。
[0033]步骤S2:Planner从Name Node (名称节点)上读取表的所有数据包的分布信息。其中,包括:数据包的大小,副本所在的节点地址,通常HDFS的备份因子是3,所以通常每个数据包都有三个副本。
[0034]具体地,Planner发现没有运行在数据分析引擎的节点地址,会将其删除。其中,某些Data Node (数据节点)上没有安装数据分析引擎或者数据分析引擎崩溃的情况,也会执行上述操作。
[0035]进一步地,如果副本所在的节点地址列表是空的,则该数据包的副本所在的机器上没有运行数据分析引擎,则只能通过远程读取,即只能将数据通过网络发送到计算所在的节点上,将副本地址设置成所有存活的数据分析引擎的地址;如果副本所在的节点地址列表不是空的,则不会添加其它的数据分析引擎地址到地址列表里。上述操作在后续做负载均衡时,选取的执行计算节点,也是数据存储的节点,避免了执行计算的节点通过网络从其它节点远程读取数据。
[0036]更进一步地,Planner将所有需要远程读取的数据包放在数据包队列的末尾,方便在后面分组的时候,将远程读取的数据包分给负载轻的节点,比如那些没有存储数据包,并且安装有数据分析引擎的节点。如果所有的Data Node上都安装有数据分析引擎,则不会有远程读取的数据包。
[0037]步骤S3:通过Planner读取的所有数据分析引擎系统中全部存活节点的IP地址和负载状态以及从名称节点上读取表的所有数据包的分布信息利用迭代式回溯算法实现负载均衡。
[0038]具体地,如果Planner直接通过回溯算法来执行,能得到最优的结果,但是时间的花费成本非常大,甚至超过查询语句的执行时间;如果Planner用贪心算法来执行,得到的结果质量较差,导致分配任务时产生倾斜性,任务分配不均匀严重。故本发明提出的Planner通过迭代式回溯算法来执行实现负载均衡。
[0039]进一步地,在本发明中利用迭代式回溯算法使用到的参数及函数包括:数据包量的平均值、可能最优解、评价函数A、评价函数B以及剪枝函数。
[0040]具体地,在本发明中利用迭代式回溯算法使用到的参数为:数据包量的平均值为平均每台机器应该处理的数据包的数据量。其中,所有数据包的大小的总和,包括通过负载状态换算出来的数据包,再除以机器的数量。单位为MB。例如:有个5个数据包,大小分别为800MB,600MB,700MB,850MB,400MB,集群共有4台机器,且内存空闲量一样,即(800+600+700+850+400) /4,则数据包均值为837MB,取整,省略小数;可能最优解用于暂时存放已经产生的解中评价值最低的一个。如果后续产生了评价更低的解,则用新的解覆盖上述解,用新的解作为可能最优解,直到遍历所有的解,将这个可能最优解作为最终结果进行返回。
[0041]具体地,在本发明中利用迭代式回溯算法使用到的函数为:评价函数A用于评价新产生的解,值越低越好。本发明选择采用的是计算标准方差的计算方法,数据倾斜大的解,标准方差会很大,数据分布比较均匀的解,标准方差会比较小。Planner选择利用数据包量的平均值计算标准方法。本发明的Planner是根据前面几组数据包的分配结果和当前组将要分配的数据包的数据量来进行计算的,Planner使用上述这种方法可以使之前分配的信息对后续数据包的分配产生影响,且上述分配方式能让每组数据包的分配不会彼此独立,使得分配的数据量更接近均衡;评价函数B用于评价中间解。其中,评价值越低越好,本发明的Planner计算分配数据包的量高于数据包量的平均值的节点的标准方差,且进一步地,剪枝函数会使用评价函数B,本发明只计算超过数据包量的平均值的节点,是因为在后面尝试分配数据包时,大于均值的节点会使评价值越来越大,且为评价值的下限,即使出现小于均值的节点使评价值越来越小,但也不会小于上述的下限;剪枝函数为在产生解的过程中,提前去掉不可能的解。其中,如果中间解的评价值大于可能最优解的评价值,则该分支不可能产生更优的解,所以剪掉该分支,不再继续向下搜索;如果可能最优解的评价值为-1,则说明还没有产生可能最优解,该分支不能被剪掉,这种操作就保证了不管解的评价值有多不理想,都会至少产生一个解。
[0042]更进一步地,本发明提出的Planner通过迭代式回溯算法来执行实现负载均衡操作步骤如下:
[0043]步骤S31 =Planner将所有的数据包分成N组,每组M个数据包,其中,需要远程读取的数据包放在最后面的几个组里。
[0044]步骤S32:将可能最优解初始化为空,其评价值设为-1。
[0045]步骤S33:从第一组开始,每向前搜索一步,便用剪枝函数判断该条分支是否有可能产生更优的解。
[0046]步骤S34:如果该分支不能产生更优解则剪掉该分支,后退一步,用剪枝函数寻找到可能产生更优解的其它分支,继续搜索。其中,对于不是必须要远程读取的数据包,如步骤2提供的节点地址都是数据包实际存储的地址,这就保证该算法在搜索解的过程中,选取的下发计算任务的节点地址,都是数据包实际存储的地址,且无论前进还是后退,都会用剪枝函数,这样避免搜索其它分支。
[0047]步骤S35:搜索到此组数据包队列的末尾,产生新的解。
[0048]步骤S36:利用评价函数A计算新解的评价值。
[0049]步骤S37:如果可能最优解的评价值为-1,则将新产生的解保存为可能最优解;如果评价值小于可能最优解,则判定新产生的解更好,则将新产生的解保存为可能最优解;如果大于可能最优解,则丢弃掉。
[0050]步骤S38 =Planner根据所有的数据包的分配结果和当前组将要分配的数据包的数据量进行计算的,其中,Planner使用S31-S37上述这种方法可以使之前分配的信息对后续数据包的分配产生影响,且分配方式能让每组数据包的分配不会彼此独立,使得分配的数据量更接近均衡。
[0051]进一步地,步骤S37还包括:如果评价值大于可能最优解,则丢弃掉,然后后退一步,继续搜索其它分支,直到此组的搜索结束之后,之前保存的可能最优解是所有产生的可能解中最优的解。
[0052]更进一步地,在搜索解的过程中,使用多线程并发的方式,这样可以充分利用系统资源,减少总的运算时间,读取当前系统CPU的核心数,为K个,将每组数据包的解空间,拆解成K个彼此独立的分支,每个线程处理一个分支,每个分支都会产生一个可能最优解,即从K个可能最优解选取评价值最小的,作为可能最优解。其中,拆解方法为:假定当前这组数据包的副本数是-FpFhFf.,其中,F1表示第一个数据包的备份数量,F2表示第二个数据包的备份数量,如果F1小于K*2,则取下一个,直到找到i满足= K*2并且¥&*&*...Fi+1>K*2,则按照F1, F2, F^Fi来拆分解。例如:假设这个表有5个数据包,i的最大值是数据包的个数-1,即i的最大值是5-1,通常HDFS的备份因子是3,所以F1 =F2 = F3 = F4 = F5 = 3,假设当前系统CPU核心数是5,即K = 5,假定集群只有三台机器,O表不O号机器,I表不I号机器,2表不2号机器,这个五个数据包在这三台机器上都有一个副本,解空间如下:
[0053]O, I, 2
[0054]O, I, 2
[0055]O, I, 2
[0056]O, I, 2
[0057]O, I, 2
[0058]其中,F3F2〈= K*2<F1*F2*F3,即 3*3〈5*2〈3*3*3,所以 i = 2,共启动 9 个线程,第一个线程只处理0,O这个分支,即第一个线程的前面两个数据包必须是O号节点和O号节点上处理,后面三个数据包可以根据任务分配的平衡情况,考虑在O号、I号、2号节点上处理;第二个线程处理0,I这个分支,即第二个线程的前面两个数据包必须是O号节点和I号节点上处理,后面三个数据包可以根据任务分配的平衡情况,考虑在O号、I号、2号节点上处理;第三个线程处理0,2这个分支;第四个线程处理I,O这个分支;第五个线程处理1,I这个分支;第六个线程处理1,2这个分支;第七个处理2,O ;第八个处理2,I ;第九个处理2,2。这个算法的优势为当数据量比较大,数据包比较多时,能够快速的实现负载均衡,同时,还可以根据机器的性能,调整每组数据包的个数M,M越大,得到的解可能会越好。
[0059]本发明公开了基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,通过Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态;Planner从名称节点上读取表的所有数据包的分布信息;通过Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态,从名称节点上读取表的所有数据包的分布信息,利用迭代式回溯算法实现负载均衡。即产生的Planner在尽力保证计算本地化的基础上,能够快速、高效的实现负载均衡。
[0060]虽然结合附图描述了本发明的实施方式,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
【权利要求】
1.基于HDFS的迭代式回溯算法的负载均衡与计算本地化方法,其特征在于,包括具体以下步骤: 51=Planner读取所有数据分析引擎系统中全部存活节点的IP地址和负载状态; 52=Planner从名称节点上读取表的所有数据包的分布信息; 53:通过Planner读取的数据分析引擎系统中全部存活节点的IP地址和负载状态以及从所述名称节点上读取表的所有数据包的分布信息利用迭代式回溯算法实现负载均衡。
2.如权利要求1所述的方法,其特征在于,所述步骤SI还包括:Planner将全部存活节点的负载状态换算为相对应大小的数据包。
3.如权利要求1所述的方法,其特征在于,所述步骤SI还包括:内存空间量最大的节点不需要进行换算为相对应大小的数据包。
4.如权利要求2所述的方法,其特征在于,所述Planner将全部存活节点的负载状态换算为相对应大小的数据包的具体过程为:找到空闲内存量最大的节点,将其空闲内存值记为Mmax ;以及分别计算其它节点的数据包的大小,等于Iax-Mtoe其中,Mf_为当前机器的空闲内存量。
5.如权利要求1所述的方法,其特征在于,所述步骤S2还包括:如果副本所在的节点地址列表为空,则该数据包的副本所在的机器上没有运行数据分析引擎,通过远程读取,将副本地址设置成所有存活的数据分析引擎的地址;如果副本所在的节点地址列表不为空,则不添加数据分析引擎地址到地址列表中。
6.如权利要求1所述的方法,其特征在于,所述步骤S3还包括: 531:Planner将所有的数据包分成N组,每组M个数据包; 532:将可能最优解初始化为空,评价值设为-1 ; 533:从第一组开始,每向前搜索一步,便用剪枝函数判断该条分支是否有可能产生更优的解; S34:如果该分支不能产生更优解则剪掉该分支,后退一步,用剪枝函数寻找到可能产生更优解的其它分支,继续搜索; 535:搜索到此组数据包队列的末尾,产生新的解; 536:利用评价函数A计算新解的评价值; 537:如果可能最优解的评价值为-1,则将所述新产生的解保存为可能最优解;如果评价值小于可能最优解,则判定新产生的解更好,则将所述新产生的解保存为可能最优解;如果评价值大于可能最优解,则丢弃掉。 S38:Planner根据所有的数据包的分配结果和当前组将要分配的数据包的数据量进行计算的,其中,Planner使用S31-S37上述这种方法可以使之前分配的信息对后续数据包的分配产生影响,且分配方式能让每组数据包的分配不会彼此独立,使得分配的数据量更接近均衡。
7.如权利要求6所述的方法,其特征在于,所述步骤S37还包括:如果评价值大于可能最优解,则丢弃掉,继续搜索其它分支,直到搜索组的搜索结束,其中,保存的可能最优解是所有产生的可能解中最优的解。
8.如权利要求1所述的方法,其特征在于,所述负载状态包括CPU使用情况与内存使用情况。
9.如权利要求1所述的方法,其特征在于,所述读取表的所有数据包的分布信息包括:数据包的大小和副本所在的节点地址。
【文档编号】H04L29/08GK104331439SQ201410575719
【公开日】2015年2月4日 申请日期:2014年10月24日 优先权日:2014年10月24日
【发明者】刘垚, 孔令雷, 王小玉, 霍卫平, 金正皓 申请人:北京东方国信科技股份有限公司