HDFS均衡操作分析

  • hadoop默认的复本布局策略
    在发起请求的客户端存放一个复本,如果这个客户端在集群以外,那就选择一个不是太忙,存储不是太满的节点来存放,第二个复本放在与第一个复本相同的机架但是不同节点上,第三个放在与第二个和第一个复本不同的机架上,原则是尽量避免在相同的机架上放太多的复本。
  • HDFS数据块分布不均衡的原因
    1、异构机器:磁盘容量不一样,可能存在部分datanode磁盘使用率高,而其他较低
    2、新增机器:新增机器后,只有新写的数据可能到新的机器中,老数据不会自动转移
    3、固定的DataNode上上传数据:HDFS上传策略中,如果上传机器为datanode,则默认的第一个备份放在本机上
  • HDFS的balancer原理
    balancer程序是Hadoop的守护进程,它能将文件块从高负载的DataNode转移到低使用率的DataNode上,以实现文件块的重新分布,使集群达到相对平衡,即每个DataNode的使用率(该节点已使用的空间和空间容量之间的百分比值)和集群的使用率(集群中已使用的空间和集群的空间容量之间的百分比值)非常接近,差距不超过均衡时给定的阈值。
    其用法如下:hadoop balancer -threshold ,参数threshold表示均衡阀值,即每个Datanode中空间使用率与HDFS集群总的空间使用率的差距百分比,默认值为10,取值范围在1到100之间。阀值设置的越小,那么HDFS各个Datanode的使用率越接近,整个集群也更加的平衡,但会需要消耗更多的时间和资源来达到该平衡状态。如果阀值设置的过小,那么对于操作非常频繁的HDFS集群,有可能永远也不会达到该阀值所指定的平衡状态。阀值设置的越大,那么HDFS各个Datanode的使用率差距越大,但是会较容易达到。
    一个块是否可以被移动,要满足三个条件:
    (1)正在被移动或者已经被移动的块,不会重复移动;
    (2)一个块如果在源节点和目标节点上都有其副本,则此块不会被移动;
    (3)移动不会减少一个块所在的机架的数目;
    因此,均衡操作并不能使得HDFS达到真正意义上的均衡,它只能是尽量的减少不均衡。
    过载节点:存储使用率大于“平均存储使用率+允许偏差”的节点
    负载节点:存储使用率小于“平均存储使用率-允许偏差”的节点
    存储使用率:表示一个 数据节点上已用空间占可用空间的百分比
    可用空间:分配给HDFS可用的空间,并非是节点所在机器的全部磁盘空间
    均衡操作的逻辑流程如下图所示:
    1
    Step1:Rebalancing Server从NameNode中获取所有的DataNode情况,即每一个DataNode磁盘使用情况;
    Step2: Rebalancing Server计算哪些DataNode节点需要将数据移动,哪些DataNode节点可以接受移动的块数据,并且从NameNode中获取需要移动的数据分布情况;
    Step3: Rebalancing Server计算出来可以将哪一台DataNode节点的block移动到另一台机器中去;
    Step4、5、6:需要移动block的DataNode节点将数据移动到目标DataNode节点上去,同时删除自己节点上的block数据;
    Step7: Rebalancing Server获取到本次数据移动的执行结果,并继续执行这个过程,一直到没有数据可以移动或者HDFS集群以及达到了平衡的标准为止
    step2中Rebalancing Server将根据集群平均存储使用率和均衡阈值把节点分为四类,以确定哪些DataNode节点需要将数据移动,哪些DataNode节点可以接受移动的块数据:
    (1)over类:即所有的过载节点
    (2)above类:即存储使用率小于“平均存储使用率+允许偏差”且大于平均存储使用率的所有节点
    (3)below类:即存储使用率大于“平均存储使用率-允许偏差”且小于平均存储使用率的所有节点
    (4)under类:即所有的负载节点
    在移动块的时候,将over类和above类中的块向below类和under类移动,直到均衡状态或者达到均衡退出的条件为止。
    Step3中Rebalancing Server将Source DataNode与Destination DataNode进行配对,以确定将哪一台DataNode节点的block移动到另一台机器中。对于负载节点,根据条件优先级选取作为其source,条件优先级自上而下递减:
    (1)同一机架上的过载节点;
    (2)同一机架上的高于平均使用率的节点;
    (3)其他机架上的过载节点;
    (4)其他机架上的高于平均使用率的节点。
    对于过载节点,根据条件优先级选取作为其destination,条件优先级自上而下递减:
    (1)同一机架上的负载节点;
    (2)同一机架上的低于平均使用率的节点;
    (3)其他机架上的负载节点;
    (4)其他机架上的低于平均使用率的节点。
    Source DataNode与Destination DataNode并非一一对应,一个Source DataNode可与多个Destination DataNode配对,一个Destination DataNode亦可与多个Source DataNode配对。
    balance工具的运行过程中,迭代地将文件块从高使用率的datanode移动到低使用率的datanode上,每一个迭代过程中移动的数据量不超过下面两个值的较小者:10G或者指定阀值*容量,且每次迭代不超过20分钟。每次迭代结束后,balance工具将更新该datanode的文件块分布情况。
  • HDFS均衡操作的退出
    (1)集群已经达到均衡状态;
    (2)没有块可以再被移动;
    (3)连续五次迭代操作时没有块移动;
    (4)和NameNode通信时出现IOException;
    (5)另外一个均衡操作启动。
  • 影响hadoop balance工具的几个参数
    (1)dfs.balance.bandwidthPerSec:默认设置为1048576(1M/S),用于设置balance工具运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢,设置该参数需要修改hdfs-site.xml文件:
<property> 
<name>dfs.balance.bandwidthPerSec</name> 
<value>20971520</value> 
<description>  Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description> 
</property>

(2)threshold:均衡阀值,即每个Datanode中空间使用率与HDFS集群总的空间使用率的差距百分比,默认值为10,取值范围在1到100之间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值