HDFS的配额

1.名称配额

(*)Hadoop分布式文件系统( HDFS )允许管理员为使用的名字(name)数量和用于各个目录的空间设置配额。名字配额和空间配额独立运行,但两种类型配额的管理和实施密切平行。

名称配额是对以该目录为根的树中文件和目录名称数量的硬限制。如果超过配额,创建文件和目录将会失败。配额与重命名的目录保持一致;如果重命名操作将导致配额冲突,则重命名操作将失败。即使目录违反新配额,设置配额的尝试仍将成功。新创建的目录没有关联的配额。最大的配额是 Long.Max_Value。配额为1会强制目录保持为空。(目录将根据其自身的配额进行计数,目录本身占用1个配额) )

配额随着fsimage一起持久化。启动时,如果fsimage立即违反配额(可能是秘密修改了fsimage ),则会为每个此类违规打印警告。设置或删除配额将创建日志记录。
实际个数:N-1
[-setQuota <quota > <dirname >... <dirname >]
[-clrQuota <dirname >... <dirname >]

hdfs dfs -mkdir /quota1
设置该目录的名称配额:3
hdfs dfsadmin -setQuota 3 /quota1

当我们放第三个文件的时候
hdfs dfs -put data.txt /quota1
put: The NameSpace quota (directories and files) of directory /quota1 is exceeded: quota=3 file count=4

HDFS的配额

2.空间配额

空间配额是对根位于该目录的树中的文件使用的字节数的硬限制。如果配额不允许写入完整块,则块分配就会失败。块的每个副本都将根据配额进行计数。配额与重命名的目录保持一致,重命名文件夹后配额还是起作用;如果重命名操作将导致配额冲突,则重命名操作将失败。新创建的目录没有关联的配额。最大的配额上限是 Long.Max_Value。配额为零仍然允许创建文件,但不能向文件中添加任何块。目录不使用主机文件系统空间,也不计入空间配额。用于保存文件元数据的主机文件系统空间不计入配额。配额按文件的预期副本因子计数;更改文件的副本因子将计入或扣除配额。

配额随着fsimage一起持久化。启动时,如果fsimage立即违反配额(可能是秘密修改了fsimage ),则会为每个此类违规打印警告。设置或删除配额将创建日志记录。

[-setSpaceQuota <quota > [-storageType <storagetype >] <dirname >... <dirname >]
[-clrSpaceQuota [-storageType <storagetype >] <dirname >... <dirname >]

dfs -mkdir /quota2
设置该目录的空间配额是:10M
hdfs dfsadmin -setSpaceQuota 10M /quota2

正确的做法:hdfs dfsadmin -setSpaceQuota 130M /quota2

放一个小于10M的文件,会出错
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.DSQuotaExceededException): The DiskSpace quota of /quota2 is exceeded: quota = 10485760 B = 10 MB but diskspace consumed = 134217728 B = 128 MB

注意:尽管数据不到128M,但是占用的数据块依然是128M
切记:当设置空间配额的时候,这个值不能小于128M