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进程出现:
上述命令设置了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界面上进行配置修改,如下图:
网络带宽
在做均衡的时候,会对网络带宽有影响,可在下面的配置项中对各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> |