HDFS balancer详解

前言:Hadoop集群用久了以后,我们会发现一个问题,HDFS节点间的数据不平衡,尤其在新增和下架节点、或者人为干预副本数量的时候,多的达到80-90%,少的不到50%。出现这种状况,我们一般采用HDFS自带的balancer工具来解决,保证每个节点的数据分布均衡。

To start:
     start-balancer.sh    #用默认的10%的阈值启动balancer
     hfs dfs balancer -threshold 3
     start-balancer.sh -threshold 3    #指定3%的阈值启动balancer
To stop:
     stop-balancer.sh

balancer参数配置

hdfs --config /hadoop-client/conf balancer
-threshold  10                    \\集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100
                                  \\Threshold参数为集群是否处于均衡状态设置了一个目标
-policy datanode                  \\默认为datanode,datanode级别的平衡策略
-exclude  -f  /tmp/ip1.txt        \\默认为空,指定该部分ip不参与balance, -f:指定输入为文件
-include  -f  /tmp/ip2.txt        \\默认为空,只允许该部分ip参与balance,-f:指定输入为文件
-idleiterations  5               \\迭代次数,默认为 5

balance策略实现的逻辑流程
Rebalance程序作为一个独立的进程与name node进行分开执行。

  1. Rebalance Server从Name Node中获取每一个Data Node磁盘使用情况。
  2. Rebalance Server计算哪些机器需要移动数据,哪些机器需要接受数据,从Name Node中获取需要移动的数据分布情况。
  3. Rebalance Server计算出从哪些机器中将数据移动到其他机器上。
  4. 移动机器中的block到其他机器中,同时删除自己的block数据。
  5. Rebalance Server获取到本次数据移动的执行结果,并继续移动其他数据,一直到没有数据可以移动或者HDFS集群以及达到了平衡的标准为止,然后向namenode提交更新后的datanodes信息。

默认情况下,datanode不会接受或移出少于10G的block或者少于datanode总容量threshold百分比的block,时间不会超过20分钟。
系统限制了datanode之间数据迁移的带宽最大值 dfs.datanode.balance.bandwidthPerSec

<property>
    <name>dfs.datanode.balance.bandwidthPerSec</name>
    <value>6250000</value>
</property>
<备注:6250000 / (1024 * 1024) = 6M/s>

动态增大带宽

hdfs dfsadmin -fs hdfs://${active-namenode-hostname}:8020 -setBalancerBandwidth 104857600

balancer在如下5种情况下会自动退出:

  1. 集群已达到均衡状态;
  2. 没有block能被移动;
  3. 连续5次迭代移动没有任何一个block被移动;
  4. 当与namenode交互式出现了IOException;
  5. 另一个balancer在运行中。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HDFS入门 hadoop架构 Hadoop 1.0中的资源管理方案 Hadoop 1.0指的是版本为Apache...
    依天立业阅读 4,857评论 0 1
  • HDFS的设计目标 通过上一篇文章的介绍我们已经了解到HDFS到底是怎样的东西,以及它是怎样通过多副本机制来提供高...
    陌上疏影凉阅读 5,299评论 0 3
  • Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS...
    pcqlegend阅读 5,707评论 0 0
  • 前面某篇文章已经说过,HDFS容易发生数据不平衡的问题。这其中包括各个DataNode之间存储的数据量差异,以及一...
    LittleMagic阅读 10,389评论 0 6
  • 作者原创!禁止转载!禁止剽窃!请互相尊重! 皆以先定为之法则。 为了获取所需实情,该如何确定采用哪种方法呢?前文说...
    因色而魔阅读 4,312评论 0 4