一种hdfs中面向视频的负载均衡方法

文档序号:8226156阅读:268来源:国知局
一种hdfs中面向视频的负载均衡方法
【技术领域】
[0001]本发明属于分布式系统存储技术领域,具体涉及一种HDFS中面向视频的负载均衡方法。
【背景技术】
[0002]传统的文件存储方式将数据集中存储在单个存储节点上,但单个存储节点的处理能力十分有限,容易形成系统性能瓶颈,系统的可靠性和安全性比较低,无法满足大规模存储应用的需要。
[0003]分布式存储的概念由此提出,这种存储方式将数据分散存储在多个存储节点上,这些存储节点通过计算机网络相互通信,由分布式存储系统进行集中管理并提供简洁的访问接口。分布式存储系统通常为每个文件创建多个副本并将其分散存储,让多个存储节点分担用户的访问请求压力,可以有效地减少响应时间并且具有很好的容错性和可扩展性。
[0004]Hadoop是由Apache Software Fundat1n开发的一个分布式系统基础架构,它实现了一个分布式文件系统(Hadoop Distributed File System,HDFS)。HDFS被设计用来部署在廉价的硬件上,具有很高的容错性,对应用程序的数据提供高传输率并且可以用流的形式来访问文件系统中的数据。
[0005]HDFS处理写文件请求时采取的是随机选取数据节点的策略,对于该文件的每个数据块,该策略在考虑HDFS数据容错性的前提下,从数据节点集群中随机选取一个将该数据块写入。假设集群中各个数据节点的存储容量相同,这种方式在集群中数据节点稳定运行时能够较均衡地将负载分配到各个数据节点上,但由于扩容和数据节点故障等原因,数据节点的增加和删除在集群中是不可避免的,故在集群运行了较长时间后,集群中各个数据节点上的存储容量使用率必定会差别较大,由此产生了负载不均衡的情况。另外,若集群中数据节点的存储容量并不完全相同,随机分配的方式也会造成各个数据节点存储容量使用率的差异。
[0006]针对这种负载不均衡的情况,HDFS提供了一个负载均衡器工具对集群中数据节点的负载进行均衡化操作,将负载较重的数据节点上的数据移动到负载较轻的数据节点上,最终实现集群中所有数据节点的存储容量使用率基本相近。
[0007]HDFS原有负载均衡器作为一个通用的工具,没有考虑以视频作为主要存储对象的场景下的特定负载均衡问题。原有负载均衡器只考虑在保证数据可靠性(如将数据块副本分布在不同机架上)的前提下将数据块尽量均匀地分布在集群中的各个数据节点中,这种负载评估模型将数据的大小作为了评估的唯一标准,这对于视频存储场景来说是不合适的。
[0008]视频存储是具有广泛的应用前景,众多企业存在通过视频等途径拓展业务的需求。研宄视频存储场景下数据节点负载评估的模型和对应的负载均衡方法,可以使存储资源能够得到更有效的利用。
[0009]视频存储场景下,由于视频文件通常具有不同的码率特性(视频流畅播放所需要的最低读取速率),导致读取视频文件时占据相同空间的数据块消耗的数据节点网络带宽资源可能相差十分大,此时集群中的负载是不均衡的。例如对于集群中两个存储空间消耗相同的数据节点,若他们存储的视频文件的码率相差很大,则在客户端读取操作相对均衡地条件下,存储小码率文件的数据节点的带宽消耗就会比存储大码率文件的数据节点的带宽消耗要小得多。

【发明内容】

