背景相比较于个人PC,服务器一般可以通过挂载多块磁盘来扩大单机的存储能力 。
文章插图
服务器和磁盘
在Hadoop HDFS中,DataNode负责最终数据block的存储,在所在机器上的磁盘之间分配数据块 。当写入新block时,DataNodes将根据选择策略(循环策略或可用空间策略)来选择block的磁盘(卷) 。
循环策略:它将新block均匀分布在可用磁盘上 。默认此策略 。
可用空间策略:此策略将数据写入具有更多可用空间(按百分比)的磁盘 。
文章插图
服务器磁盘使用情况
但是,在长期运行的群集中采用循环策略时,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
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计算过程
上述例子中的节点数据密度=|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执行的 。
推荐阅读
- Centos 7 添加磁盘设备
- 如何整理磁盘碎片整理磁盘碎片整理的详细方法
- 详细讲解Win10磁盘分区教程
- 网络磁盘 Windows电脑挂载阿里云盘为本地磁盘
- 详解服务器、磁盘和网卡知识
- 深入解析什么是磁盘阵列技术?常用的磁盘阵列有哪几种?
- Linux服务器磁盘满了怎么办
- 获取linux内存、cpu、磁盘IO等信息shell脚本及其原理详解
- win10c盘无法扩展卷有未分配空间-win10c盘无法扩展卷中间有磁盘分区-
- 如何在 Linux 上检查可用的磁盘空间