HDFS balancer配置(可通过CM配置)
dfs.datanode.balance.max.concurrent.moves
并行移动的block数量,默认5
dfs.datanode.balance.bandwidthPerSec
Balance工具所占用的带宽,默认1048576(1MB)
dfs.balancer.moverThreads
用于执行block移动的线程池大小,默认1000
dfs.balancer.max-size-to-move
每次balance进行迭代的过程最大移动数据量,默认10737418240(10GB)
dfs.balancer.getBlocks.size
获取block的数量,默认2147483648(2GB)
dfs.balancer.getBlocks.minblock-size
用来平衡的最小block大小,默认10485760(10MB)
dfs.datanode.blockpinning.enabled
hdfs balancer
[-threshold <threshold>]
[-policy <policy>]
[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]
[-include [-f <hosts-file> | <comma-separated list of hosts>]]
[-idleiterations <idleiterations>]
参数说明:
-threshold
某datanode的使用率和整个集群使用率的百分比差值阈值,达到这个阈值就启动hdfs balancer,取值从1到100,不宜太小,因为在平衡过程中也有数据写入,太小无法达到平衡
-policy
分为blockpool和datanode,前者是block pool级别的平衡后者是datanode级别的平衡
-exclude
不为空,则不在这些机器上进行平衡
-include
不为空,则仅在这些机器上进行平衡
-idleiterations 最大迭代次数
1.修改dfs.datanode.max.transfer.threads = 4096 (如果运行hbase的话建议为16384),指定用于在DataNode间传输block数据的最大线程数,老版本的对应参数为dfs.datanode.max.xcievers
2.修改dfs.datanode.balance.bandwidthPerSec = 31457280 ,指定DataNode用于balancer的带宽为30MB,这个示情况而定,如果交换机性能好点的,完全可以设定为50MB,单位是Byte,如果机器的网卡和交换机的带宽有限,可以适当降低该速度,默认是1048576(1MB)
3.修改dfs.datanode.balance.max.concurrent.moves = 50,指定DataNode上同时用于balance待移动block的最大线程个数,这个值默认是5