磁盘均衡器:HDFS Disk Balancer

背景相比较于个人PC,服务器一般可以通过挂载多块磁盘来扩大单机的存储能力 。

磁盘均衡器:HDFS Disk Balancer

文章插图
服务器和磁盘
在Hadoop HDFS中,DataNode负责最终数据block的存储,在所在机器上的磁盘之间分配数据块 。当写入新block时,DataNodes将根据选择策略(循环策略或可用空间策略)来选择block的磁盘(卷) 。
循环策略:它将新block均匀分布在可用磁盘上 。默认此策略 。
可用空间策略:此策略将数据写入具有更多可用空间(按百分比)的磁盘 。
磁盘均衡器:HDFS Disk Balancer

文章插图
服务器磁盘使用情况
但是,在长期运行的群集中采用循环策略时,DataNode有时会不均匀地填充其存储目录(磁盘/卷),从而导致某些磁盘已满而其他磁盘却很少使用的情况 。发生这种情况的原因可能是由于大量的写入和删除操作,也可能是由于更换了磁盘 。
另外,如果我们使用基于可用空间的选择策略,则每个新写入将进入新添加的空磁盘,从而使该期间的其他磁盘处于空闲状态 。这将在新磁盘上创建瓶颈 。
因此,需要一种Intra DataNode Balancing(DataNode内数据块的均匀分布)来解决Intra-DataNode偏斜(磁盘上块的不均匀分布),这种偏斜是由于磁盘更换或随机写入和删除而发生的 。
因此,Hadoop 3.0中引入了一个名为Disk Balancer的工具,该工具专注于在DataNode内分发数据 。
HDFS Disk Balancer简介HDFS disk balancer是Hadoop 3中引入的命令行工具,用于平衡DataNode中的数据在磁盘之间分布不均匀问题 。这里要特别注意,HDFS disk balancer与HDFS Balancer是不同的:
HDFS disk balancer针对给定的DataNode进行操作,并将块从一个磁盘移动到另一个磁盘,是DataNode内部数据在不同磁盘间平衡;
HDFS Balancer平衡了DataNode节点之间的分布 。
HDFS Disk Balancer功能HDFS Disk balancer支持两个主要功能,即报告和平衡 。
数据传播报告为了定义一种方法来衡量集群中哪些计算机遭受数据分布不均的影响,HDFS磁盘平衡器定义了HDFS Volume Data Density metric(卷/磁盘数据密度度量标准)和Node Data Density metric(节点数据密度度量标准) 。
HDFS卷数据密度度量标准能够比较数据在给定节点的不同卷上的分布情况 。
节点数据密度度量允许在节点之间进行比较 。
  • Volume data density metric计算过程
假设有一台具有四个卷/磁盘的计算机-Disk1,Disk2,Disk3,Disk4,各个磁盘使用情况:
 
Disk1
Disk2
Disk3
Disk4
capacity
200 GB
300 GB
350 GB
500 GB
dfsUsed
100 GB
76 GB
300 GB
475 GB
dfsUsedRatio
0.5
0.25
0.85
0.95
volumeDataDensity
0.20
0.45
-0.15
-0.24
Total capacity= 200 + 300 + 350 + 500 = 1350 GB
Total Used= 100 + 76 + 300 + 475 = 951 GB
因此,每个卷/磁盘上的理想存储为:
Ideal storage = total Used ÷ total capacity= 951÷1350 = 0.70
也就是每个磁盘应该保持在 70%理想存储容量 。
VolumeDataDensity = idealStorage – dfs Used Ratio
比如Disk1的卷数据密度= 0.70-0.50 = 0.20 。其他Disk以此类推 。
【磁盘均衡器:HDFS Disk Balancer】volumeDataDensity的正值表示磁盘未充分利用,而负值表示磁盘相对于当前理想存储目标的利用率过高 。
  • Node Data Density计算过程
Node Data Density(节点数据密度)= 该节点上所有卷/磁盘volume data density绝对值的总和 。
上述例子中的节点数据密度=|0.20|+|0.45|+|-0.15|+|-0.24| =1.04
较低的node Data Density值表示该机器节点具有较好的扩展性,而较高的值表示节点具有更倾斜的数据分布 。
一旦有了volumeDataDensity和nodeDataDensity,就可以找到集群中数据分布倾斜的节点,或者可以获取给定节点的volumeDataDensity 。
磁盘平衡当指定某个DataNode节点进行disk数据平衡,就可以先计算或读取当前的volumeDataDensity(磁盘数据密度) 。有了这些信息,我们可以轻松地确定哪些卷已超量配置,哪些卷已不足 。为了将数据从一个卷移动到DataNode中的另一个卷,Hadoop开发实现了基于RPC协议的Disk Balancer 。
HDFS Disk Balancer开启HDFS Disk Balancer通过创建计划进行操作,该计划是一组语句,描述应在两个磁盘之间移动多少数据,然后在DataNode上执行该组语句 。计划包含多个移动步骤 。计划中的每个移动步骤都具有目标磁盘,源磁盘的地址 。移动步骤还具有要移动的字节数 。该计划是针对可操作的DataNode执行的 。


推荐阅读