问题背景与现象
当HDFS集群各个DataNode存储的数据不均衡时,需要使用hdfs balance功能,调整相关参数可以提升balance性能。
操作步骤
- 修改如下参数:
- dfs.datanode.balance.bandwidthPerSec =209715200
说明:
- 该参数限定每个DataNode用来平衡数据时,占用带宽的上限;
- 这个参数的调整要看组网情况,如果集群负载较高,可以改为20971520(200MB),如果集群空闲,可以改为1073741824 (1G)。
- dfs.datanode.max.transfer.threads = 8192
- dfs.namenode.replication.max-streams=20
- dfs.datanode.balance.max.concurrent.moves=30
- dfs.datanode.balance.bandwidthPerSec =209715200
1. dfs.datanode.max.transfer.threads
修改dfs.datanode.max.transfer.threads=4096 (如果运行HBase的话建议为16384),
指定用于在DataNode间传输block数据的最大线程数,老版本的对应参数为dfs.datanode.max.xcievers。
默认:16384-----是否可以继续调大
2. dfs.datanode.balance.bandwidthPerSec
修改dfs.datanode.balance.bandwidthPerSec=52428800,指定DataNode用于balancer的带宽为50MB,
这个根据情况而定,如果交换机性能好点的,完全可以设定100MB,单位是Byte,
如果机器的网卡和交换机的带宽有限,可以适当降低该速度,比如10MB,默认是1048576(1MB)。
hdfs dfsadmin-setBalancerBandwidth 52428800
3. dfs.balancer.block-move.timeout
以毫秒为单位移动的最大时间。如果这个设置大于0,平衡器将停止等待一个块移动完成。在典型的集群中,3到5分钟的超时是合理的。
如果超时发生在很大比例的块移动中,则需要增加。它也可能是太多的工作被分派,并且许多节点的带宽总是超过带宽限制。
在这种情况下,可能需要调整其他平衡器参数。默认情况下,它是禁用的。
4. dfs.balancer.max-no-move-interval
如果这个指定的时间量已经过去,并且没有一个块被移出源DataNode,那么将会有更多的努力在当前的平衡迭代中移出这个DataNode的块。
---------------------