一、前言
集群在长时间使用过程中,难免会出现节点间数据不均衡的情况。尤其是在集群新增节点,或者人为的调整了副本数量以后,数据多的节点可以达到95%以上,少的节点连10%都不到。hadoop中提供了Balance工具来在节点间移动数据以达到集群节点数据平衡的效果。集群数据不平衡现象越严重,越有必要调整和优化Balancer的速度。
二、HDFS Balancer流程及原理
2.1 Balancer 使用
HDFS Balancer使用时可以调整的参数如下:
-policy <policy> |
datanode(默认值):如果每个datanode均衡,则群集是平衡的。 blockpool:如果每个datanode中的每个块池都是平衡的,则群集是平衡的。 |
-threshold <threshold> |
集群平衡的条件,datanode间磁盘使用率相差阈值,区间选择:0~100 |
-exclude -f <hosts-file> |
默认为空,指定该部分ip不参与balance |
-source -f <hosts-file> |
只选择指定的节点作为Balancer的源头 |
-include -f <hosts-file> |
默认为空,只允许该部分ip参与balance |
-idleiterations |
退出前的最大空闲迭代次数,默认为 5 |
2.2 Balancer流程
Balancer工具启动后作为一个独立的守护线程与NN分开运行,运行过程循环进行,直到集群以达到平衡状态,或者没有块可以移动,或者与NN交互报错才会停止,每次循环中的流程总体可分为以下三步:
1. 算
Balncer从NN处查询数据来计算:集器整体平均使用率,各节点的使用率,各个节点距离平衡状态可以移进或移出多少数据等。并根据计算结果将各节点分类。
2. 选
<