hdfs quota(SapceQuota是物理空间)


说明:hadoop2.7和3.2均有测试,spaceQuota是物理空间!

说明

关于hdfs quota,参见2篇博客的讲解。

  1. https://blog.csdn.net/qq_28069577/article/details/90262992
  2. https://blog.csdn.net/picway/article/details/80373078

测试

对于测试,以本文为准
查看块和副本:

[hadoop@hadoop1 test]$ hadoop fs -stat "%o %r"  /quota/128m_2
134217728 3

可知,块为128M的集群。
设10个nameQuota和1024M的spaceQuota,注意:这里的spaceQuota是物理空间!你申请的是物理空间!

hadoop fs -mkdir /quota
dd if=/dev/zero of=128m bs=1M  count=128

# 设置quota 10 和 1024M
hadoop dfsadmin -setQuota 10 /quota
hadoop dfsadmin -setSpaceQuota 1024m /quota

# 初始查看
hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf             1 G             1 G            1            0                  0 /quota

# 上传一个128M块
hdfs dfs -copyFromLocal 128m /quota/128m_1

# 查看,可知nameQuota占2个,原因是一个目录,一个文件。
# spaceQuota居然剩余640M,原因是三副本,128*3=384M。1024-384M=640M
hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
          10               8             1 G           640 M            1            1              128 M /quota

# 再上传一个128M的文件
hdfs dfs -copyFromLocal 128m /quota/128m_2

# 再查看,可知nameQuota占用两文件一目录,还剩7个。
# spaceQuota占用128*2*3=768M,还剩256M
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
          10               7             1 G           256 M            1            2              256 M /quota

# 上传第三个文件时报错
[hadoop@hadoop1 test]$ hdfs dfs -copyFromLocal 128m /quota/128m_3
copyFromLocal: The DiskSpace quota of /quota is exceeded: quota = 1073741824 B = 1 GB but diskspace consumed = 1207959552 B = 1.13 GB

可知,申请1024M的空间,只能放128M的文件2个,因为两个128M的逻辑空间有256M,物理空间已经是768M了!


1.小文件测试

当上传10M后,是占用128M还是10M呢?答案是10M。

hadoop fs -copyFromLocal 10m /quota/10m_1
[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota/10m_1
# 1024M,上传10M后,占用30M
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
          10               8             1 G           994 M            1            1               10 M /quota
2.设小块

测试1:设置50M的quota

hadoop fs -mkdir /quota50
# 设50M
hadoop dfsadmin -setSpaceQuota 50m /quota50
# 查看quota
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota50
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf            50 M            50 M            1            0                  0 /quota50
# 上传10M,上传不了
[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota50/10m_1
copyFromLocal: The DiskSpace quota of /quota50 is exceeded: quota = 52428800 B = 50 MB but diskspace consumed = 402653184 B = 384 MB

可以看到,即使设置50M的quota,上传一个文件,也是不能上传的。10M的文件也要占用128的空间,需要3个块,所以需要128*3M=384M的空间。

测试2:我们设置200M的quota

hadoop fs -mkdir /quota200
hadoop dfsadmin -setSpaceQuota 200m /quota200

# 查看quota
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota200
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf           200 M           200 M            1            0                  0 /quota200

200M是128M+72M。我们上传一个10M的,仍然上传不了。仍然需要384M的空间。

[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota200/10m_1
copyFromLocal: The DiskSpace quota of /quota200 is exceeded: quota = 209715200 B = 200 MB but diskspace consumed = 402653184 B = 384 MB

测试3:那么,我们建400M的quota,能否传两个10M呢?

[hadoop@hadoop1 test]$ hadoop fs -mkdir /quota400
[hadoop@hadoop1 test]$ hadoop dfsadmin -setSpaceQuota 400m /quota400

# 查看quota
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota400
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf           400 M           400 M            1            0                  0 /quota400

# 上传10M
[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota400/10m_1

# 查看quota
[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota400
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf           400 M           370 M            1            1               10 M /quota400

# 看到第一次上传10M,占用了30M,剩余370M

# 第二次上传失败!
[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota400/10m_2
copyFromLocal: The DiskSpace quota of /quota400 is exceeded: quota = 419430400 B = 400 MB but diskspace consumed = 434110464 B = 414 MB

结论:设置quota一定要设置块大小(128M)的倍数!

测试4:1024M的quota可以分8个block块,那么上传10M的文件,能上传多少个呢?
是不是一个10M占3个块,最多传2个10M(第三个就是9个块)呢,答案:不是的。
上传15个10M后,查看quota:

[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf             1 G           574 M            1           15              150 M /quota

上传22个文件后,查看quota:

[hadoop@hadoop1 test]$ hadoop fs -count -q -v -h /quota
       QUOTA       REM_QUOTA     SPACE_QUOTA REM_SPACE_QUOTA    DIR_COUNT   FILE_COUNT       CONTENT_SIZE PATHNAME
        none             inf             1 G           364 M            1           22              220 M /quota

上传第23个时,出错:

[hadoop@hadoop1 test]$ hadoop fs -copyFromLocal 10m /quota/10m_23
copyFromLocal: The DiskSpace quota of /quota is exceeded: quota = 1073741824 B = 1 GB but diskspace consumed = 1094713344 B = 1.02 GB

可以分析出,最后一个文件,必须要先留有128*3=384M的空间,但是实际占用是文件自己的大小。设置quota最小为128*3=384M的空间,否则再小的文件也传不了。

总结

  1. 对于3副本,必须要要留有3个块的大小即128M*3=384M的空间,才能上传文件。
  2. 实际占用大小是文件自己的大小。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值