@changedi
2017-03-23T10:39:42.000000Z
字数 1563
阅读 2359
大数据
HDFS
原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-project-dist/hadoop-hdfs/HdfsQuotaAdminGuide.html
HDFS允许管理员为独立的目录使用的名字数和空间大小设置quota配额。名字配额和空间配额操作互相独立,但是两类quota的管理和实现是紧密并行的。
名字配额是对目录树中文件和目录的名字数目的严格限制。如果超出配额,那么创建文件和目录都将失败。配额与重命名目录绑定;重命名操作会失败,因为可能会导致配额冲突。但是设置quota仍旧可以成功,就算目录处于冲突状态。一个新建的目录没有关联的quota。quota的最大值是Long.Max_Value
。 如果一个quota设置为1则强制目录保持空目录。(目录自己占用一个配额)
配额是随着fsimage一起持久存储的。启动时,如果fsimage遇到了quota的冲突(可能是fsimage被私自修改),那么每条冲突都会打印出一条警告信息。设置或者移除一个quota都会创建一条日志项。
空间配额是目录树种文件使用最大字节数的严格限制。如果配额超限,block分配会失败。block的每个副本都计算quota。配额与重命名目录绑定;重命名操作会失败,因为可能会导致配额冲突。一个新建的目录没有关联的quota。quota的最大值是Long.Max_Value
。一个设置为0的quota允许创建文件,但是创建的文件无法分配block。目录不占用主机文件系统空间,也不计入空间配额。主机文件系统空间用来存储文件元数据的部分也不计入空间配额。配额按照文件的复制因子来计算消耗;改变一个文件的复制因子,会导致quota配额的消耗。
配额是随着fsimage一起持久存储的。启动时,如果fsimage遇到了quota的冲突(可能是fsimage被私自修改),那么每条冲突都会打印出一条警告信息。设置或者移除一个quota都会创建一条日志项。
配额通过一系列命令来管理,这些命令只能由管理员来提供。
dfsadmin -setQuota <N> <directory>...<directory>
为每个目录设置名字配额为N。如果N不是一个正值,或者目录不存在或是个文件,或者目录超出新的quota,都会报错。
dfsadmin -clrQuota <directory>...<directory>
移除每个目录的名字配额。如果目录不存在或是一个文件,会报错。如果一个目录没有quota,那么不会报错。
dfsadmin -setSpaceQuota <N> <directory>...<directory>
为每个目录设置空间配额。这是目录树下所有文件的总大小的严格限制。空间配额对于副本的大小也计入配额消耗,比如一份1GB的数据有3个副本,那么消耗3GB的配额。为了方便,N可以声明一个前缀,比如50g就是50个GB,2t就是2个TB等。如果N是负数或者目录不存在或它是个文件,或者目录超出新的quota,都会报错。
dfsadmin -clrSpaceQuota <directory>...<director>
移除每个目录的空间配额。如果目录不存在或是一个文件,会报错。如果一个目录没有quota,那么不会报错。
HDFS shell count命令的扩展,会报告quota值和当前使用了的名字和字节的count。
fs -count -q <directory>...<directory>