hdfs配额查询

Posted 写轮眼之大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdfs配额查询相关的知识,希望对你有一定的参考价值。

春天来了

我去小溪边砸冰

把春天砸得头破血流

直淌眼泪

到了花开的时候

它就把那些事儿忘了

真正原谅了我

---《原谅》铁头

背景:如果一个公司有多个开发部门共用hdfs,而为了规范化使用空间互不影响,需要使用到配额。

 一、概述:

Hadoop分布式文件系统(HDFS)允许管理员为使用的名称和单独目录使用的空间数量设置配额。名称配额和空间配额是独立运作的,但这两类配额的管理和实施是密切相关的。

二、Name Quotas:

名称配额对根目录下的树的文件和目录的数量进行严格的限制。

  • 如果超出配额,文件和目录创建失败。配额不变

  • 对于重命名的目录;如果操作将导致配额冲突,则重命名操作失败。

  • 即使目录违反了新的配额,设置配额的操作仍然会成功。新创建的目录没有相关的配额。最大的配额是Long.Max_Value。一个命令的配额会使目录保持空。(是的,一个目录对它自己的配额有影响!)
    配额限制制与fsimage永久生效的。当开始时,如果fsimage违反了配额,就会对此类违规行为进行警告。(对于一开始设置配额的时候目录下文件个数已经超过了设置的个数,则对此类操作进行告警,操作动作不会失败)

  • 设置或删除一个配额都会创建日志目录

具体操作:

       设置目录的配额空间,让目录下存储的文件不超过N 个

hdfs dfsadmin -setQuota <N> <directory>...<directory>
Set the name quota to be N for each directory. Best effort for each directory, with faults reported if N is not a positive long integer, the directory does not exist or it is a file, or the directory would immediately exceed the new quota.设置每个目录的名称配额为N个。对于受影响每个目录。如果N不是一个正整数,如果目录不存在,或者是一个文件,或者目录将立即超过新的配额。

       清除目录的配额空间

hdfs dfsadmin -clrQuota <directory>...<directory>
Remove any name quota for each directory. Best effort for each directory, with faults reported if the directory does not exist or it is a file. It is not a fault if the directory has no quota.


三、Space Quotas

特点:

  • 空间配额对于根目录下的树中的文件所使用的字节数是一个严格的限制。

  • 如果配额不允许写入一个完整的块,块分配就会失败。一个块的每个副本都与配额相对应。

  • 对于重命名的目录,配额不变

  • 如果重命名操与设置的配额冲突,则重命名操作失败。

  • 新创建的目录没有相关的配额。

  • 配额的最大值是Long.Max_Value。

  • 配额为零的情况下仍然允许创建文件,但不能往文件中写东西。

  • 创建目录不使用主机文件系统空间,也不要计算空间配额。

  • 用于保存文件元数据的主机文件系统空间不被计算在配额内。

对文件的预期复制因子收取配额;更改一个文件的复制份数将会导致信用卡或借方配额。(配额考虑到了复制,当1个文件是1G,复制是3份,设置配额是2G 则上传报错)

操作:

设置目录的存储空间配额

hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>

  • Set the space quota to be N bytes for each directory. This is a hard limit on total size of all the files under the directory tree. The space quota takes replication also into account, i.e. one GB of data with replication of 3 consumes 3GB of quota. N can also be specified with a binary prefix for convenience, for e.g. 50g for 50 gigabytes and 2t for 2 terabytes etc. Best effort for each directory, with faults reported if N is neither zero nor a positive integer, the directory does not exist or it is a file, or the directory would immediately exceed the new quota.

  • 设置每个目录的空间配额为N个字节。这是对目录树下所有文件的总大小的严格限制。空间配额也考虑到复制,即1 GB的数据复制3消耗3GB的配额。N也可以用一个二进制前缀指定为方便起见,如50 g为50 g,2 t 2 tb等。尽最大努力为每个目录,与缺陷报告如果N是零和一个正整数,目录不存在或它是一个文件,或者目录会立即超过新配额。

清除目录的存储空间配额命令

hdfs dfsadmin -clrSpaceQuota <directory>...<director>

  • Remove any space quota for each directory. Best effort for each directory, with faults reported if the directory does not exist or it is a file. It is not a fault if the directory has no quota.

  • 移除每个目录的空间配额。对于每个有效的目录,如果目录不存在或它是一个文件,就会报告设置错误。对应目录来说没有配额不会报错。


测试一,配额文件和目录限制:

设置目录的文件+目录总数不超过3,(这里不包含3 应该是总数是2)

-查看当前情况

hdfs配额查询

hz目录下有1个文件 2.txt

执行  hdfs dfsadmin -setQuota 3 /user/hz

创建目录a --成功

创建目录b--失败(报超出配额限制,可见参数是小于不包含)

hdfs配额查询

查询目录下文件数 是2个

hdfs配额查询

尝试上传一个文件(继续报错,配额超出)

hdfs配额查询

 对于已经有2个文件,修改配额为1 则不报错

hdfs配额查询

清除配额,上传文件成功

hdfs配额查询

测试二,配额空间限制:

 查看当前的空间大小

hdfs配额查询

说明当前空间配额最小为 17*3=51字节

当设置配额小于 目前已经有的大小时,则会从其他地方借用,显示为-

设置配额为50,命令执行成功

hdfs配额查询

在此情况下 无法在继续传文件

创建一个32字节的文件 测试是否副本占用配额信息

hdfs配额查询

上传文件,32+17=49

hdfs配额查询

 测试结果报错,超出了配额限制

重新设置配额为60

查询当前配额剩余  =9 

计算为 60-17*3副本=9

hdfs配额查询

 总结:对于空间限制,配额空间是计算副本数的

 测试 创建目录是否占用配额空间 hdfs配额查询

配额空间不变化

四、查看还剩多少配额:

### 查看目录配额hdfs dfs -count -q -h /user/hive/warehouse/db_name.db

### 查看整个HDFS的空间大小hdfs dfs -df -h /user/Filesystem Size Used Available Use%hdfs://hdfs01 10 P 8 P 2 P 80%

### 查看指定目录/数据库的大小hdfs dfs -du -s -h /user/hive/warehouse/db_name.db


获取更多最新资料: