Hadoop分布式文件系统(HDFS)允许管理员为使用的名称数量和单个目录的容量设置配额。名称配额和空间配额是独立运行的,但是两种类型配额的管理和实现是紧密平行的。
名称配额是对以当前目录为根的文件树种中文件和目录数量的硬性限制。如果超出配额,文件和目录创建将失败。配额的设置伴随着重命名目录,如果重命名操作导致配额数量超出,则重命名操作将失败。即使目录违反新配额,设置配额的尝试仍将成功。 新创建的目录没有关联的配额。 最大配额是Long.Max_Value。 配额为1会强制目录保持空白(目录本身也计入自己的配额)。
fsimage的名称配额是不可变的, 启动时,如果fsimage立即违反配额(可能是fsimage被秘密修改),则对于每种此类违反都会打印警告。对设置和删除配额操作将创建一个空的日志。
空间配额是对以当前目录为根的文件树中的文件的硬性限制。 如果配额有限,不允许写入整个块,则块分配失败。 块的每个复本均计入配额。配额的设置伴随着重命名目录,如果重命名操作导致空间配额数量超出,则重命名操作将失败。 新创建的目录没有关联的配额。 最大配额是Long.Max_Value。配额为零仍然允许创建文件,但是不能将任何块添加到文件中。目录不使用主机文件系统空间,也不计入空间配额。 用于保存文件元数据的主机文件系统空间不计入配额。
配额按文件的预期复制因子分配,更改文件的复制因子将贷记或借记配额。
fsimage的名称配额是不可变的,启动时,如果fsimage立即违反配额(可能是fsimage被秘密修改),则对于每种此类违反都会打印警告。对设置和删除配额操作将创建一个空的日志。
存储类型配额是对以当前目录为根的文件树中的文件对特定存储类型(SSD,DISK,ARCHIVE)的使用的硬性限制。它在许多方面类似于存储空间配额,但是可以对群集存储空间使用情况进行细粒度控制。 要在目录上设置存储类型配额,必须在目录上配置存储策略,以允许根据存储策略将文件存储在不同的存储类型中。 有关更多信息,请参见HDFS Storage Policy Documentation文档。
可以将存储类型配额与空间配额和名称配额结合使用,以有效地管理集群存储使用情况。 例如:
对于已经配置存储策略的目录,管理员应为资源限制存储类型(SSD)设置存储类型配额,并为其他存储类型和总体空间配额保留较小的配额或默认为无限制的配额。HDFS将根据存储策略从目标存储类型和总体空间配额中扣除配额。
对于没有配置存储策略的目录,管理员不应配置存储类型配额。即使特定的存储类型不可用(或可用,但存储类型信息配置不正确),也可以配置存储类型配额。 但是,在这种情况下,建议使用总体空间配额(Space Quotas),因为对于存储类型配额强制实施,存储类型信息不可用或不准确。
DISK上的存储类型配额用途有限,除非DISK不是主要存储介质(例如,群集主要是ARCHIVE存储)。
配额由一组仅对管理员可用的命令管理:
hdfs dfsadmin -setQuota <N> <directory>...<directory>
对每个目录设置名称配额N,如果N不是一个正整数,该目录不存在或它是一个文件,或者目录将立即超过新的配额,则会报告错误。
hdfs dfsadmin -clrQuota <directory>...<directory>
删除每个目录的任何名称配额。 如果目录不存在或为文件,则会报告错误。 如果目录没有配额,不会返回错误。
hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
将每个目录的空间配额设置为N个字节。 这是对目录树下所有文件总大小的硬限制。 空间配额也考虑了复制,即1GB的数据(复本数为3)将消耗3GB的配额。 为了方便起见,N也可以使用二进制前缀指定,例如:50g表示50 GB,2t表示2TB等。如果N既不是零也不是正整数,该目录不存在或不是文件,或者目录立即超过新配额,则会报告错误。
hdfs dfsadmin -clrSpaceQuota <directory>...<directory>
删除每个目录的任何空间配额。 如果目录不存在或为文件,则会报告错误。 如果目录没有配额,则不返回错误。
hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>
为每个目录的存储类型配额设置为N个字节。这是目录树下所有文件的总存储类型使用情况的硬限制。 存储类型配额使用情况反映了基于存储策略的预期使用情况。 例如,复本数3和ALL_SSD存储策略的1GB数据将消耗3GB的SSD配额。 为了方便起见,N也可以使用二进制前缀指定,例如:50g表示50GB,2t表示2TB等。如果N既不是零也不是正整数,该目录不存在或不是文件,或者目录将立即超过新配额,则会报告错误。在选项指定-storageType时,将设置特定于存储类型的配额。 可用的存储类型为**RAM_DISK,DISK,SSD,ARCHIVE**。
hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>
删除为每个目录指定的存储类型配额。如果目录不存在或为文件,则会报告错误。 如果目录没有指定存储类型的存储类型配额,不会错误。 指定-storageType选项时,将清除特定于存储类型的配额。 可用的存储类型为**RAM_DISK,DISK,SSD,ARCHIVE**。
对HDFS的count命令的扩展会报告配置的配额数量以及正在使用的名称配额/空间配合数量:
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>
-q选项:报告每个目录设置的名称配额值,剩余的可用名称配额,设置的空间配额值以及剩余的可用空间配额。如果目录未设置配额,则报告的值为none和inf。
-h选项:以人类可读的格式显示大小。
-v选项:显示标题行
-t选项:选项显示每个存储类型的配额集以及每个目录剩余的可用配额。如果给出了特定的存储类型,则仅显示指定类型的配额和剩余配额。 否则,将显示支持配额的所有存储类型的配额和剩余配额。
内容来源于网络,如有侵权,请联系作者删除!