HDFS允许管理员可以对所使用的名称数量和单个目录使用的空间量设置配额,名称配额与空间配额分别独立运作,但是两种配额的管理和实现方式非常相似。本文为您介绍HDFS的名称配额和空间配额两种方式以及如何进行配额操作。

名称配额(Name Quotas)

名称配额是对当前目录树中的文件和目录名称数量的硬性限制。创建文件或目录时,如果超出配额,则文件和目录创建失败。配额是一个目录的属性,不仅在创建时会检查配额,在重命名时也会检查配额。如果一个目录已经设置了配额,则该目录执行重命名操作后,该目录的配额亦然生效。

即使目录违反了新的配额,对目录设置新的配额仍然可以成功。新建的目录初始状态是没有设置配额的。最大配额值为Long.Max_Value。例如,设置配额为1会使得一个目录为空,因为目录本身占用一个额度。

空间配额(Space Quotas)

空间配额是对当前目录树中的文件所使用的字节数量的硬性限制。如果额度不允许写入一个完整的块,则块分配会失败。一个块的所有副本都会计入额度中。例如,一个文件大小为N,有三个副本,则占用的额度为3N。配额是一个目录的属性,不仅在创建时会检查配额,在重命名时也会检查配额。对于重命名的目录,配额不变。如果重命名操作与设置的配置冲突,则重命名操作失败。

即使目录违反了新的配额,对目录设置新的配额仍然可以成功。新建的目录初始状态是没有设置配额的。最大配额值为Long.Max_Value。当配额为0时仍然允许创建文件,但是不能向该文件中写内容。目录不占用磁盘空间,因此不计入空间配额中。

命令示例

  • 管理员命令
    管理员可以通过以下命令来管理额度:
    • 设置目录的名称配额为N。
      hdfs dfsadmin -setQuota <N> <directory>...<directory>

      当N是非正数、目录不存在或目录马上超过新配额时设置失败。

    • 删除目录的名称配额。
      hdfs dfsadmin -clrQuota <directory>...<directory>
    • 设置目录的空间配额为N字节。
      hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
    • 删除目录的空间配额。
      hdfs dfsadmin -clrSpaceQuota <directory>...<directory>
  • 报告命令
    报告配额值和当前使用的名称总数以及总的字节数。
    hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>