Hadoop HDFS-配额(Quotas)

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

图片

中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:

Web服务器

代理服务器

ZooKeeper

Kafka

RabbitMQ

Hadoop HDFS(本章节)

HDFS作为一个类Linux的目录的树形目录,我们业务在使用HDFS的时候也会根据不同的应用放置在不同的目录,或者不同环境使用不同的目录,实际这个和ZooKeeper的目录结构结构类似。我们对单个目录的限制,就是我们要讲的配额内容。

HDFS(Hadoop Distributed File System)的配额(Quotas)是HDFS一个重要管理功能,分别用于容量/命名空间控制。下面详细解释它们的概念、用途和操作:

HDFS 配额 (Quotas)

配额用于限制HDFS目录能使用的资源量,防止单个用户或应用占用过多空间或文件数,确保集群资源公平使用和稳定性。

1. 配额类型
  • 空间配额 (Space Quota):限制目录及其所有子目录占用的总物理存储空间(字节数)。超过配额时,任何写入该目录或其子目录的操作都会失败。

  • 命名空间配额 (Namespace Quota):限制目录下允许的文件和子目录总数(包括自身)。超过配额时,无法在该目录下创建新文件或子目录。

2. 关键命令
  • 设置空间配额

hdfs dfsadmin -setSpaceQuota <quota> <directory>
# 示例:设置 /user/alice 目录空间配额为 1TB
[root@node1 ~]# hdfs dfsadmin -setSpaceQuota 500m /test1
[root@node1 ~]# hdfs dfs -put apache-zookeeper-3.8.1-bin.tar.gz /test1
[root@node1 ~]# hdfs dfs -count -q /test1
        none             inf       524288000       484164113            1            3           13374629 /test1
[root@node1 ~]# du -sh apache-zookeeper-3.8.1-bin.tar.gz 
13M	apache-zookeeper-3.8.1-bin.tar.gz
[root@node1 ~]# 

none:命名空间配额未设置(无文件数量限制)

inf:命名空间剩余额度为无限(因为未设置配额)

524288000:空间配额总额度(500MB,即 500×1024×1024=524288000 字节)

484164113:空间剩余额度(总配额 - 已使用空间 = 524288000 - 40123887 = 484164113 字节,约 461MB)

后续字段:目录数(1)、文件数(3)、文件总大小(13374629 字节≈13MB,未计算副本)、路径(/test1)

[root@node1 ~]# hdfs dfs -put apache-zookeeper-3.8.1-bin.tar.gz /test1
put: The DiskSpace quota of /test1 is exceeded: quota = 1048576 B = 1 MB but diskspace consumed = 402671535 B = 384.02 MB

这个是配额不够的时候上传错误提示,设置是1m,但是提示需要384m(这里取的值应该是128M*3,而非真实文件大小)。

  • 设置命名空间配额

hdfs dfsadmin -setQuota <quota> <directory>
# 示例:设置 /user/alice/project 目录最多包含 10000 个文件/目录
[root@node1 ~]# hdfs dfsadmin -setQuota 10 /test2
[root@node1 ~]# hdfs dfs -count /test2
           1            0                  0 /test2
[root@node1 ~]# hdfs dfs -count -q /test2
          10               9            none             inf            1            0                  0 /test2
[root@node1 ~]# 

这里显示命名空间配额是10个文件,剩余9个(包括目录本身)。

  • 清除配额

hdfs dfsadmin -clrSpaceQuota <directory>  # 清除空间配额
hdfs dfsadmin -clrQuota <directory>        # 清除命名空间配额

3. 重要注意事项

  • 配额继承:配额仅作用于设置目录及其子目录,不向上继承。

  • 硬性限制:超限会导致写入/创建操作立即失败(返回QuotaExceededException)。

  • Replication影响:空间配额计算的是实际物理存储(含副本),例如1GB文件(副本因子3)占用约3GB空间。

  • 目录本身计数:命名空间配额包含目录自身(即空目录已占用1个名额)。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值