HDFS配额管理功能允许管理员限制用户目录可以使用的文件数量和存储空间,防止单个目录占用过多资源。
名称配额
名称配额限制指定目录下可以包含的文件和目录总数。超过配额限制时,创建新文件或目录的操作将被拒绝。
配额规则
配额设置在目录上,适用于该目录及其所有子目录。
一个文件或目录会占用其父目录的一个配额。
配额检查在NameNode上进行。
当配额达到限制时,写入操作会失败。
常用命令
| 操作类型 | 操作命令 |
|---|---|
| 设置名称配额 | hdfs dfsadmin -setQuota <quota> <directory> # 示例:设置/app目录的名称配额为10000 hdfs dfsadmin -setQuota 10000 /app |
| 清理名称配额 | hdfs dfsadmin -clrQuota <directory> # 示例:清理/app 目录的名称配额 hdfs dfsadmin -clrQuota /app |
空间配额
空间配额限制指定目录可以使用的磁盘空间总量。空间配额考虑所有副本的总占用空间。它解决的是“某个目录最多能占用多少磁盘空间”的问题,常用于多租户环境下的资源管控(如限制用户目录的存储上限)。
关键点
配额对象是目录,不是用户或文件。
配额是硬限制,超过后写入操作直接失败,不会等待或降级。
空间配额与名称配额(限制文件/目录个数)相互独立,可单独设置。
计算规则
空间配额的计算方式与直觉略有不同,需要特别注意:
按块(Block)计算,而非按文件大小
文件写入HDFS 时会被切分为多个 block(默认 256MB)。配额检查发生在块分配阶段,如果当前配额不允许再分配一个完整的块,则写入失败。
副本计入配额
每个block 的所有副本都会计入配额。
例如:配额设置为1000MB,目录下已经写入了一个200MB的文件,此时再写入一个100MB 的文件(需要分配1 个 block),虽然实际写入数据量(100MB * 3) + 已使用空间(200MB * 3)并未超出配额,但实际检查的是“能否再分配一个 256MB 的块”,所以计算公式是分配1个block的数据量(256MB * 3) + 已使用空间(200MB * 3),由于超过了配额限制,所以写入会失败。
常用命令
| 操作类型 | 操作命令 |
|---|---|
| 设置空间配额 | hdfs dfsadmin -setSpaceQuota <quota> <directory> # 示例:设置/app目录的空间配额为1000MB hdfs dfsadmin -setSpaceQuota 1048576000 /app |
| 清理空间配额 | hdfs dfsadmin -clrSpaceQuota <directory> # 示例:清理/app 目录的空间配额 hdfs dfsadmin -clrSpaceQuota /app |