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?看
1hadoop fs -count -q /user/fenriswolf?
以下是果,none 及 inf 表示有定
1QUOTA??????????? REMAINING_QUOTA? SPACE_QUOTA????? REMAINING_SPACE_QUOTA? DIR_COUNT?? FILE_COUNT??? CONTENT_SIZE? FILE_NAME2none???????????? 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
1hadoop dfsadmin -setQuota 10000 /user/fenriswolf/?
用?hadoop fs -count?看在的定
1QUOTA??????????? REMAINING_QUOTA? SPACE_QUOTA????? REMAINING_SPACE_QUOTA? DIR_COUNT?? FILE_COUNT??? CONTENT_SIZE? FILE_NAME210000??????????? 9000???????????? none???????????? inf??????????????????? 60????????? 940?????????? 45343100????? hdfs://localhost:9000/user/fenriswolf?
如果要入的案已超定值看到下面的息
1put: org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /user/fenriswolf is exceeded: quota=10000 file count=10001?
清除定
1hadoop dfsadmin -clrQuota /user/fenriswolf/?
2. Space Quotas
算公式
SPACE_QUOTA CONTENT_SIZE = REMAINING_SPACE_QUOTA
定方式,的 1g 是指 1GB,可用 m, g, t 代表 MB, GB, TB
1hadoop 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?看在的定
1QUOTA??????????? REMAINING_QUOTA? SPACE_QUOTA????? REMAINING_SPACE_QUOTA? DIR_COUNT?? FILE_COUNT??? CONTENT_SIZE? FILE_NAME210000??????????? 9000???????????? 1073741824?????? 1028398724???????????? 60????????? 940?????????? 45343100????? hdfs://localhost:9000/user/fenriswolf?
如果要入的案已超定值看到下面的息
0112/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.5g02org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /user/fenriswolf is exceeded: quota=1073741824 diskspace consumed=1.5g03????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)?
清除定
1hadoop dfsadmin -clrSpaceQuota /user/fenriswolf/?
4. 其他
Quota 的定是跟著目走的,目如果改名字定依然存在
麻的是,定之後如果超限制,然案不 HDFS,但是案名已存在,只是 size 0。造成加大 quota 要先把已存在的案砍掉才能再入
另外如果定的 quota 值小於目既存的 Name Quotas 及 Space Quotas 不出
例如
1hadoop dfsadmin -setQuota 100 /user/fenriswolf?
只是?hadoop fs -count?看到 REMAINING_QUOTA 值,然也就法再料去
1QUOTA??????????? REMAINING_QUOTA? SPACE_QUOTA????? REMAINING_SPACE_QUOTA? DIR_COUNT?? FILE_COUNT??? CONTENT_SIZE? FILE_NAME2100????????????? -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-->