hadoop设置目录配额-setSpaceQuota

hadoop设置目录配额-setSpaceQuota

在多人共用HDFS的环境下,配置设置非常重要。特别是在Hadoop处理大量资料的环境,如果没有配额管理,很容易把所有的空间用完造成别人无法存取。Hdfs的配额设定是针对目标而不是针对账号,所有在管理上最好让每个账号仅操作某一个目录,然后对目录设置配置。

设定方法有两种:

  • Name Quotas:设置某一个目录下文件总数
  • Space Quotas:设置某一个目录下可使用空间大小

Hadoop可以通过该命令可以来限定某个hdfs目录的大小:

设置配额

设置100G的目录配额,

1
hadoop dfsadmin -setSpaceQuota 100g /user/shining

设置为3m的目录配额,默认单位是字节

1
hadoop dfsadmin -setSpaceQuota 3000000 /temp/shining

这里统计空间的时候会将备份数也考虑在里面,因为集群设置了备份数为3,所以hadoop dfsadmin -setSpaceQuota也要讲备份数考虑进去,

在core-site.xml里面设置 dfs.block.size=64MB,dfs.replication=3 ,如果一个小文件(例如,1k大小的文件)被上传到hdfs,该文件并不能占满一整个blok,但是按照hdfs配置规则也需要按照一个blok计算,即存储空间为:1 x 64MB x 3 = 192MB

查看目录配额
1
2
3
4
5
6
[hadoop@shining-host~]$ hadoop fs -count -q /user/shining
none inf 107374182400 66658430073 97 3512 5193489830 /user/shining

依次表示为:文件数限额 可用文件数 空间限额 可用空间 目录数 文件数 总大小 文件/目录名

hadoop fs -count -q -h /user/shining 显示带单位
清楚配额
1
hadoop dfsadmin -clrSpaceQuota /user/shining
设置文件数
1
2
3
4
计算公式:QUOTA – (DIR_COUNT + FILE_COUNT) = REMAINING_QUOTA
这里的 10000 是指 DIR_COUNT + FILE_COUNT = 10000,最大值為 Long.Max_Value
启用设定:hadoop dfsadmin -setQuota 10000 /user/seamon
清除設定: hadoop dfsadmin -clrQuota /user/seamon
其他
  • hdfs的配额管理是跟着目录走,如果目录被重命名,配额依然有效。
  • 在设置完配额以后,如果超过限制,虽然文件不会写入到hdfs,但是文件名依然会存在,只是文件size为0。当加大配额设置后,还需要将之前的空文件删除才能进一步写入。
  • 如果新设置的quota值,小于该目录现有的Name Quotas 及 Space Quotas,系统并不会给出错误提示,但是该目录的配置会变成最新设置的quota
感谢您的支持!