hadoop balancer集群平衡介绍
Hadoop的HDFS集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,
机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的。
在Hadoop中,包含一个Balancer程序,通过运行这个程序,可以使得HDFS集群达到一个平衡的状态,使用这个程序的命令如下:
sh $HADOOP_HOME/bin/start-balancer.sh –t 10% (或者:hdfs balancer -threshold 10)
示例:
1.后台启动 nohup hdfs balancer -threshold 10 > ~/balancer-stdout.log 2> ~/balancer-stderr.log &
2.调整带宽 hdfs dfsadmin -setBalancerBandwidth 104857600
ps:
手工增加带宽,否则数据移动时候带宽会变大,hdfs有默认值的(#默认设置:1048576(1 M/S))
参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢
这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。
Hadoop的开发人员在开发Balancer程序的时候,遵循了以下几点原则:
1. 在执行数据重分布的过程中,必须保证数据不能出现丢失,不能改变数据的备份数,不能改变每一个rack中所具备的block数量。
2. 系统管理员可以通过一条命令启动数据重分布程序或者停止数据重分布程序。
3. Block在移动的过程中,不能暂用过多的资源,如网络带宽。(一般晚上执行任务比较多,可以选择在白天执行)
4. 数据重分布程序在执行的过程中,不能影响name node的正常工作。