欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

HDFS配额操作实战

程序员文章站 2022-06-11 12:01:22
...

在HDFS中,管理员可以通过为每一个目录设置一定名称和空间上的配额。名称配额和空间配额可以单独设置,但是从管理上和实现上,这两种配额接*行。 名称配额(name quota) 是在该目录下所有文件和目录名称的数量上的硬限制。当超过这个配额设置时,文件或目

在HDFS中,管理员可以通过为每一个目录设置一定名称和空间上的配额。名称配额和空间配额可以单独设置,但是从管理上和实现上,这两种配额接*行。
名称配额(name quota)是在该目录下所有文件和目录名称的数量上的硬限制。当超过这个配额设置时,文件或目录就会创建失败。重命名后命名配额仍然起作用。如果重命名操作违反配额的限制,那么重命名会失败。新建的目录不会有任何配额设置。名字配额的上限是Long.Max_Value,如果配额为1那么这个目录会强制为空,因为目录自身也会占用1个配额。配额的设置被持久化在fsimage中,当启动后,如果fsimage发现违反了配额限制,这输出警告。另外,设置或删除配额会创建一个空的日志。
只有管理员可以设置名称配额和空间配额,下面的命令设置/清理名称配额。N需要是一个正整数。
dfsadmin -setQuota N directory...directory
dfsadmin -clrQuota directory...directory
例如,下面对于/data目录限制3个名称配额:

hdfs dfs -mkdir /data
hdfs dfs -setQuota 3 /data
hdfs dfsadmin -setQuota 3 /data
hdfs dfs -touchz /data/f{1,2}
#创建第三个文件
hdfs dfs -touchz /data/f3
touchz: The NameSpace quota (directories and files) of directory /data is exceeded: quota=3 file count=4
#清楚名称配额
hdfs dfsadmin -clrQuota /data

空间配额(space quota)是目录的空间大小限制。如果超过这个配额,块写入操作会失败。副本也算配额中的一部分(GB的数据并且一共三个副本那么会消耗3GB的空间配额)。配额为0时,文件可以被创建,但是不能向文件中写入块。创建空间配额的命令如下,N可以有是5g,50GB,2t,2TB等。如果N是负数,那么则不能创建文件或写入任何数据。
dfsadmin -setSpaceQuota ...
dfsadmin -clrSpaceQuota ...

#重新创建/data
hdfs dfs -rm -r /data
hdfs dfs -mkdir /data
hdfs dfsadmin -setSpaceQuota 30m /data
#生成一个9M的文件
dd if=/dev/zero of=/tmp/f bs=1M count=200
#追加到文件
dfs dfs -appendToFile /tmp/f /data/f
#第二次追加,此时已经超过配额大小(副本为3)
dfs dfs -appendToFile /tmp/f /data/f
......
appendToFile: The DiskSpace quota of /data is exceeded: quota = 1073741824 B = 1 GB but diskspace consumed = 1207959552 B = 1.13 GB

另外,通过fs -count -q directory...directory命令,使用-q选项,可以显示目录的名称配额,剩余名称配额,空间配额,可用空间配额。如果目录没有设置配额,会显示为none和inf。

?参考:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsQuotaAdminGuide.html