【Hadoop学习】Hadoop配额实战

在HDFS中,管理员可以为每一个目录设置基于名称或者空间上的配额。可以设置名称配额和空间配额,名称配额和空间配额可以单独设置。

名称配额(Name Quota)

名称配额是在对应的目录下所有文件和目录名称的数量上的限制。当超过这个配额的时候,文件或目录就会创建失败,重命名后名称配额仍然有效。如果重命名操作违反配额的限制,那么重命名会失败,新建的目录不会有任何配额设置,名字配额的上限是Long.Max_Value,如果配额为1,那么这个目录会强制为空,因为目录自身也会占用1个配额。配额的设置是持久化在fsimage中,如果fsimage发现违反了配额限制,会输出警告。

只有管理员可以设置名称配额和空间配额。下面的命令设置/清理名称配额:

1
2
3
4
5
6
# 设置目录的名称配额
hdfs dfsadmin -setQuota N <DirName>
# 清除目录的名称配额
hdfs dfsadmin -clrQuota <DirName>
# 查询目录的配额和当前可用余额
hdfs dfs -count -q <DirName>

空间配额(Space Quota)

空间配额是目录的空间大小限制。如果超过这个配额,块写入操作会失败。副本也算配额中的一部分。空间配额为0的时候,可以创建文件,但是不能向文件中写入内容。创建空间配额的命令如下:

1
2
3
4
5
6
# 设置目录的空间配额
hdfs dfsadmin -setSpaceQuota <quota> <dirname>...<dirname>
# 清除目录的空间配额
hdfs dfsadmin -clrSpaceQuota <dirname>...<dirname>
# 查询目录的配额和当前可用余额
hdfs dfs -count -q <DirName>

其中可以通过

1
fs -count -q directory ... directory

使用-q选项,可以显示目录的名称配额,剩余名称配额,空间配额,可用空间配额。如果目录没有设置配额,会显示为none和inf。