HDFS Balancer

3aab91a9635989e0f9c416e6b8306b01.png

前言

c4bcc91905d7119216e45f2cabd70fd1.png

随着时间的增长集群总会出现数据分布不均衡的情况,尤其是在集群发生扩容之后,数据节点存储使用率差别会很大. 因此对集群数据均衡处理是有必要的.

bda1d6522fa1febd2fc4e53ed324e19d.png

HDFS平衡

9cb8e5930b884ce13b149282a12724b7.png

针对于HDFS 平衡目前使用的最多的就是针对HDFS整体去进行平衡处理.

我们可以使用hadoop的页面管理工具,如clouder产品自带的重平衡按钮功能(CM首页->HDFS组件->操作->选择'重新平衡') 

我们也可以用命令行的方式去后台执行,例如: 

nohup hdfs balancer -threshold 10 &

如果你想优化平衡,你可以增加尝试修改以下参数去适配集群或者加快平衡:

nohup hdfs balancer -Ddfs.balancer.moverThreads=2000 -Ddfs.datanode.balance.max.concurrent.moves=40 -Ddfs.datanode.balance.bandwidthPerSec=1073741824 -Ddfs.balancer.dispatcherThreads=300 -Ddfs.balancer.getBlocks.min-block-size=62914560 -include {DN1},{DN2},{DN3}, -threshold 1 >/tmp/balancer-out_$(date +"%Y%m%d%H%M%S").log

以上参数解释:

dfs.balancer.moverThreads

控制balancer中用于移动块的线程数。每个块移动都需要一个线程,因此这种配置限制了整个集群中平衡的并发移动总数。

是控制balancer整体的最大移动block总数

dfs.datanode.balance.max.concurrent.moves

此参数定义了数据balance并行移动数据块的最大并发数。它限制了同时进行数据移动的任务数量。

是控制单个datanode的并发移动block数量

dfs.datanode.balance.bandwidthPerSec

根据每秒字节数指定每个datanode节点可用于平衡目的的最大带宽量。

dfs.balancer.dispatcherThreads

用于调度移动block块的线程池大小,只参与调度不参与实际移动block

dfs.balancer.getBlocks.min-block-size

移动最小块的大小限制

-include

只包括指定的datanode

-threshold

指定datanode存储使用率百分比与整体存储使用率百分比的差值,小于该值才会触发balancer

1d938fd4c43d8ca2c2f143812097f7fb.png

DataNode平衡

4b10c98ffae23a68abefea8e6136cd0c.png

除了针对HDFS整体平衡外,你也可以针对单个的datanode进行平衡.顾名思义就是只对一个datanode上的数据盘进行平衡处理,相对于HDFS平衡范围更小. 

datanode平衡步骤示例:

a.生成计划

hdfs diskbalancer -plan $(hostname -f) -bandwidth 104857600

b.执行计划

hdfs diskbalancer  -execute /system/diskbalancer/2024-九月-11-17-47-19/demob.cdp.com.plan.json

c.查询平衡任务

hdfs diskbalancer -query $(hostname -f)

d.取消任务

hdfs diskbalancer  -cancel $(hostname -f)

注: 只能在datanode节点去平衡自己的节点,否则会抛出权限异常,异常信息如下:

[root@demoa ~]# hdfs diskbalancer -plan demob.cdp.com -bandwidth 104857600
24/09/10 17:17:06 INFO balancer.NameNodeConnector: getBlocks calls for hdfs://nameservice1 will be rate-limited to 20 per second
24/09/10 17:17:06 INFO balancer.KeyManager: Block token params received from NN: update interval=10hrs, 0sec, token lifetime=10hrs, 0sec
24/09/10 17:17:06 INFO block.BlockTokenSecretManager: Setting block keys
24/09/10 17:17:06 INFO balancer.KeyManager: Update block keys every 2hrs, 30mins, 0sec
24/09/10 17:17:07 ERROR tools.DiskBalancerCLI: Exception thrown while running DiskBalancerCLI.
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied.

d9793b8e8b14771d90ab90533816911a.png

HDFS平衡逻辑步骤

8088eaf1dad36414c13c866014c914ab.png

1、从namenode获取datanode磁盘的使用情况

2、计算需要把哪些数据移动到哪些节点

3、分别移动,完成后删除旧的block信息

4、循环执行,直到达到平衡标准

因此在平衡过程中可能会出现一段时间数据存储反而增多的情况.

dda3b58a81a0af09310326a8136a7da9.png

其他说明

d6502d830e92d54f22bf427f690f5181.png

1、HDFS平衡可以随时停止.

2、对于使用impala的业务,平衡之后可能会遇到以下告警信息:

query performance and not result correctness. One of the common causes for this warning is HDFS rebalanert moving some of the file's . if the issue persists, consider running "INVALIDATE METADATA `xxx`.`xxxxxx`"

此时就要按照提示执行: 

INVALIDATE METADATA (生产环境尤其是表或者分区特别多的不建议整库刷新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值