`
nlslzf
  • 浏览: 1026280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HDFS quota 設定

 
阅读更多

http://fenriswolf.me/2012/04/04/hdfs-quota-%E8%A8%AD%E5%AE%9A/

 

在多人共用的狀況下,quota 的設定非常重要。尤其是在 Hadoop 處理大量資料的環境,不小心就容易把所有的空間用完造成別人無法存取

Hadoop quota 的設定是針對目錄,而不是針對帳號。所以在管理上最好讓每個帳號只能寫入某一個目錄(例如 /user/fenriswolf),然後對各別目錄加上 quota 設定
設定方式有兩種

  • Name Quotas : 等於 ulimit 裡的 hard limit,也就是設定某個目錄下檔案及目錄的總數
  • Space Quotas : 設定某個目錄下使用的空間大小

預設是沒有任何 quota 限制的,可以用 hadoop fs -count 來看

1 hadoop fs -count -q /user/fenriswolf

 

以下是結果,none 及 inf 表示沒有設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 none             inf              none             inf                    6           15            2598367       hdfs://localhost:9000/user/fenriswolf

 

1. Name Quotas
計算公式為
QUOTA – (DIR_COUNT + FILE_COUNT) = REMAINING_QUOTA

設定方式,這裡的 10000 是指 DIR_COUNT + FILE_COUNT = 10000
最大值為 Long.Max_Value

1 hadoop dfsadmin -setQuota 10000 /user/fenriswolf/

 

用 hadoop fs -count 來看現在的設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 10000            9000             none             inf                    60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

如果要寫入的檔案數已經超過設定值會看到下面的錯誤訊息

1 put: org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /user/fenriswolf is exceeded: quota=10000 file count=10001

 

清除設定

1 hadoop dfsadmin -clrQuota /user/fenriswolf/

 

2. Space Quotas
計算公式為
SPACE_QUOTA – CONTENT_SIZE = REMAINING_SPACE_QUOTA

設定方式,這裡的 1g 是指 1GB,可用 m, g, t 來代表 MB, GB, TB

1 hadoop dfsadmin -setSpaceQuota 1g /user/fenriswolf/

 

這裡要特別注意的是,space quota 的設定所看的不是上傳的檔案大小,是寫入 HDFS 的所有 block size
假設一個檔案要寫入 2 個 blocks,在 core-site.xml 裡設定 dfs.block.size 為 64MB,dfs.replication 為 3
那所需要的空間為 2 x 64MB x 3 = 384MB

還有一件另人困擾的地方是,就算只存入一個小檔案,例如 1KB,實際寫入 HDFS 並不會占滿整個 block
但 Hadoop 的 validation rule 仍然是用 1 x 64MB x 3 = 192MB 的方式去做計算

用 hadoop fs -count 來看現在的設定

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 10000            9000             1073741824       1028398724             60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

如果要寫入的檔案數已經超過設定值會看到下面的錯誤訊息

01 12/03/19 05:44:51 ERROR hdfs.DFSClient: Exception closing file /user/fenriswolf/hive/lib/py/queryplan/ttypes.py : org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/fenriswolf is exceeded: quota=1073741824 diskspace consumed=1.5g
02 org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/fenriswolf is exceeded: quota=1073741824 diskspace consumed=1.5g
03     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
04     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
05     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
06     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
07     at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:95)
08     at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:57)
09     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.locateFollowingBlock(DFSClient.java:3558)
10     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.nextBlockOutputStream(DFSClient.java:3421)
11     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream.access$2100(DFSClient.java:2627)
12     at org.apache.hadoop.hdfs.DFSClient$DFSOutputStream$DataStreamer.run(DFSClient.java:2822)

 

清除設定

1 hadoop dfsadmin -clrSpaceQuota /user/fenriswolf/

 

4. 其他
Quota 的設定是跟著目錄走的,目錄如果改名字設定依然會存在
麻煩的是,設定之後如果超過限制,雖然檔案寫不進 HDFS,但是檔案名稱卻已經存在,只是 size 為 0。造成加大 quota 還要先把已存在的檔案砍掉才能再寫入
另外如果設定的 quota 值小於該目錄既存的 Name Quotas 及 Space Quotas 並不會出錯
例如

1 hadoop dfsadmin -setQuota 100 /user/fenriswolf

 

只是從 hadoop fs -count 會看到 REMAINING_QUOTA 變負值,當然也就無法再寫資料進去

1 QUOTA            REMAINING_QUOTA  SPACE_QUOTA      REMAINING_SPACE_QUOTA  DIR_COUNT   FILE_COUNT    CONTENT_SIZE  FILE_NAME
2 100              -900             1073741824       1028398724             60          940           45343100      hdfs://localhost:9000/user/fenriswolf

 

 
 
執行環境
CentOS 6.2
JDK 1.6.0_31
Cloudera CDH3U3

參考資料
HDFS Quotas Guide

<!--EndFragment-->

分享到:
评论

相关推荐

    HDFS Comics HDFS 漫画

    HDFS是Hadoop分布式计算的存储基础。HDFS具有高容错性,可以部署在通用硬件设备上,适合数据密集型应用,并且提供对数据读写的高吞 吐量。HDFS能 够提供对数据的可扩展访问,通过简单地往集群里添加节点就可以解决...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    windows平台下的HDFS文件浏览器,就像windows管理器一样管理你的hdfs文件系统。现在官网已经停止更新这款软件。具体配置如下: HDFS配置页面及端口http://master:50070 配置HDFS服务器 配置WebHDFS HDFS Explorer...

    HDFS文件的查看

    hdfs文件的查看 hdfs fs -cat /文件名

    hdfs源码.zip

    第1章 HDFS 1 1.1 HDFS概述 1 1.1.1 HDFS体系结构 1 1.1.2 HDFS基本概念 2 1.2 HDFS通信协议 4 1.2.1 Hadoop RPC接口 4 1.2.2 流式接口 20 1.3 HDFS主要流程 22 1.3.1 HDFS客户端读流程 22 1.3.2 ...

    HDFS实例基本操作

    在安装好HDFS的前提下,此项目包含HDFS的基本操作,上传,下载,创建文件夹等。

    实验二:熟悉常用的HDFS操作

    A.2实验二:熟悉常用的HDFS操作 本实验对应第4章的内容。 A.2.1 实验目的 (1)理解 HDFS在Hadoop体系结构中的角色。(2)熟练使用HDFS操作常用的 Shell命令。(3)熟悉HDFS操作常用的Java API。 A.2.2 实验平台 (1)操作...

    MR处理HDFS日志样例

    MR处理HDFS日志样例

    HDFS体系架构汉化文档.pdf

    Hadoop分布式文件系统( HDFS )是一种旨在在商品硬件上运行的分布式文系统。它与现有的分布式文件系统许多相似之处。 但是,与其他分布式文件系统的区别很明显。 HDFS 具有高度的容错能力,旨在部署低成本硬件上。 ...

    HDFS配置文件hdfs-site

    HDFS测试环境配置文件,稳定运行无异常,分享给大家学习参考用;

    HDFS文件操作命令与HDFS编程

    文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程

    HDFS文件的上传

    hdfs 文件的上传,hdfs fs -put /文件名

    实验二、HDFS shell操作及HDFS Java API编程

    适合刚接触hadoop的学生或小白,内容包括HDFS shell操作及HDFS Java API编程 有图片有代码

    分布式存储系统——HDFS

    1. 分布式文件系统与HDFS 2. HDFS 的shell 操作 3. HDFS 体系结构与基本概念 4 HDFS 的web 接口 5. HDFS 的java 访问接口 6. HDFS 的RPC 机制 7. NameNode 的接口分析 8. DataNode 的接口分析 9. HDFS 的写数据过程...

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

    HDFS文件的下载

    hdfs文件的下载

    hdfs文件传输调优

    hdfs文件传输调优,hdfs文件传输调优 hdfs文件传输调优

    14、HDFS 透明加密KMS

    14、HDFS 透明加密KMS 网址:https://blog.csdn.net/chenwewi520feng/article/details/130429278 本文旨在简单介绍hdfs的透明加密作用及其使用。 前提依赖:hadoop环境部署好且可用。部署文章可参考本专栏相关文章。...

    HDFS+Explorer+Installer.rar

    hdfs远程操作工具HDFS+Explorer.hdfs

    为hdfs配置kerberos

    本文档记录了为hadoop的hdfs配置kerberos的过程,hadoop用的版本是2.4.1。其中有一些作者的个人经验,希望对读者有帮助。

    HDFS基本命令.docx

    HDFS基本命令

Global site tag (gtag.js) - Google Analytics