【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制

【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

前言

HDFS为管理员提供了针对文件夹的配额控制特性,能够控制
名称配额(指定文件夹下的文件&文件夹总数),或者
空间配额(占用磁盘空间的上限)。
本文探究了HDFS的配额控制特性,记录了各类配额控制场景的实验具体过程。
实验环境基于Apache Hadoop 2.5.0-cdh5.2.0。

欢迎转载,请注明出处:http://blog.csdn.net/u010967382/article/details/44452485


名称配额功能试用


设置名称配额,即当前文件夹下文件和文件夹的最大数量:

casliyang@singlehadoop:~$
 
hdfs dfsadmin -setQuota 3 /Workspace/quotas/
15/03/18 14:53:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable


上传文件:
casliyang@singlehadoop:~$ 
hdfs dfs -put slf4j-log4j12-1.6.4.jar /Workspace/quotas/
15/03/18 14:54:16 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable


上传文件:
casliyang@singlehadoop:~$ 
hdfs dfs -put dict.txt /Workspace/quotas/
15/03/18 14:55:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

继续上传文件报错:
casliyang@singlehadoop:~$ 
hdfs dfs -put examples.desktop /Workspace/quotas/
15/03/18 14:55:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
put: 
The NameSpace quota (directories and files) of directory /Workspace/quotas is exceeded
quota=3 file count=4


查看该文件夹情况:
casliyang@singlehadoop:~$ hdfs dfs -ls /Workspace/quotas
15/03/18 17:11:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
Found 2 items
-rw-r–r–   3 casliyang supergroup         14 2015-03-18 14:55 /Workspace/quotas/dict.txt
-rw-r–r–   3 casliyang supergroup       9748 2015-03-18 14:38 /Workspace/quotas/slf4j-log4j12-1.6.4.jar

文件夹下仅仅有两个文件。


查看配额情况:
casliyang@singlehadoop:~$ hdfs dfs 
-count -q /Workspace/quotas
15/03/18 16:00:53 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
           3               0            none             inf            1            2               9762 /Workspace/quotas


注意几个数字的含义依次是:
  1. 名称配额总量(none代表没设定)
  2. 名称配额剩余量(inf代表没设定)
  3. 空间配额总量(none代表没设定)
  4. 空间配额剩余量(inf代表没设定)
  5. 文件夹数
  6. 文件数
  7. 内容占用空间
  8. 目标地址

名称配额剩余量的计算公式:
名称配额剩余量 = 名称配额总量 – ( 文件夹数 + 文件数 )

基于上面配额查看结果得知:
名称配额总量=3
文件夹数=1
文件数=2

所以,名称配额剩余量=3-(1+2)=0
所以此时继续上传文件会超出名称配额的限制。

BTW,竟然把根文件夹也计数了!

我们再来建一个没有设定quotas的文件夹,測试下是否也将根文件夹纳入count统计:
casliyang@singlehadoop:~$ 
hdfs dfs -mkdir /Workspace/quotas1
15/03/18 17:19:21 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
casliyang@singlehadoop:~$ 
hdfs dfs -count -q /Workspace/quotas1
15/03/18 17:20:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
        none             inf            none             inf            
1            0                  0 /Workspace/quotas1


上面的实验看出,名称配额和空间配额都没设置,所以都显示none/inf,果然当前根文件夹还是计入统计了,文件夹数为1。

以下通过命令取消
/Workspace/quotas文件夹的名称配额:

casliyang@singlehadoop:~$ hdfs dfs -count -q /Workspace/quotas
15/03/18 17:28:25 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
           
3               
0            none             inf            1            2               9762 /Workspace/quotas
casliyang@singlehadoop:~$ 
hdfs dfsadmin -clrQuota /Workspace/quotas
15/03/18 17:28:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
casliyang@singlehadoop:~$ hdfs dfs -count -q /Workspace/quotas
15/03/18 17:28:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
        
