方案一:节点间数据平衡,可以精确指定节点,进行数据平衡
操作步骤:
1.挑选集群中负载较低的节点
查看集群监控,根据CPU,内存的利用率挑选平衡脚本运行的机器
2、列出磁盘利用低的节点IP,和新增节点IP,作为待平衡节点
vim /tmp/ip.txt \\写入IP,一行一个IP
3.在不影响业务的前提下设置集群带宽如:50M/s,默认1M/s
hdfs dfsadmin -setBalancerBandwidth 52428800
4.根据待平衡节点的磁盘利用率,设置目标平衡阈值
比如目前ip.txt有三个节点待平衡,期望这些节点的磁盘利用率相差在上下10%左右:
5.hdfs balancer -threshold 10 -policy datanode -include -f /tmp/ip.txt -idleiterations 1
下面是命名的解释:
hdfs 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 1
6.后台运行平衡命令
nohup hdfs balancer -threshold 20 -policy datanode -include -f /tmp/ip.txt -idleiterations 1 >> /tmp/balancer.out 2>&1 &
方案二:整个集群范围进行数据平衡
操作步骤:
-
挑选集群中负载较低的节点
-
进入hadoop/sbin/目录
cd hadoop/sbin/
sh start-balancer.sh -threshold 20 \\该脚本会自动在后台运行
-
查看平衡进度
运行步骤2之后,会在控制台输出平衡进度日志位置,tail -f 查看即可