hadoop setQuota与count命令之配额管理
Posted 健哥说编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop setQuota与count命令之配额管理相关的知识,希望对你有一定的参考价值。
hdfs dfs -count命令与hdfs dfsadmin -setQuota命令
内容:
Hdfs dfs -count命令,用于查看一个目录下的文件和目录个数的统计信息。
通过-count -q参数参数,可以查看某个目录的限额信息。
Hdfs dfsadmin -setQuota可以给一个目录设置限额。
Hdfs dfsadmin -clrQuota可以清除一个目录上的限额信息。clr即为clear的意思。
以下是测试和代码演示。
首先让我们通过-count命令,统计一下某个目录下的目录和文件的数量:
[wangjian@hadoop41 ~]$ hdfs dfs -count /test
1 2 2583 /test
输出的格式说明:
第一个参数1,为文件夹的个数。注意,这个文件夹的个数,包含自己当前的文件夹。
第二个参数2,表示目录下的文件的个数。
第三个2583是字节大小。可以使用-h参数,显示一个可读的大小。
第四个/test为当前目录。
以下是使用-h显示可读的大小:
[wangjian@hadoop41 ~]$ hdfs dfs -count -h /test
2 2 2.5 K /test
使用-q参数以后输出的格式如下:
[wangjian@hadoop41 ~]$ hdfs dfs -count -q -h /test
none inf none inf 2 2 2.5 K /test
输出格式说明:
第1个参数none为文件夹的限额。Quota.
第2个参数inf表示目前剩余的文件限额。
第3个参数none表示当前文件夹空间限额。
第4个参数表示当前文件夹可用空间大小。
第5个到最后一个与-count输出的一样。
前面的四个参数,我们可以通过hdfs dfsadmin -setQuota来设置限额。如下:
[wangjian@hadoop41 ~]$ hdfs dfsadmin -setQuota 5 /test
[wangjian@hadoop41 ~]$ hdfs dfs -count -q /test
5 1 none inf 2 2 2583 /test
设置限额以后,第一个参数显示为5,即为当前文件夹的限额 。
第二个参数,表示当前剩余的限额。为1。因为这个目录下的具体情况为:
[wangjian@hadoop41 ~]$ hdfs dfs -ls -R /test
-rw-r--r-- 1 wangjian supergroup 1378 2018-04-24 10:33 /test/a.txt
drwxr-xr-x - wangjian supergroup 0 2018-04-24 21:37 /test/a1
-rw-r--r-- 1 wangjian supergroup 1205 2018-04-24 10:35 /test/b.txt
通过递归查看,可以发现这个/test目录,包含a1和自己有两个目录,包含a1.txt和a2.txt两个文件。所以5-(2+2)=1。现在我们在这个目录下,创建一个新的文件:
[wangjian@hadoop41 ~]$ hdfs dfs -touchz /test/a3.txt
然后再使用-count -q查看信息统计:
[wangjian@hadoop41 ~]$ hdfs dfs -count -q /test
5 0 none inf 2 3 2583 /test
可用数量文件或是目录变成了0。如果再次创建文件或是目录,或是使用-put上传文件都将会失败。
[wangjian@hadoop41 ~]$ hdfs dfs -touchz /test/a4.txt
touchz: The NameSpace quota (directories and files) of directory /test is exceeded: quota=5 file count=6
通过上面的提示可知,quota即限额(包含目录和文件)已经达到5,不能再在这个目录下创建新的文件或是目录。
那我们现在尝试在/test/a1目录下,创建文件或目录测试一下:
先查看/test/a1即某个子目录下的限额信息,可见对于子目录并没有限制:
[wangjian@hadoop41 ~]$ hdfs dfs -count -q /test/a1
none inf none inf 1 0 0 /test/a1
但依然会爱到/test限额的限制:
[wangjian@hadoop41 ~]$ hdfs dfs -touchz /test/a1/b1.txt
touchz: The NameSpace quota (directories and files) of directory /test is exceeded: quota=5 file count=6
现在我们可以清除限额的限制:
[wangjian@hadoop41 ~]$ hdfs dfsadmin -clrQuota /test
清除以后再查询:
[wangjian@hadoop41 ~]$ hdfs dfs -count -q /test
none inf none inf 2 3 2583 /test
现在我们再保存文件或是创建目录进行测试,以下都可以创建,因为已经没有了限额的限制:
[wangjian@hadoop41 ~]$ hdfs dfs -touchz /test/a4.txt
[wangjian@hadoop41 ~]$ hdfs dfs -touchz /test/a1/b1.txt
最后再次进行统计,我们也能得出一个结论:
1:目录,包含当前目录及子目录和子子目录。
2:文件包含当前目录下的文件及子目录和子子目录下的所有文件。
[wangjian@hadoop41 ~]$ hdfs dfs -count /test
2 5 2583 /test
[wangjian@hadoop41 ~]$ hdfs dfs -ls -R /test
-rw-r--r-- 1 wangjian supergroup 1378 2018-04-24 10:33 /test/a.txt
drwxr-xr-x - wangjian supergroup 0 2018-04-24 22:19 /test/a1
-rw-r--r-- 1 wangjian supergroup 0 2018-04-24 22:19 /test/a1/b1.txt
-rw-r--r-- 1 wangjian supergroup 0 2018-04-24 22:06 /test/a3.txt
-rw-r--r-- 1 wangjian supergroup 0 2018-04-24 22:19 /test/a4.txt
-rw-r--r-- 1 wangjian supergroup 1205 2018-04-24 10:35 /test/b.txt
以上是关于hadoop setQuota与count命令之配额管理的主要内容,如果未能解决你的问题,请参考以下文章