none             
inf            none             inf            1            2               9762 /Workspace/quotas



空间配额功能试用



清空文件夹
/Workspace/quotas:

casliyang@singlehadoop:~$ 
hdfs dfs -rm -r /Workspace/quotas/*
15/03/18 17:33:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
15/03/18 17:33:11 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /Workspace/quotas/dict.txt
15/03/18 17:33:11 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /Workspace/quotas/slf4j-log4j12-1.6.4.jar
casliyang@singlehadoop:~$ 
hdfs dfs -ls /Workspace/quotas/
15/03/18 17:33:36 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
casliyang@singlehadoop:~$ 
hdfs dfs -count -q /Workspace/quotas
15/03/18 17:33:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
        none             inf            
none             inf            1            0                  
0 /Workspace/quotas


为文件夹设定空间限额:
casliyang@singlehadoop:~$ 
hdfs dfsadmin -setSpaceQuota 8000 /Workspace/quotas
15/03/18 17:36:17 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
casliyang@singlehadoop:~$ hdfs dfs -count -q /Workspace/quotas
15/03/18 17:36:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
        none             inf            
8000            8000            1            0                  
0 /Workspace/quotas


/Workspace/quotas文件夹设定空间配额为8000字节,能够看到,空间配额总量8000,空间配额剩余量8000,已用空间配额0。

以下尝试上传一个大小超过8000字节的文件
slf4j-log4j12-1.6.4.jar,该文件大小是9748字节:

casliyang@singlehadoop:~$ ll slf4j-log4j12-1.6.4.jar 
-rw-r–r– 1 casliyang casliyang 
9748 Mar  6 14:50 slf4j-log4j12-1.6.4.jar
casliyang@singlehadoop:~$ hdfs dfs -put 
slf4j-log4j12-1.6.4.jar /Workspace/quotas
15/03/18 17:40:33 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
15/03/18 17:40:36 WARN hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: 
The DiskSpace quota of /Workspace/quotas is exceeded
quota = 8000 B = 7.81 KB but diskspace consumed = 402653184 B = 384 MB
at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyDiskspaceQuota(DirectoryWithQuotaFeature.java:144)
at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyQuota(DirectoryWithQuotaFeature.java:154)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyQuota(FSDirectory.java:1815)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirectory.java:1650)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirectory.java:1625)
at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addBlock(FSDirectory.java:373)


会报错是预料之中,可是最后一句话磁盘空间消耗了384MB,这有点出乎预料,经查阅资料得知:
我们须要设置的空间配额不是文件本身的大小,而是block占用的磁盘的最大值,比方,上面实验中的文件大小是
9748
字节,即9.5k左右,hdfs-site.xml中配置的block大小是128MB,副本数是3,文件能够存储在1个block内,所以需占用的磁盘总量最大值(即block的size)是128*3=384MB!

我们改动文件夹的配额,将其设置为384MB:
casliyang@singlehadoop:~$ hdfs dfsadmin -setSpaceQuota 
384m /Workspace/quotas


再次上传文件:
casliyang@singlehadoop:~$ hdfs dfs -put slf4j-log4j12-1.6.4.jar /Workspace/quotas
15/03/19 09:02:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
casliyang@singlehadoop:~$ hdfs dfs -count -q /Workspace/quotas
15/03/19 09:03:06 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
        none             inf       
402653184       402623940            1            1               
9748 /Workspace/quotas


可见,上传成功,
空间配额是402653184
,剩余配额是
402623940
,内容占用空间9748。
这三个数字的计算关系是 402653184 – 9748 *3 = 402623940 !
即使剩余空间显示还剩
402623940
,可是已经无法继续上传不论什么东西了,由于用于存9748文件的3个128MB的block已经撑满了磁盘空间配额!
******吐槽一句,这么个显示模式真心不友好,不明确规则的用户肯定看不懂!****

不死心,再尝试是否还能上传文件,用作实验的是一个非常小的文件,仅仅有
14bytes
casliyang@singlehadoop:~$ hdfs dfs -put 
dict.txt /Workspace/quotas
15/03/19 09:04:30 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
15/03/19 09:04:33 WARN hdfs.DFSClient: DataStreamer Exception
org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /Workspace/quotas is exceeded: quota = 402653184 B = 
384 MB but diskspace consumed = 402682428 B = 
384.03 MB

无法上传,的确是配额满了。


要点总结

  • HDFS能够为指定文件夹设置名称配额Name Quotas和空间配额Space Quotas。
  • Name Quotas控制指定根文件夹下的全部文件夹和文件数量(详细计算规则见上文),Space Quotas控制指定根文件夹下的全部文件占用空间(详细计算规则见上文)
  • 依据官网说明,名称配额和空间配额的最大值是Long.Max_Value。
  • 用途1:结合ACL和Quotas精细化控制用户对HDFS的訪问权限;用途2:控制某些程序模块对HDFS的写权限。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117905.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java正则表达式http_Java 正则表达式(精华)

    java正则表达式http_Java 正则表达式(精华)英文:JakobJenkov译文:严亮链接:ifeve.com/java-regex/Java提供了功能强大的正则表达式API,在java.util.regex包下。本教程介绍如何使用正则表达式API。正则表达式一个正则表达式是一个用于文本搜索的文本模式。换句话说,在文本中搜索出现的模式。例如,你可以用正则表达式搜索网页中的邮箱地址或超链接。正则表达式示例下面是一个简单的Java正则表达式的…

    2022年7月7日
    31
  • 借助栈来实现单链表的逆置运算_中缀后缀表达式互相转换

    借助栈来实现单链表的逆置运算_中缀后缀表达式互相转换原题链接算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 – * + 8 4 / +注意

    2022年8月8日
    4
  • VB程序设计教程(第四版)龚沛曾-实验8-2

    VB程序设计教程(第四版)龚沛曾-实验8-2实验8-2将斐波那契数列的前10项写入文件Fb.dat,然后从该文件将数据读取出来并计算合计和平均数,最后送入列表框。要求:文件数据格式如2.8.2所示,列表框中项目格式如图2.8.3所示。解题,画2个按钮,1个列表框控件,代码如下:PrivateSubCommand1_Click()Dimfib%(0To9),i%Open”c:\fb.dat…

    2022年10月6日
    5
  • 指令的四个周期_cpu指令周期流程图

    指令的四个周期_cpu指令周期流程图指令流程图的概念菱形:译码,测试,表示判断,如零指令字是0或者1.与前面的CPU周期紧密相连,不单独占用CPU周期。每个方框箭头下面的是公共操作符符号,表示一条指令结束。mov指令将R1寄存器的数据存储到R2寄存器中,lad指令时间主存中的数据存储到寄存器中。sto是将R2中的数据根据R3中的主存地址存储到主存中。lad和sto是寄存器-主存指令需要三个CPU周期,其他都是寄存器-…

    2022年10月13日
    4
  • mysql创建视图sql语句_MySQL 视图

    mysql创建视图sql语句_MySQL 视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。视图不直接存储数据,不知真正的表。关系型数据库中的数据是由一张一张的二维关系表所组成,简单的单表查询只需要遍历一个表,而复杂的多表查询需要将多个表连接起来进行查询任务。对于复杂的查询事件,每次查询需要输入SQL命令,重复且低效,视图可以大大降低查询的重复性。

    2025年8月1日
    3
  • mysql executereader_ExecuteReader

    mysql executereader_ExecuteReader最近在做winform的编程,想到一真没有使用过ExecuteReader。可能以前以后它的用户不大,或者不大好用,故没有用过。今天在这里将学习记录写下来,供读者参考:1、MSDN上说:SendstheCommandTexttotheConnectionandbuildsaSqlDataReader.(这句话就不翻译了)2、实例片段:[C#]publicvoidCreateM…

    2022年6月20日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号