[0010]针对现有技术所存在的上述技术问题,本发明提供了一种HDFS中面向视频的负载均衡方法,使得分布式存储系统能够更加充分地利用集群中的带宽资源。
[0011]一种HDFS中面向视频的负载均衡方法,包括如下步骤:
[0012](I)HDFS中的数据节点通过计算得到自身的负载信息,主控节点收集各数据节点的负载信息;
[0013]所述的负载信息包括磁盘大小、磁盘使用率、带宽资源总量、静态带宽资源消耗量以及单位静态带宽资源消耗量;
[0014](2)由负载均衡器从主控节点索取所述的负载信息并接收用户输入的操作指令,进而根据操作指令和负载信息建立负载均衡方案;
[0015](3)由调度器根据负载均衡方案控制各数据节点对节点内的数据块进行迀移,以实现负载均衡。
[0016]所述的步骤⑴中数据节点计算得到自身负载信息的具体实现过程如下:
[0017]1.1数据节点拉取自身的数据块报告;
[0018]1.2数据节点对所述的数据块报告进行处理:根据数据块报告中数据块ID从主控节点提取其数据块对应存储文件的文件ID和最近修改时间;数据节点根据文件ID读取对应的文件进而分析其码率;
[0019]1.3数据节点根据码率和最近修改时间通过以下公式计算出自身的静态带宽资源消耗量:数据节点的静态带宽资源消耗量等于数据节点内所有数据块静态带宽资源消耗量的总和,数据块的静态带宽资源消耗量=数据块所对应存储文件的码率*exp((预设的活跃时间周期-文件活跃时间)/活跃时间周期);其中,文件活跃时间=当前时间-最近修改时间;
[0020]1.4数据节点根据自身的静态带宽资源消耗量和带宽资源总量通过以下公式计算出自身的单位静态带宽资源消耗量:单位静态带宽资源消耗量=静态带宽资源消耗量/带宽资源总量。
[0021]所述的步骤(2)中负载均衡器根据操作指令和负载信息建立负载均衡方案的具体实现过程如下:
[0022]2.1通过以下公式计算HDFS的磁盘使用率和单位静态带宽资源消耗量;
[0023]HDFS磁盘使用率=所有数据节点的磁盘使用量之和/所有数据节点的磁盘大小之和;其中,磁盘使用量=磁盘使用率*磁盘大小;
[0024]HDFS单位静态带宽资源消耗量=所有数据节点的静态带宽资源消耗量之和/所有数据节点的带宽资源总量之和;
[0025]2.2对数据节点进行分类:
[0026]磁盘使用率大于等于HDFS磁盘使用率的数据节点,属于高空间消耗节点;
[0027]磁盘使用率小于HDFS磁盘使用率的数据节点,属于低空间消耗节点;
[0028]2.3分别对高空间消耗节点集合和低空间消耗节点集合对应建立二叉排序树A和B ;二叉排序树A的优先级为:先按磁盘使用率从大到小,相同情况下按静态带宽资源消耗量从大到小;二叉排序树B的优先级为:先按磁盘使用率从小到大,相同情况下按静态带宽资源消耗量从小到大;
[0029]分别对高空间消耗节点集合和低空间消耗节点集合对应建立二叉排序树C和D ;二叉排序树C的优先级为:按可移动静态带宽资源消耗量与可移动磁盘使用量的比值从小到大;二叉排序树D的优先级为:按可移动静态带宽资源消耗量与可移动磁盘使用量的比值从小到大;
[0030]二叉排序树A?D中每个节点对应数据节点的负载信息;
[0031]对于高空间消耗节点,可移动静态带宽资源消耗量=静态带宽资源消耗量-HDFS的单位静态带宽资源消耗量*带宽资源总量;
[0032]对于低空间消耗节点,可移动静态带宽资源消耗量=HDFS的单位静态带宽资源消耗量*带宽资源总量-静态带宽资源消耗量;
[0033]所述的可移动磁盘使用量=;
[0034]2.4对二叉排序树A和D进行匹配:
[0035]2.4.1提取二叉排序树A的最小键值节点,判断其磁盘使用率是否大于用户设定的磁盘使用率上界:大于则执行步骤2.4.2,否则整树不匹配;
[0036]2.4.2从二叉排序树D中寻找键值大于等于所述最小键值节点的可移动静态带宽资源消耗量与可移动磁盘使用量的比值的第一个节点,使其与二叉排序树A的最小键值节点匹配;
[0037]2.4.3生成从所述最小键值节点移动数据块至所述第一个节点的迀移任务,该迀移任务包含磁盘使用量的迀移大小和静态带宽资源消耗量的迀移大小;
[0038]所述的磁盘使用量的迀移大小取所述最小键值节点可移动磁盘使用量和所述第一个节点可移动磁盘使用量的较小值;
[0039]所述的静态带宽资源消耗量的迀移大小取所述最小键值节点可移动静态带宽资源消耗量和所述第一个节点可移动静态带宽资源消耗量的较小值;
[0040]2.4.4对所述最小键值节点和第一个节点的信息进行更新,更新后将这两个节点放回原先所处的树中;具体更新包括:
[0041]更新节点的磁盘使用率:
[0042]对于移出数据块的节点,其更新后的磁盘使用率=(更新前的磁盘使用率*磁盘大小-磁盘使用量的迀移大小)/磁盘大小;
[0043]对于移入数据块的节点,其更新后的磁盘使用率=(更新前的磁盘使用率*磁盘大小+磁盘使用量的迀移大小)/磁盘大小;
[0044]更新节点的单位静态带宽资源消耗量:
[0045]对于移出数据块的节点,其更新后的单位静态带宽资源消耗量=(更新前的单位带宽资源静态带宽资源消耗量*带宽资源总量-静态带宽资源消耗量的迀移大小)/磁盘大小;
[0046]对于移入数据块的节点,其更新后的单位静态带宽资源消耗量=(更新前的单位带宽资源静态带宽资源消耗量*带宽资源总量+静态带宽资源消耗量的迀移大小)/磁盘大小;
[0047]2.4.5重新生成二叉排序树A和D,返回执行步骤2.4.1 ;
[0048]2.5对二叉排序树B和C进行匹配:
[0049]2.5.1提取二叉排序树B
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1