HDFS配额指南
Posted 杉沐先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS配额指南相关的知识,希望对你有一定的参考价值。
以下内容均翻译自官方文档.
概述
HDFS支持管理员对名称使用数量和单个目录使用空间大小设置配额。名称配额和空间配额是独立运作的,但这两种配额的管理和执行是紧密关联的。
名字配额
名称配额是对以该目录为根的树中文件和目录名称的数量的硬限制。如果超过配额,则创建文件和目录失败。配额将与重命名的目录保持一致;如果操作会导致配额冲突,则重命名操作失败。即使目录违反新配额,设置配额的尝试仍将成功。新创建的目录没有关联的配额。最大配额为Long.Max_Value。配额为1,强制目录保持为空。(是的,一个目录会计算它自己的配额!)
名字配额通过fsimage持久化。当启动时,如果fsimage 违反了配额(也许fsimage被偷偷修改了),每个这样的违规都会打印一个警告。设置或删除配额将创建日记帐分录。
空间配额
空间配额是对以该目录为根的树中的文件所使用的字节数的硬限制。如果配额不允许写入完整的块,则块分配将失败。块的每个副本都按配额计算。配额将与重命名的目录保持一致;如果重命名操作会导致配额冲突,则重命名操作失败。新创建的目录没有关联的配额。最大配额为Long.Max_Value。配额为零仍然允许创建文件,但不能向文件添加块。目录不使用主机文件系统空间,也不计入空间配额。用于存储文件元数据的主机文件系统空间不计入配额。配额按文件的预期复制因子计费;更改文件的复制因子将贷记或借记配额。
空间配额通过fsimage持久化。当启动时,如果fsimage违反了配额(也许fsimage被偷偷修改了),每个这样的违规都会打印一个警告。设置或删除配额将创建日记帐分录。
存储类型配额
存储类型配额是对以该目录为根的树中的文件对特定存储类型(SSD、DISK、ARCHIVE)的使用进行硬限制。其工作原理与存储空间配额类似,但对集群存储空间使用情况进行细粒度控制。为目录设置存储类型配额时,需要在目录上配置存储策略,以便根据存储策略将文件存储在不同的存储类型中。更多信息,请参见《HDFS存储策略文档》。
存储类型配额可以与空间配额、名称配额结合使用,有效管理集群存储使用情况。例如:
对于设置了存储策略的目录,管理员应为资源约束存储类型(如SSD)设置存储类型配额,其他存储类型保留配额,以及总空间配额,限制值较小或默认无限制。HDFS会根据存储策略和整体空间配额,从目标存储类型中扣除配额。
对于未配置存储策略的目录,管理员不应配置存储类型配额。即使特定存储类型不可用(或可用但未正确配置存储类型信息),也可以配置存储类型配额。但是,在这种情况下,建议使用整体空间配额,因为存储类型信息不可用或不准确,以便执行存储类型配额。
DISK上的存储类型配额的使用有限,除非DISK不是主要存储介质。(例如。群集,主要为ARCHIVE存储)。
管理命令
配额由一组仅管理员可见的命令来管理。
hdfs dfsadmin -setQuota <N> <directory>...<directory>
设置每个目录的名称配额为N。每个目录尽力而为,如果N不为正长整数、目录不存在、目录为文件、目录立即超出新的配额,则报错误。hdfs dfsadmin -clrQuota <N> <directory>...<directory>
为每个目录删除任何名称配额。每个目录尽力而为,如果目录不存在或是一个文件,则报告错误。如果目录没有配额,则不是故障。hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
设置每个目录的空间配额为N字节。这是对目录树下所有文件的总大小的硬限制。空间配额也考虑了复制,即复制为3的1GB数据消耗3GB配额。也可以用二进制前缀指定N,例如50g为50G字节,2t为2TB等。每个目录的尽力而为,如果N既不为零也不是正整数,则报告错误。目录不存在或是一个文件,或者目录将立即超出新的配额。hdfs dfsadmin -clrSpaceQuota <N> <directory>...<directory>
为每个目录删除任何空间配额。每个目录尽力而为,如果目录不存在或是一个文件,则报告错误。如果目录没有配额,则不是故障。hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>
设置存储类型配额为每个目录指定存储类型的N字节。这是对目录树下所有文件的总存储类型使用量的硬限制。存储类型配额使用量反映了存储策略的预期使用量。例如,复制为3,存储策略为ALL_SSD的1GB数据消耗了3GB的SSD配额。也可以用二进制前缀指定N,例如50g为50G字节,2t为2TB等。每个目录的尽力而为,如果N既不为零也不是正整数,则报告错误。目录不存在或是一个文件,或者目录将立即超出新的配额。指定-storageType选项时设置存储类型特定配额。存储类型包括:RAM_DISK、DISK、SSD、ARCHIVE。
hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>
删除为每个目录指定的存储类型配额。每个目录尽力而为,如果目录不存在或是一个文件,则报告错误。如果目录没有指定存储类型的存储类型配额,则不属于故障。当指定-storageType选项时,将清除存储类型特定的配额 。存储类型包括:RAM_DISK、DISK、SSD、ARCHIVE。
报告命令
HDFS shell的count命令的一个扩展报告配额值以及当前使用的名称和字节数的计数。
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]]
…
使用-q选项,报告包括每个目录设置的名称配额值、剩余可用名称配额、空间配额值集和剩余可用空间配额。如果目录没有配额集,则上报值为none和inf。-h选项以人类可读格式显示大小。-v选项显示标题行。-t选项显示每个存储类型的配额集和每个目录的剩余可用配额。如果-t选项后指定了特定的存储类型,则只显示指定类型的配额和剩余配额。否则,将显示所有支持配额的存储类型的配额和剩余配额。
以上是关于HDFS配额指南的主要内容,如果未能解决你的问题,请参考以下文章