概览
HDFS 允许管理员对目录下的子目录和文件个数(Name Quotas),以及目录下数据存储大小(Space Quotas)进行配额限制。名称配额和空间配额是独立运作的,但这两种配额的管理和实施是密切并行的。
名称配额(Name Quotas)
名称配额是对目录树中的文件和目录名的数量的硬限制。如果超出配额,则文件和目录创建失败。新创建的目录没有关联的配额,最大的配额是Long.Max_Value。一个配额强制一个目录保持空白。(是的,一个目录会计入它自己的配额!)
空间配额(Space Quotas)
空间配额是对目录树中的文件所使用的字节数的硬限制。如果配额不允许写入整个块,则块分配失败。一个块的每个副本都按配额计数。新创建的目录没有关联的配额,最大的配额是Long.Max_Value。零配额仍然允许创建文件,但是不能向文件添加任何块
名称配额和空间配额在fsimage中是持久化的。在启动时,如果fsimage立即违反了配额(可能fsimage被偷偷修改了),则会对每一次违反都打印一个警告。设置或删除配额将创建一个日志条目。
存储类型配额
存储类型配额是对目录树中的文件使用特定存储类型(SSD、 DISK、 ARCHIVE)的硬限制。它在许多方面类似于存储空间配额,但提供了对集群存储空间使用的细粒度控制。要在目录上设置存储类型配额,必须在目录上配置存储策略,以便根据存储策略将文件存储在不同的存储类型中。有关更多信息,请参见 HDFS 存储策略文档 。
存储类型配额可以与空间配额和名称配额结合起来,以有效地管理集群存储使用。比如说,
- 对于配置了存储策略的目录,管理员应该为资源约束存储类型(如 SSD)设置存储类型配额,为其他存储类型和总体空间配额设置限制较少的值或默认无限制。HDFS 将根据存储策略和总体空间配额从目标存储类型中扣除配额
- 对于未配置存储策略的目录,管理员不应配置存储类型配额。即使特定存储类型不可用(或可用,但没有正确配置存储类型信息) ,也可以配置存储类型配额。但是,在这种情况下,建议使用总体空间配额,因为存储类型信息对于存储类型配额强制不可用或不准确
- DISK 上的存储类型配额的使用受到限制,除非 DISK 不是主要的存储介质。(例如以存档为主的集群)
管理员命令
配额由一组仅对管理员可用的命令来管理。
-
hdfs dfsadmin -setQuota
... 将每个目录的名称配额设置为 n。
-
hdfs dfsadmin -clrQuota
... 删除每个目录的任何名称配额。
-
hdfs dfsadmin -setSpaceQuota
... 将每个目录的空间配额设置为 n 个字节。这是对目录下所有文件的总大小的硬限制。空间配额也考虑到副本,即一个 1GB 3个副本的数据将消耗3 GB 的配额。
-
hdfs dfsadmin -clrSpaceQuota
... 删除每个目录的空间配额。
-
hdfs dfsadmin -setSpaceQuota
-storageType ... 将存储类型配额设置为为每个目录指定的 n 字节存储类型。
-
hdfs dfsadmin -clrSpaceQuota -storageType
... 删除为每个目录指定的存储类型配额。
报告命令
报告配额值和当前使用的名称和字节数。
-
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]]
... 使用 -q 选项可以报告每个目录的名称配额值、剩余的可用名称配额、空间配额值和剩余的可用空间配额。如果目录没有配额集,则报告的值为 none 和 inf。h 选项以人类可读的格式显示大小。v 选项显示一行标题。t 选项显示每个存储类型配额集和每个目录剩余的可用配额。如果给出了-t 选项,则只显示指定类型的配额和剩余配额。否则,将显示支持配额的所有存储类型的配额和剩余配额。