肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > HDFS节点内数据平衡

HDFS节点内数据平衡

时间:2022-10-12 11:23:49

相关推荐

Hadoop集群使用久了,我们会发现一个问题,各个DataNode数据不平衡了,多的达到70-80%,少的达到10-20%。面对这种场景,我们一般使用HDFS自带的Blancer工具对其数据进行平衡。也就是他只能保证每一个节点的数据大小均衡。

但是有的时候,你会发现节点数据平衡了但是DataNode内部各个磁盘块上的数据不平衡了,这个Blancer就干不了这活儿。

比如某一个DataNode总共有A,B,C,D四块磁盘,你用RoundRobin磁盘选择策略去写,最后四块磁盘都写过了,但是A,B写的可能就1M,C,D写的就是100M.

一 DataNode节点磁盘数据不均衡带来的问题

1.1磁盘间数据不均衡间接导致磁盘I/O压力不同。我们知道,HDFS上的数据访问频率是很高的,这就涉及到大量的读写磁盘操作,数据多的磁盘自然就会有更高的频率访问,如果一块磁盘的IO操作非常密集的话,势必会对读写性能造成影响

1.2高使用率的磁盘导致节点写数据块的时候,可选的存储目录减少。

HDFS在写block的时候,会挑选剩余空间满足待写的block的大小情况下,才会进行挑选,如果高使用率磁盘目录过多,会导致这样的候选变少。

二 传统的解决方案

人工移动数据块存储目录:但是需要保证目录移动的准确性,否则会造成移动完目录后数据找不到的现象。

比如:

/data/1/dfs/dn/current/BP-XXXXX/current/finalized/subdir0/subdir1

目标路劲:

/data/2/dfs/dn/current/BP-XXXXX/current/finalized/subdir0/subdir1

目录结构就变了,current前面多了个空格,就会造成HDFS找不到这个数据块。

三 社区解决方案DiskBlancer

3.1设计核心

第一:DataSpread Report。 数据分布式的汇报,也就是支持各个DataNode汇报磁盘块使用情况的功能,我们就可以了解到目前集群内使用率TopN的节点磁盘

第二:DiskBlance。 进行磁盘数据平衡。但是在磁盘数据平衡的时候要考虑到各个磁盘StorageType的不同。不同的类型存储介质可能不一样,目前DiskBlancer还不支持跨存储介质数据转移,必须在一个StorageType下

3.2流程分析

Discover阶段:

计算各个DataNode磁盘使用情况,然后得到一个需要进行数据平衡的磁盘列表,会使用VolumeData Density(磁盘使用密度)作为评判标准,这个标准会以节点总使用率作为比较值。比如,如果一个DataNode ,总使用率是75%,也就是0.75. 其中A盘0.5,那么A盘的密度值就=0.75-0.5=0.25;同理如果超出的话,则密度值将会为负数。于是我们可以用VolumeData Density绝对值来判断此节点内磁盘间数据平衡情况,如果总的觉得值和越大,说明数据越不平衡

Plan阶段:

拿到上一个阶段的汇报结果数据之后,将会生成一个执行计划。Plan并不是一个最小的执行单元,它是由各个Step组成的,Step中会指定好源磁盘,目标磁盘,这里是结果包装的:DiskBalancerVoulme,并不是原来的FSVolume.

DiskBalancerCluster:读取集群节点信息

DiskBalancerDataNode:代表一个包装过的DataNode

DiskBalancerVolume和 DiskBalancerVolumeSet.DataNode磁盘对象以及磁盘对象集合

Execute阶段:

所有执行计划生成以后,就到了执行阶段。这些计划会被提交到各自DataNode上,然后在DiskBalancer类中执行。然后DiskBalancer有专门的类DiskBalancerMover来做数据平衡工作。在磁盘间数据平衡的过程中,高使用率的磁盘会移动数据块到相对低使用率的磁盘,等到满足一定阈值关系的情况下时,DiskBalancer会渐渐地退出.在DiskBalancer的执行阶段,有以下几点需要注意:

带宽限制:DiskBalancer也可以支持带宽限制。默认是10M,可以通

过配置项dfs.disk.balancer.max.disk.throughputInMBperSec进行控制

失败次数限制:DiskBalancer中会存在失败次数的控制.在拷贝block数据块的时候,出现IOException异常,会进行失败次数的累加计数,如果超出最大容忍值,DiskBalancer也会退出.

数据平衡阀值控制:DiskBalancer中可以提供一个磁盘间数据的平衡阈值,以此作为是否需要继续平衡数据的标准,配置项为dfs.disk.balancer.block.tolerance.percent.

四 DiskBalancer的命令执行

DiskBalancer内部提供了许多类别的命令操作,比如下面的查询命令:

hdfsdiskbalancer -query

我们也可以执行相应的plan命令来生成plan计划文件.

hdfsdiskbalancer -uri hdfs:// -plan

然后我们可以用生成好后的json文件进行DiskBalancer的执行

hdfsdiskbalancer -execute /system/diskbalancer/nodename.plan.json

当然,如果我们发现我们执行了错误的plan,我们也可以通过cancel命令进行清除:

hdfsdiskbalancer -cancel /system/diskbalancer/nodename.plan.json

hdfsdiskbalancer -cancel <planID> -node <nodename>

如果觉得《HDFS节点内数据平衡》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。