rebalance均衡

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

start-balancer.sh #用默认的10%的阈值启动balancer

hdfs dfs balancer -threshold 3

start-balancer.sh -threshold 3 #指定3%的阈值启动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在运行中。


参考

https://www.cnblogs.com/yinzhengjie2020/p/13342039.html
作者:TOTower
链接:https://www.jianshu.com/p/4488a38907a8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


rebalance均衡
https://www.hechunyu.com/archives/1698216379679
作者
chunyu
发布于
2021年06月25日
许可协议