Hadoop HDFS Quota配置

hadoop HDFS有以下两种Quota

Name Quotas : 限制某个目录下的文件数量
Space Quotas : 设置某个目录的空间大小

$hadoop fs -count -q /user/hadoop
QUOTA       REMAINING_QUOTA  SPACE_QUOTA  REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT CONTENT_SIZE FILE_NAME
none        inf               none        inf           		  2            1          180         /user/hadoop


上面各项内容分别是
QUOTA : 命名空间的quota(限制文件数)	
REMAINING_QUOTA : 剩余的命名空间quota(剩余能创建的文件数目)
SPACE_QUOTA : 物理空间的quota (限制磁盘空间占用大小)
REMAINING_SPACE_QUOTA : 剩余的物理空间
DIR_COUNT : 目录数目
FILE_COUNT : 文件数目
CONTENT_SIZE: 目录逻辑空间大小
FILE_NAME : 路径

设置Space Quota


$ls -l hadoop2.txt 
-rw-r--r-- 1 root root 180 Mar  7 13:35 hadoop2.txt

$hadoop dfs -put hadoop2.txt 

$hadoop fsck /user/hadoop
 Total size:    180 B
 Total dirs:    2
 Total files:   1
 Total blocks (validated):      1 (avg. block size 180 B)

$hadoop dfsadmin -setSpaceQuota  1g /user/hadoop

$hadoop fs -count -q /user/hadoop 
QUOTA       REMAINING_QUOTA  SPACE_QUOTA  REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT CONTENT_SIZE FILE_NAME         
none             inf         1073741824      1073741284            2            1            180     /user/hadoop

hadoop fsck出来目录的大小是180字节,但是查quota,发现CONTENT_SIZE是180,但是SPACE_QUOTA-REMAINING_SPACE_QUOTA是540。这里就是涉及到两个概念,物理空间和逻辑空间。
物理空间:文件实际占用HDFS的大小(包含replication)
逻辑空间:文件本身的大小,是逻辑上占用HDFS的大小。
物理空间 = 逻辑空间 * Replication数量

hadoop fsck出来和hadoop fs -count 出来的CONTENT_SIZE指的都是逻辑空间,而物理空间是逻辑空间*备份数
如果replication是3
REMAINING_SPACE_QUOTA = SPACE_QUOTA - CONTENT_SIZE * 3

测试目录空间Quota


如果put一个文件大小超过quota配置的额度,怎会报错
org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/hadoop is exceeded: quota = 1073741824 B = 1 GB but diskspace consumed = 1232962272 B = 1.15 GB

清除Space Quota


$hadoop dfsadmin -clrSpaceQuota /user/hadoop

设置Name Quota


设置文件最大quota是1000
$hadoop dfsadmin -setQuota 1000 /user/hadoop

$hadoop fs -count -q /user/hadoop 
QUOTA       REMAINING_QUOTA  SPACE_QUOTA  REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT CONTENT_SIZE FILE_NAME         
1000             997         1073741824      1073741284            2            1            180     /user/hadoop

清除Name Quota


$hadoop dfsadmin -clrQuato /user/hadoop

标签:Hadoop, HDFS