HDFS Balancer HDFS的 Balancer,是为了实现HDFS的负载调整而存在的。它与NameNode节点进行通信,获取各个DataNode节点的负载状况,从而调整DataNode上的块分布。主要的调整其实就是一个操作,将一个数据块从一个服务器搬迁到另一个服务器上,以期各DataNode的使用率趋于平衡。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


1HDFS Balancer使用场景

Balancer使用场景如下:


  • 异构机器:机器的磁盘容量不一样,可能存在部分DataNode磁盘使用较高,而部分较低的情况;


  • 新增机器:新增DataNode机器后,只有新写的数据可能到新的机器中,老数据不会自动迁移,从而造成DataNode数据不平衡;


  • 固定的DataNode节点上传数据:HDFS上传策略中,如果上传的客户端机器与DataNode合设,则默认的第一个备份会放在本机上,造成DataNode存储不平衡。


2HDFS Balancer使用方法

使用HDFS的balancer命令,可以配置一个Threshold来平衡每一个DataNode磁盘利用率。命令如下:


start-balancer.sh -threshold 10.0 //其中,threshold取值为[1.0,100.0]


运行之后,会有Balancer进程出现:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


上述命令设置了Threshold为10.0%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值+Threshold,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。Threshold的值为1.0到100.0之间,不显示的进行参数设置的话,默认是10.0。


范围超出之后,会有异常抛出。


如果参数值设置的越小,花费的时间就越长。使用此命令时,会反复的从磁盘使用率高的节点上,把块转移到磁盘使用率低的磁盘上。


3HDFS Balancer配置项

HDFS Balancer相关的配置项均位于hdfs-site.xml中,可以在manager界面上进行配置修改,如下图:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


网络带宽

在做均衡的时候,会对网络带宽有影响,可在下面的配置项中对各DN均衡操作的带宽做限制,ZDH版本的缺省值为100M/s, 参数重启时生效。


<property>

          <name>dfs.datanode.balance.bandwidthPerSec</name>

          <value>104857600</value>

          <description>

                Specifies the maximum amount of bandwidth that  each datanode can utilize for the balancing purpose in term of the number of  bytes per second.

          </description>

     </property>


并行度

在做均衡的时候,每个DataNode移动块的最大并行数目,缺省的值为5,修改后重启balance即可生效。


<property>

          <name>dfs.balancer.concurrent.moves.num</name>

          <value>5</value>

      <description>

                Specifies the maximum number of blocks that each  datanode can move in parallel for the balancing purpose.

          </description>

</property>