Hadoop官方文档——HDFS配额Quota

  |   0 评论   |   6,119 浏览

概述


Hadoop分布式文件系统(HDFS)允许管理员为所使用的名称数量和单个目录使用的空间量设置配额。name quota和space quota独立运作,但这两种配额的管理和实施是相当类似的。


name quota


name quota是对当前目录树中的文件和目录名称的数量的硬限制。如果超出配额,文件和目录创建将会失败。配额与重新命名目录操作绑定;如果操作会导致配额违规,重命名操作将失败。即使目录违反新的配额,设置配额的尝试仍然会成功。新创建的目录没有关联的配额。最大的配额是Long.Max_Value。只等于1的配额会强制一个目录保持为空。 (是的,一个目录也占用配额!)


配额持久化在fsimage中,当集群启动时,如果fsimage中有违反配额的目录(可能是FsImage文件被偷偷地修改了),将会打印出一个warning。设置或者移除配额配置会创建日志条目。


space quota


space quota是该目录树中的文件使用的字节数量的硬限制。如果配额不允许写入完整的块,则块分配失败。一个区块的每个副本都会计入配额。配额重新命名目录;如果操作将导致配额违规,重命名操作将失败。新创建的目录没有关联的配额。最大的配额是Long.Max_Value。零配额仍允许创建文件,但不能将任何块添加到文件中。目录不使用主机文件系统空间,不要计入space quota。用于保存文件元数据的主机文件系统空间不计入配额。配额按照该文件的预期复制因子收费;更改文件的复制因子将会记入或扣除配额。


配额持久化在fsimage中。当集群启动时,如果fsimage中有违反配额的目录(可能是FsImage文件被偷偷地修改了),将会打印出一个warning。设置或者移除配额配置会创建日志条目。


管理员命令


配额由一组仅供管理员使用的命令管理。

dfsadmin -setQuota <N> <directory> ... <directory>

为每个目录设置name quota为N。每个目录的最大效果,如果N不是长整型,该目录不存在或者它是一个文件,或该目录将立即超出新的配额,则报告错误。


dfsadmin -clrQuota <directory> ... <directory>

删除每个目录的任何name quota。每个目录的最佳努力,如果该目录不存在或者是一个文件报告错误。如果目录没有配额,这不是故障。


dfsadmin -setSpaceQuota <N> <directory> ... <directory>

将SpaceQuota设置为每个目录的N个字节。这是目录树下所有文件的总大小的一个硬限制。SpaceQuota也把副本算在内,即1GB的数据副本消耗3GB的配额。为了方便,也可以用二进制前缀指定N。 50g为50GB,2t为2TB等等。每个目录的最佳效果,如果N不是零,也不是长整型,那么目录不存在或者是一个文件,或者该目录将立即超出新的配额。


dfsadmin -clrSpaceQuota <directory> ... <director>

删除每个目录的任何SpaceQuota。每个目录的最佳努力,如果该目录不存在或者是一个文件报告错误。如果目录没有配额,这不是故障。


Report命令


HDFS shell的count命令的扩展名报告配额值以及当前正在使用的名称和字节数。


fs -count -q <directory> ... <directory>

使用-q选项,还会报告为每个目录设置的name quota值,剩余的可用name quota,设置的SpaceQuota值和剩余的可用SpaceQuota。如果目录没有配额设置,则报告的值为none和inf。


操作实例

设置文件数配额

hdfs dfsadmin -setQuota <N> <directory>...<directory>

例如:设置目录下的文件总数为1000个hdfs dfsadmin -setQuota 1000 /p/work

清除配额

hdfs dfsadmin -clrQuota <directory>...<directory>

设置空间配额

hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>

例如:hdfs dfsadmin -setSpaceQuota 9T /p/work

设置目录大小为9T,算上副本,也就是存3T的数据


清除目录大小配额

dfsadmin -clrSpaceQuota <directory>...<director>

查看目录占用情况

image.png

字段说明

字段说明
QUOTA目录数+文件数的限制
REM_QUOTA可用的目录数+文件数
SPACE_QUOTA字节数限制
REM_SPACE_QUOTA可用字节数
DIR_COUNT目录数
FILE_COUNT文件数
CONTENT_SIZE当前文件大小
PATHNAMEHDFS路径


注意:一旦达到配额,即使文件上传不成功,也占用一定的配额,必须清除一些文件目录才能使用

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.DSQuotaExceededException): The DiskSpace quota of /user/caixiaoyu is exceeded: quota = 21474836480 B = 20 GB but diskspace consumed = 21530402406 B = 20.05 GB

注意:并不是删除0.05GB数据就可以继续使用,20.05GB只是超出20G的一个临界点,并不是说数据写入成功后就占用那么大,最好不要达到临界值

 

hdfs dfs -put的文件上传超出配额,用hdfs dfs -du 统计不占用空间,但是占用配额,再上传小文件会出错

用spark  api写入的文件,超出配额会在目标目录下生成temp目录,但不是有效数据的一部分


读后有收获可以支付宝请作者喝咖啡