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.txta2.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命令之配额管理的主要内容,如果未能解决你的问题,请参考以下文章

HDFS命令实现分析

hadoop常用命令

Spark-Streaming hdfs count 案例

zookeeper命令行

Hadoop大数据技术-通过shell命令访问HDFS

Hadoop AWS Word Count 样例