概览
不同于全局不均衡,有些时候仅仅是一个node上的disk数据不均衡。
- Diskbalancer是一个命令行工具平衡dn上的数据块
- node上disk不均衡可能是大量的写入,删除或者磁盘替换
全局不均衡使用的是balancer方案进行平衡
架构
Diskbalancer默认是开启的
- 构建执行计划
磁盘源,目标磁盘,移动字节数 - 执行执行计划
限制每秒复制多少数据
命令
hdfs diskbalancer -plan dn
可以指定参数
- out
- brandwidth
- thresholdPercentage
操作的是snapshot,所以需要设置一个复制成功率 - maxerror
- v
- fs 指定的namenode
hdfs diskbalancer -plan 127.0.0.1
如果需要进行diskBalancer,那么会生成两个json文件,nodename.before.json 以及nodename.plan.json
日志显示,namenode需要通过rpc端口和datanode通信,调用方法planner.GreedyPlanner
执行
hdfs diskbalancer -execute /system/diskbalancer/nodename.plan.json
异步执行的过程,可以通过query查询进度
可以指定参数 -skipDateCheck
查询
hdfs diskbalancer -query nodename.mycluster.com
query得到的结果如下
"sourcePath" : "/data/disk2/hdfs/dn",
"destPath" : "/data/disk3/hdfs/dn",
"workItem" :
"startTime" : 1466575335493,
"secondsElapsed" : 16486,
"bytesToCopy" : 181242049353,
"bytesCopied" : 172655116288,
"errorCount" : 0,
"errMsg" : null,
"blocksCopied" : 1287,
"maxDiskErrors" : 5,
"tolerancePercent" : 10,
"bandwidth" : 10
取消
hdfs diskbalancer -cancel /system/diskbalancer/nodename.plan.json
移动一半的数据块怎么处理?启动Datanode时检测状态自恢复吗?
报告
指定node的迁移报告,或者是找到top受益的节点
hdfs diskbalancer -fs http://namenode.uri -report -node <file://> | [<DataNodeID|IP|Hostname>,...]
hdfs diskbalancer -fs http://namenode.uri -report -top topnum
设置
hdfs-site.xml
- dfs.disk.balancer.enabled
- dfs.disk.balancer.max.disk.throughputInMBperSec
指定磁盘间平衡时占用的最大磁盘带宽,默认值10MB/s。在不影响读写性能的情况下可以适当调大。 - dfs.disk.balancer.max.disk.errors
- dfs.disk.balancer.block.tolerance.percent
在每次移动块的过程中,移动块的数量与理想平衡状态之间的偏差容忍值(按百分比计)。一般也设成5。 - dfs.disk.balancer.plan.threshold.percent
各个盘之间的平衡阈值 - dfs.disk.balancer.plan.valid.interval