HDFS配额操作实战

在HDFS中,管理员可以通过为每一个目录设置一定名称和空间上的配额。名称配额和空间配额可以单独设置,但是从管理上和实现上,这两种配额接近平行。
名称配额(name quota)是在该目录下所有文件和目录名称的数量上的硬限制。当超过这个配额设置时,文件或目录就会创建失败。重命名后命名配额仍然起作用。如果重命名操作违反配额的限制,那么重命名会失败。新建的目录不会有任何配额设置。名字配额的上限是Long.Max_Value,如果配额为1那么这个目录会强制为空,因为目录自身也会占用1个配额。配额的设置被持久化在fsimage中,当启动后,如果fsimage发现违反了配额限制,这输出警告。另外,设置或删除配额会创建一个空的日志。
只有管理员可以设置名称配额和空间配额,下面的命令设置/清理名称配额。N需要是一个正整数。
dfsadmin -setQuota N directory...directory
dfsadmin -clrQuota directory...directory
例如,下面对于/data目录限制3个名称配额:

空间配额(space quota)是目录的空间大小限制。如果超过这个配额,块写入操作会失败。副本也算配额中的一部分(GB的数据并且一共三个副本那么会消耗3GB的空间配额)。配额为0时,文件可以被创建,但是不能向文件中写入块。创建空间配额的命令如下,N可以有是5g,50GB,2t,2TB等。如果N是负数,那么则不能创建文件或写入任何数据。
dfsadmin -setSpaceQuota ...
dfsadmin -clrSpaceQuota ...

另外,通过fs -count -q directory...directory命令,使用-q选项,可以显示目录的名称配额,剩余名称配额,空间配额,可用空间配额。如果目录没有设置配额,会显示为none和inf。

​参考:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsQuotaAdminGuide.html

Posted in BigData, Hadoop, Ops.