HDFS子目录个数、目录大小限额 Quota

概览

HDFS 允许管理员对目录下的子目录和文件个数(Name Quotas),以及目录下数据存储大小(Space Quotas)进行配额限制。名称配额和空间配额是独立运作的,但这两种配额的管理和实施是密切并行的。

名称配额(Name Quotas)

名称配额是对目录树中的文件和目录名的数量的硬限制。如果超出配额,则文件和目录创建失败。新创建的目录没有关联的配额,最大的配额是Long.Max_Value。一个配额强制一个目录保持空白。(是的,一个目录会计入它自己的配额!)

空间配额(Space Quotas)

空间配额是对目录树中的文件所使用的字节数的硬限制。如果配额不允许写入整个块,则块分配失败。一个块的每个副本都按配额计数。新创建的目录没有关联的配额,最大的配额是Long.Max_Value。零配额仍然允许创建文件,但是不能向文件添加任何块

名称配额和空间配额在fsimage中是持久化的。在启动时,如果fsimage立即违反了配额(可能fsimage被偷偷修改了),则会对每一次违反都打印一个警告。设置或删除配额将创建一个日志条目。

存储类型配额

存储类型配额是对目录树中的文件使用特定存储类型(SSD、 DISK、 ARCHIVE)的硬限制。它在许多方面类似于存储空间配额,但提供了对集群存储空间使用的细粒度控制。要在目录上设置存储类型配额,必须在目录上配置存储策略,以便根据存储策略将文件存储在不同的存储类型中。有关更多信息,请参见 HDFS 存储策略文档

存储类型配额可以与空间配额和名称配额结合起来,以有效地管理集群存储使用。比如说,

  1. 对于配置了存储策略的目录,管理员应该为资源约束存储类型(如 SSD)设置存储类型配额,为其他存储类型和总体空间配额设置限制较少的值或默认无限制。HDFS 将根据存储策略和总体空间配额从目标存储类型中扣除配额
  2. 对于未配置存储策略的目录,管理员不应配置存储类型配额。即使特定存储类型不可用(或可用,但没有正确配置存储类型信息) ,也可以配置存储类型配额。但是,在这种情况下,建议使用总体空间配额,因为存储类型信息对于存储类型配额强制不可用或不准确
  3. 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 选项,则只显示指定类型的配额和剩余配额。否则,将显示支持配额的所有存储类型的配额和剩余配额。

posted @ 2021-02-01 20:37  数大招疯-公众号同名  阅读(1134)  评论(0编辑  收藏  举报