背景

HDFS数据可能并不总是在DataNode之间均匀分布。一个常见的原因是向现有群集中添加了新的DataNode。HDFS提供了一个Balancer程序,分析block放置信息并且在整个DataNode节点之间平衡数据,直到被视为平衡为止。

所谓的平衡指的是每个DataNode的利用率(节点上已用空间与节点总容量之比)与集群的利用率(集群上已用空间与集群总容量的比)相差不超过给定阈值百分比。 平衡器无法在单个DataNode上的各个卷之间进行平衡。

hdfs如何分块(HDFSBlock负载平衡器Balancer)(1)

平衡前和平衡后对比图

命令行配置和运行

hdfs如何分块(HDFSBlock负载平衡器Balancer)(2)

-threshold 10 //集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100

-policy datanode //平衡策略,默认为datanode, 如果datanode平衡,则集群已平衡。

-exclude -f /tmp/ip1.txt //默认为空,指定该部分ip不参与balance, -f:指定输入为文件

-include -f /tmp/ip2.txt //默认为空,只允许该部分ip参与balance,-f:指定输入为文件

-idleiterations 5 //迭代 5

设置平衡数据传输带宽

命令:hdfs dfsadmin -setBalancerbandwidth newbandwidth

其中newbandwidth是每个DataNode在平衡操作期间可以使用的最大网络带宽量,以每秒字节数为单位。

比如:hdfs dfsadmin -setBalancerBandwidth 104857600

默认运行balancer

命令:hdfs balancer

此时将会以默认参数进行数据块的平衡操作。

修改阈值运行balancer

命令:hdfs balancer -threshold 5

Balancer将以阈值5%运行(默认值10%),这意味着程序将确保每个DataNode上的磁盘使用量与群集中的总体使用量相差不超过5%。例如,如果集群中所有DataNode的总体使用率是集群磁盘总存储容量的40%,则程序将确保每个DataNode的磁盘使用率在该DataNode磁盘存储容量的35%至45%之间。

,