Hadoop预留磁盘空间问题跟进

Posted 智能运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop预留磁盘空间问题跟进相关的知识,希望对你有一定的参考价值。

在hdfs-site.xml中设置dfs.datanode.du.reserved的值,磁盘就会有预留空间:

<property>
    <name>dfs.datanode.du.reserved</name>
    <value>2147483648</value> #2GB
    <说明>Reserved space in bytes per volume. Always leave this much space free for non dfs use.<说明>
</property>

既然有预留空间,且预留空间设置为2GB,那为何Hadoop上却显示Remaining只剩余100MB左右呢,而非2GB呢?

那我们从单机上看看吧,为了方便展现,把df的命令结果列出来,从单机上看,以某一个特定磁盘为例,有以下几笔数据:

  • Size为768413784,约为733G

  • Used为766359616,约为731G

  • Avail为102180,约为100M

那么,733G-731G=2G,而不应该是100M啊,那系统为什么会显示100M呢?看起来,从733-731=2这个角度来讲,确实是预留了2G没有使用,那是怎么回事?

我们继续往下追查,通过fdisk命令看到,该磁盘大小为799.5G,而系统显示只有733G,那60G跑哪里去了呢?现在,有两个磁盘空间的疑问了

  1. 磁盘Size显示733G,为何Used + Avail < Size

  2. 磁盘是800G,为何系统显示Size仅有733G

先回答第一个问题,为何Used + Avail < Size?

通过命令 tune2fs -l /dev/sdi可以看到分区有保留空间(Reserved block count: 487997),Block size是4096,因此预留空间大小就是Reserved block count * Block size= 487997 * 4096 = 1998835712KB / 1024 = 1951988MB,那么实际的预留空间大小就是1951988MB,然后df命令的(Size)768413784 – (Used)766439308 = (Avali)22488 + (Reserved)1951988。真相大白了,系统预留了2G左右的保留空间,而Hadoop未考虑该部分,当Hadoop设置了2GB预留分区后,就会出现这个悲剧,Hadoop无法使用该部分空间,因此,Hadoop需要调整预留空间的大小,且Hadoop预留空间的大小=系统预留空间+Hadoop期望的预留空间。在实际使用中,考虑到磁盘都是4T以上的,因此预留空间一般设置为100GB为宜,这样磁盘预留空间占比大于1%,我们设置磁盘报警也就比较方便了。

再回答第二个问题,磁盘是800G,为何系统显示Size仅有733G?

硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。inode也会消耗硬盘空间,所以这个800G- 733G=67G,就是Inode占用的空间。那如何把这个理论放到实践里呢,我们也来算一下吧。799535005696 bytes / 1024  / 1024 / 1024 = 744.625GB(按照1000/1000/1000会是799.5GB,这点比较坑,导致我算了好久没有对回去),系统显示Size为768413784(733G),那么Inode理论占用了大概11.625G的空间,具体来算下吧,Inode count: 48799744 * Inode size: 256 = 12492734464 / 1024 /1024 /1024= 11.63G,和之前的11.625G基本就对应起来了。

[root@A06-R12-I12-126 hadoop]# tune2fs -l /dev/sdi

  • Inode count: 48799744

  • Reserved block count: 487997

  • Inode size: 256

  • Block size: 4096


以上是关于Hadoop预留磁盘空间问题跟进的主要内容,如果未能解决你的问题,请参考以下文章

Hdfs磁盘存储策略和预留空间配置

hadoop Non DFS Used是什么

磁盘有剩余空间,但是使用了是100%

磁盘格式化 磁盘挂载 手动增加swap空间

由于阿里云磁盘空间导致hadoop的yarn节点处于UNHEALTHY状态

TimesTen磁盘空间管理