何为数据平衡
使数据尽可能均匀的分布到所有DataNode。\
分三种:
hdfs balancer
hdfs diskbalancer
配置
- dfs.balancer.moverThreads/dispatcherThreads:
 - dfs.datanode.balance.max.concurrent.moves
 - dfs.balancer.max-size-to-move
 - dfs.datanode.balance.bandwidthPerSec
 
数据平衡的原理
节点均衡、机架均衡、磁盘均衡。
HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况。例如:当集群内新增、删除节点,或者某个节点机器内硬盘存储达到饱和值。当数据不平衡时,Map任务可能会分配到没有存储数据的机器,这将导致网络带宽的消耗,也无法很好的进行本地计算。 
- Rebalancing Server(均衡服务)要求NN生成DN的数据分布分析报告,获取每个DN磁盘使用情况。
 - Rebalancing Server汇总需要迁移的数据分布情况,计算数据块路线图。
 - Proxy Source Data Node复制一个数据块,复制到目标DataNode,删除原始数据块。
 - 目标DataNode向Proxy Source Data Node 确认完成。
 - Proxy Source Data Node 向 Rebalancing Server确认本次数据块完成。继续下一块。
DataNode分组
Over、Above、Below、Under。Over和Above向Below和Under迁移数据。
 
脚本与配置
#启动数据均衡,默认阈值为 10%${HADOOP_HOME}/bin/start-balancer.sh#启动数据均衡,阈值 5%${HADOOP_HOME}/bin/start-balancer.sh –threshold 5#停止数据均衡${HADOOP_HOME}/bin/stop-balancer.sh
数据平衡占用带宽限制默认1048576(1MB/s)
hdfs-site.xml
<property><name>dfs.balance.bandwidthPerSec</name><value>1048576</value><description> Specifies the maximum bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second. </description></property>
