Hadoop,  Operation

HDFS 扩缩容之 balancer 优化

前言

Hadoop 的 HDFS 集群非常容易出现机器与机器之间磁盘利用率不平衡的情况,比如集群中添加新的数据节点。当HDFS出现不平衡状况的时候,将引发很多问题,比如MR程序无法很好地利用本地计算的优势,机器之间无法达到更好的网络带宽使用率,机器磁盘无法利用等等。可见,保证HDFS中的数据平衡是非常重要的,通过运行 balancer 工具可以使得 HDFS 集群达到一个平衡的状态。

1. Balancer 使用

# 启动 balancer
sudo -u hdfs start-balancer.sh -threshold 10
sudo -u hdfs stop-balancer.sh

# 或
sudo -u hdfs hdfs balancer -threshold 10

May 27, 2022 9:44:22 AM           0            646.77 MB           199.53 GB              10 GB
22/05/27 09:44:31 INFO net.NetworkTopology: Adding a new node: /default-rack/10.111.178.75:50010
22/05/27 09:44:31 INFO net.NetworkTopology: Adding a new node: /default-rack/10.111.178.76:50010
22/05/27 09:44:31 INFO net.NetworkTopology: Adding a new node: /default-rack/10.111.178.80:50010
...
22/05/27 09:44:31 INFO balancer.Balancer: 0 over-utilized: []
22/05/27 09:44:31 INFO balancer.Balancer: 1 underutilized: [10.111.178.80:50010:DISK]
22/05/27 09:44:31 INFO balancer.Balancer: Need to move 198.93 GB to make the cluster balanced.
22/05/27 09:44:31 INFO balancer.Balancer: Decided to move 10 GB bytes from 10.111.178.75:50010:DISK to 10.111.178.80:50010:DISK
22/05/27 09:44:31 INFO balancer.Balancer: Will move 10 GB in this iteration
22/05/27 09:44:32 INFO balancer.Dispatcher: Successfully moved blk_1084926230_11185419 with size=26627 from 10.111.178.75:50010:DISK to 10.111.178.80:50010:DISK through 10.111.178.76:50010
...

然后打开 hdfs UI 查看进度:http://emr-header-1:50070/dfshealth.html#tab-datanode

  • 其中 -t 参数表示达到平衡状态的磁盘使用率偏差阀值,例如,当各节点之间磁盘使用率偏差小于 10% 时才会认为集群已经达到平衡状态,否则如果设置为 90%,则可能出现某个节点实际使用率很低,但也会认为达到平衡。(因为这个偏差率阀值很容易达到)

  • 其中影响 hadoop balance 工具的几个参数:

    • -threshold
      默认:10, 参数取值范围: 0-100,说明:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值 ,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。

    • dfs.datanode.balance.bandwidthPerSec
      默认:1048576 (1 MB/S), 说明:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢

2. 参数调优

  • 2.1 临时设置带宽为 10 MB/s
sudo -u hdfs hdfs dfsadmin -setBalancerBandwidth 10485760

留言

您的电子邮箱地址不会被公开。