前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >租户分配hdfs空间问题

租户分配hdfs空间问题

原创
作者头像
Bob hadoop
修改2021-01-05 10:36:52
1.1K0
修改2021-01-05 10:36:52
举报
文章被收录于专栏:日常杂记日常杂记

今天一个租户运行job报错,发现是hdfs空间不足,当时租户入住是有set quota的,于是复习一下

hadoop fs -count 的结果含义

最近要对hdfs上空间使用和文件结点使用增加报警,当超过一定的限额的时候就要发报警好通知提前准备。

代码语言:javascript
复制
[sunwg]$ hadoop fs -count /user/sn001
      2      1    108 hdfs://user/sn001:9000/user/sn001

第一个数值2表示/sunwg下的文件夹的个数,

第二个数值1表是当前文件夹下文件的个数,

第三个数值108表示该文件夹下文件所占的空间大小,这个大小是不计算副本的个数的

代码语言:javascript
复制
[sunwg]$ hadoop fs -count -q -h /user/sn001
     1024         1021 10240 10132       2      1    108 hdfs://user/sn001:9000/user/sn001 

在count后面增加-q选项可以查看当前文件夹的限额使用情况,

第一个数值1024,表示总的文件包括文件夹的限额

第二个数值1021表示目前剩余的文件限额,即还可以创建这么多的文件或文件夹

第三个数值10240表示当前文件夹空间的限额

第四个数值10132表示当前文件夹可用空间的大小,这个限额是会计算多个副本的

剩下的三个数值与-count的结果一样

hadoop dfsadmin -setSpaceQuota 命令

代码语言:javascript
复制
hadoop dfsadmin -setSpaceQuota 3000 /group/d_sdo_data/user/liuxiaowen 

但设定之后,put一个2000多字节的文件时候报错:

代码语言:javascript
复制
12/05/14 15:41:24 WARN hdfs.DFSClient: DataStreamer Exception: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /group/d_sdo_data/user/liuxiaowen is exceeded: quota=3000 diskspace consumed=384.0m   

后来发现原因:

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

代码语言:javascript
复制
hadoop dfsadmin -setSpaceQuota 9000 /group/d_sdo_data/user/bob 

另外,这个动作会覆盖上一次的设置;

清除命令:

代码语言:javascript
复制
 hadoop dfsadmin -clrSpaceQuota /group/d_sdo_data/user/bob 

查看目录限额:

代码语言:javascript
复制
 hadoop fs -count -q /group/d_sdo_data/user/liuxiaowen 
none             inf            9000            8088            6            1                304 hdfs://nn.dc.sh-wgq.sdo.com/group/d_sdo_data/user/liuxiaowen 

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

=====================================================================================

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

设定方法有两种:

Name Quotas:设置某一个目录下文件总数

Space Quotas:设置某一个目录下可使用空间大小

默认情况下Hdfs没有任何配置限制,可以使用  hadoop fs -count 来查看配置情况

hadoop fs -count -q /user/bob

以下是结果,none和inf表示没有设置配额

代码语言:javascript
复制
QUOTA   REMAINING_QUOTA   SPACE_QUOTA    REMAINING_SPACE_QUOTA     DIR_COUNT FILE_COUNT   CONTENT_SIZE FILE_NAME
 none       inf        none        inf         6          15 

1. Name Quotas

     计算公式: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

2. Space Quotas

       计算公式:SPACE_QUOTA – CONTENT_SIZE = REMAINING_SPACE_QUOTA

       可以使用 m, g, t 代表 MB, GB, TB

       启用设定: hadoop dfsadmin -setSpaceQuota 1g /user/seamon/

       清除設定: hadoop dfsadmin -clrSpaceQuota /user/seamon

       这里需要特别注意的是“Space Quota”的设置所看的不是Hdfs的文件大小,而是写入Hdfs所有block块的大小,假设一个文件被切分为2个blocks,在core-site.xml里面设置 dfs.block.size=64MB,dfs.replication=3,那么该文件所需要的存储空间为:2 * 64M * 3 =  384MB

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

3. 其它事项

       hdfs的配额管理是跟着目录走,如果目录被重命名,配额依然有效。

       麻烦的是,在设置完配额以后,如果超过限制,虽然文件不会写入到hdfs,但是文件名依然会存在,只是文件size为0。当加大配额设置后,还需要将之前的空文件删除才能进一步写入。

       如果新设置的quota值,小于该目录现有的Name Quotas 及 Space Quotas,系统并不会给出错误提示,但是该目录的配置会变成最新设置的quota

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hadoop fs -count 的结果含义
  • hadoop dfsadmin -setSpaceQuota 命令
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档