HDFS balance策略

文章目录


【前言】大规模Hadoop集群,各个datanode节点磁盘空间使用率经常会出现分布不均衡的情况,其原因在于优先本地化存储,或者节点异常导致的转储备份。如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率。

  • balancer命令详解
hdfs --config /hadoop-client/conf balancer
-threshold  10                    \\集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100 
-policy datanode                  \\默认为datanode,datanode级别的平衡策略
-exclude  -f  /tmp/ip1.txt        \\默认为空,指定该部分ip不参与balance, -f:指定输入为文件
-include  -f  /tmp/ip2.txt        \\默认为空,只允许该部分ip参与balance,-f:指定输入为文件
-idleiterations  5               \\迭代次数,默认为 5

hdfs balance时datanode之间数据迁移的带宽设置(/hadoop-client/conf/hdfs-site.xml, 修改需重启hdfs):

<property>
    <name>dfs.datanode.balance.bandwidthPerSec</name>
    <value>6250000</value>
</property>
<备注:6250000 / (1024 * 1024) = 6M/s>
或者设置临时带宽:
# hdfs dfsadmin -setBalancerBandwidth 6250000 

动态增大带宽(不需重启,需要切换到hdfs用户,不可设置太大,会占用mapreduce任务的带宽):

hdfs dfsadmin -fs hdfs://${active-namenode-hostname}:8020 -setBalancerBandwidth 104857600

balance脚本在满足以下任何一个条件都会自动退出:

 * The cluster is balanced;
 * No block can be moved;
 * No block has been moved for specified consecutive iterations (5 by default);
 * An IOException occurs while communicating with the namenode;
 * Another balancer is running.
  • 运行balancer
hdfs balancer -threshold 10   #10为各节点存储的浮动比例10%上下浮动
  • Hadoop Balancer的步骤:
1、从namenode获取datanode磁盘的使用情况
2、计算需要把哪些数据移动到哪些节点
3、分别移动,完成后删除旧的block信息
4、循环执行,直到达到平衡标准

猜你喜欢

转载自blog.csdn.net/waplys/article/details/89101097