【配额】
HDFS中,配额用于限制目录的使用空间,具体可分为名称配额和空间配额。
空间配额指的是单个目录中所有文件总的大小限制,文件副本的大小也计算在内。
名称配额指的是根目录树中的文件和目录的最大数量,即递归计算子目录,孙子目录下的文件和目录数。
通过如下命令可以对具体目录设置其配额:
# 设置名称配额
# max_number 为最大文件/目录数
# dirname 为指定的目录
hdfs dfsadmin -setQuota <max_number> <dirname>
# 设置空间配额
# bytes 为最大存储字节数
hdfs dfsadmin -setSpaceQuota <bytes> <dirname>
通过如下命令可以查看目录的配额情况:
hdfs dfs -count -q /tmp/hncscwc
# 显示结果
# 名称配额大小 名称配额剩余大小 空间配额大小 空间配额剩余大小 目录数 文件数 文件大小 目录的路径
none inf 536870912 536870912 1 0 0 /tmp/hncscwc
通过如下命令可以清除配额:
# 清除名称配额
hdfs dfsadmin -clrQuota <dirname>
# 清除空间配额额
hdfs dfsadmin -clrSpaceQuota <dirname>
【内部实现】
【能否针对用户进行配额的设置】
在HDFS中有用户、用户组的概念,即每个文件/目录属于指定用户、用户组。同时可以通过开启ACL,为文件/目录设置访问权限。这样HDFS也就支持多用户了。
在多用户的真实场景中,通常是以用户为单位来设置配额,即某个用户能使用多大的空间。对照HDFS的配额,可能就需要指定某个用户能写哪些目录,然后为这些目录分别设置配额,来实现用户配额的功能。
那么,HDFS能否支持直接按照用户来进行配额呢?或者说,如果要支持按照用户来进行配额,HDFS需要做哪些改动呢?
首先要考虑到的就是,用户的配额信息需要进行持久化的存储,因此需要添加对应的editlog操作,同时fsiamge中也需要进行对应的存储(即改变fsiamge的存储信息),然后每个文件进行写操作,文件拷贝,快照等操作时,需要判断是否超过用户的配额。此外在联邦的场景中,考虑的情况会更复杂。
到目前为止,官方的版本中是不支持对用户进行配额的设置的。
在社区中,看到有类似的问题讨论,但没有实际结论或计划进行相应的设计开发。
(详见HDFS-8575:https://issues.apache.org/jira/browse/HDFS-8575)
【FAQ】
对某个目录设置了配额,如果将该目录改名会怎样?
从上面的内部实现中可以知道,配额是目录属性的一部分,通过mv将目录改名,在HDFS中,该目录对应的inode没有变化,因此配额信息仍旧是跟随该目录一起的。
hdfs dfsadmin -setSpaceQuota 536870912 /tmp/hncscwc
hdfs dfs -count -q /tmp/hncscwc
none inf 536870912 536870912 1 0 0 /tmp/hncscwc
hdfs dfs -mv /tmp/hncscwc /tmp/spurs
hdfs dfs -count -q /tmp/hncscwc
none inf 536870912 536870912 1 0 0 /tmp/spurs
子目录的配额能否大于父目录的配额?
子目录的配额可以大于父目录的配额,也就是说,HDFS的实现中,设置配额时,并没有逐级往上去判断父目录的配额情况。
但是,在真正进行文件存储的时候,就会逐级往上判断是否超过父目录,祖父目录等的配额,如果超过则写入失败。
hdfs dfs -count -q /tmp/hncscwc /tmp/hncscwc/hadoop
none inf 536870912 536870912 2 0 0 /tmp/hncscwc
none inf 1073741824 1073741824 1 0 0 /tmp/hncscwc/hadoop
【总结】
本文简单总结了HDFS配额相关的原理,欢迎指正交流。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有