概述
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。设置或者移除配额配置会创建日志条目。
管理员命令
配额由一组仅供管理员使用的命令管理。
1 |
|
为每个目录设置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。
操作实例
设置文件数配额
1 |
|
例如:设置目录下的文件总数为1000个hdfs dfsadmin -setQuota 1000 /p/work
清除配额
1 |
|
设置空间配额
1 |
|
例如:hdfs dfsadmin -setSpaceQuota 9T /p/work
设置目录大小为9T,算上副本,也就是存3T的数据
清除目录大小配额
1 |
|
查看目录占用情况
字段说明
字段 | 说明 |
QUOTA | 目录数+文件数的限制 |
REM_QUOTA | 可用的目录数+文件数 |
SPACE_QUOTA | 字节数限制 |
REM_SPACE_QUOTA | 可用字节数 |
DIR_COUNT | 目录数 |
FILE_COUNT | 文件数 |
CONTENT_SIZE | 当前文件大小 |
PATHNAME | HDFS路径 |
注意:一旦达到配额,即使文件上传不成功,也占用一定的配额,必须清除一些文件目录才能使用
1 |
|
注意:并不是删除0.05GB数据就可以继续使用,20.05GB只是超出20G的一个临界点,并不是说数据写入成功后就占用那么大,最好不要达到临界值
hdfs dfs -put的文件上传超出配额,用hdfs dfs -du 统计不占用空间,但是占用配额,再上传小文件会出错
用spark api写入的文件,超出配额会在目标目录下生成temp目录,但不是有效数据的一部分