概要描述
TDH 集群中会出现个别节点或者个别磁盘空间使用率远高于其他节点的情况,本文针对这种情况,提供一些简单的诊断和改进方案。
详细说明
- 节点之间存储异构,单节点磁盘容量相同,单节点磁盘使用率远高于其他节点
- 单节点内磁盘容量异构,不同磁盘间used 大小相同,但磁盘used%使用率不同。
- 单节点内磁盘容量同构,但由于是后扩容增加的磁盘,使用率远低于以前的磁盘
确认是哪种场景
1、namenode 信息
优先查看 50070 overview 界面,或者试用 hdfs dfsadmin -report 查看数据分布情况,可以确认 datanode 节点间的磁盘使用率;
2、 datanode 信息
可以通过 datanode 界面,确认各节点的 used 情况,以及 Capacity 容量;
3、查看 hdfs 参数,dfs.datanode.du.reserved 参数,该参数是本地数据盘每块盘预留的空间大小,默认20%,单位是 byte
4、服务器上检查磁盘数量、磁盘容量大小,确认是哪种场景;
磁盘异构
如果是磁盘异构导致的不均衡,可以通过调整磁盘写入策略来解决;
1、轮询写入
比较容易理解,不在赘述;
2、基于可用空间的策略
它根据一个可用空间的阈值,将卷分为可用空间多的卷和可用空间少的卷两类。然后,会根据一个比较高的概率选择可用空间多的卷。不管选择了哪一类,最终都会采用轮询策略来写入这一类卷。可用空间阈值和选择卷的概率都是可以通过参数设定的。这个策略可以在一定程度上削弱不平衡的现象,但仍然无法完全消除其影响。并且卷的可用空间只是诸多因素中的一个,仍然不够全面,磁盘I/O等指标也是比较重要的。但不管如何,它已经比纯轮询策略好得太多了。
解决方案
场景1:
节点间磁盘不均衡,优先使用 balancer 进行节点间均衡;
kinit -kt /etc/hdfs1/hdfs.keytab hdfs/$HOSTNAME
hdfs dfsadmin -setBalancerBandwidth 50485760
nohup hdfs balancer -threshold 5 >/tmp/balance.log 2>&1 &
场景2:
节点内各磁盘间不均衡,则可以调整写入策略,可以通过再manager 页面添加参数的方式调整;
| 参数名 | 参数值 |
|---|---|
| dfs.datanode.fsdataset.volume.choosing.policy | org.apache.hadoop.hdfs.server.datanode.fsdataset.AvailableSpaceVolumeChoosingPolicy |
| dfs.datanode.available-space-volume-choosing-policy.balanced-space-threshold | 10737418240 |
| dfs.datanode.available-space-volume-choosing-policy.balanced-space-preference-fraction | 0.75f |
参数一含义:数据副本存放磁盘策略-优先存放可用空间多的磁盘
参数二含义:datanode节点所有配置的数据磁盘可用空间最大最小值之差,如果小于该参数值,即10G,默认值,就采用轮询的方式选择磁盘存放。
参数三含义:有多少比例的数据副本应该存储到剩余空间足够多的磁盘上。该配置项取值范围是0.0-1.0,一般取0.5-1.0,默认值0.75
对于TDH 9.0 产品,hadoop 已经升级到3.X 可以利用hdfs diskbalancer 来进行磁盘间数据均衡
场景三
单节点磁盘同构,磁盘使用率不均,且节点间使用率也不均衡。
解决:可解决hdfs balancer 和AvailableSpaceVolumeChoosingPolicy 一起调整,数据balancer 的时候将优先move到空间剩余多的磁盘。