HDFS 配额(Quotas)指南 -- Apache Hadoop 2.9.0
Posted 程序猿码码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS 配额(Quotas)指南 -- Apache Hadoop 2.9.0相关的知识,希望对你有一定的参考价值。
Apache Hadoop 2.9.0
请查看原文:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsQuotaAdminGuide.html
(如果转发,请标明出处)
概述
Hadoop分布式文件系统( HDFS )允许管理员为使用的名字(name)数量和用于各个目录的空间设置配额。名字配额和空间配额独立运行,但两种类型配额的管理和实施密切平行。
名字配额(Name Quotas)
名字配额是对以该目录为根的树中文件和目录名称数量的硬限制。如果超过配额,创建文件和目录将会失败。配额与重命名的目录保持一致;如果重命名操作将导致配额冲突,则重命名操作将失败。即使目录违反新配额,设置配额的尝试仍将成功。新创建的目录没有关联的配额。最大的配额是 Long.Max_Value。配额为1会强制目录保持为空。(目录将根据其自身的配额进行计数,目录本身占用1个配额) )
配额随着fsimage一起持久化。启动时,如果fsimage立即违反配额(可能是秘密修改了fsimage ),则会为每个此类违规打印警告。设置或删除配额将创建日志记录。
空间配额(Space Quotas)
空间配额是对根位于该目录的树中的文件使用的字节数的硬限制。如果配额不允许写入完整块,则块分配就会失败。块的每个副本都将根据配额进行计数。配额与重命名的目录保持一致,重命名文件夹后配额还是起作用;如果重命名操作将导致配额冲突,则重命名操作将失败。新创建的目录没有关联的配额。最大的配额上限是 Long.Max_Value。配额为零仍然允许创建文件,但不能向文件中添加任何块。目录不使用主机文件系统空间,也不计入空间配额。用于保存文件元数据的主机文件系统空间不计入配额。配额按文件的预期副本因子计数;更改文件的副本因子将计入或扣除配额。
配额随着fsimage一起持久化。启动时,如果fsimage立即违反配额(可能是秘密修改了fsimage ),则会为每个此类违规打印警告。设置或删除配额将创建日志记录。
存储类型配额(Storage Type Quotas)
存储类型配额是对目录树中的文件使用特定存储类型( SSD、磁盘、归档)的硬限制。它在许多方面类似于存储空间配额,但对集群存储空间使用提供精细控制。要在目录上设置存储类型配额,必须在目录上配置存储策略,以便根据存储策略将文件存储在不同的存储类型中。请查看HDFS Storage Policy Documentation 文档来获得更多信息。
存储类型配额可以与空间配额和名称配额相结合,以有效的管理集群存储使用情况。
1.对于配置了存储策略的目录,管理员应设置资源限制存储类型(如SSD )对应的配额,并将其他存储类型的配额和总空间配额保留为限制较少的值或默认值(无限制)。HDFS将根据存储策略和总体空间配额从目标存储类型中扣除配额。
2.对于未配置存储策略的目录,管理员不应配置存储类型配额。即使特定存储类型不可用(或可用但未正确配置存储类型信息),也可以配置存储类型配额。但是,在这种情况下,建议使用总体空间配额,因为存储类型信息对于存储类型配额的实施不可用或不准确(或者说是存储类型配额模块没法精确获得存储类型信息)。
3.DISK的存储类型配额用途有限,除非磁盘不是主要存储介质。(例如,以ARCHIVE 存储为主的集群)。
管理命令
配额只能管理员通过一系列的命令来进行设置。
① hdfs dfsadmin -setQuota <N> <directory>...<directory>
为每个目录设置名字配额为N。尽最大努力处理每个目录,如果N不是一个正整数( positive long integer),目录不为空或者本身是一个文件,或者该目录将立即超过新配额,都会报错。
② hdfs dfsadmin -clrQuota <directory>...<directory>
删除每个目录的名字配额。尽最大努力处理每个目录,如果目录不存在或者是个文件,将会报错。如果目录本身之前就没有设置配额,命令不会报错。
③ hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>
为每个目录设置空间配额是N个字节。这是目录树下所有文件总大小的硬限制。空间配额会把副本也计算在内,例如1GB的数据,有3个副本,那么将会占用3GB的配额。为了方便,可以用二进制前缀来指定N,例如50g用于50gb,2t用于2tb等。尽最大努力处理每个目录,下面这些情况就会报错:如果N是0或者负数,或者目录不存在或者本身是一个文件,或者目录会立刻超过新的配额。
④ hdfs dfsadmin -clrSpaceQuota <directory>...<directory>
为每个目录删除空间配额。尽最大努力处理每个目录,如果目录不存在或者本身是个文件将会报错。如果目录本身没有设置配额,命令不会报错。
⑤ hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>
为每个目录设置存储类型配额是N个字节。这是目录树下所有文件的总存储类型使用的硬限制。存储类型配额使用情况反映了基于存储策略的预期使用情况。例如:1GB的数据,有3个副本,并且是 ALL_SSD存储策略,那么需要3GB的SSD数据。为了方便,还可以用二进制前缀来指定n,例如50g用于50gb,2t用于2tb等。尽最大努力处理每个目录,如果N是0或者负数,目录为空或是文件,目录会立刻超过最新配额,那么命令将会报错。当 -storageType选项指定时,将会设置存储类型配额。有效的存储类型是RAM_DISK,DISK,SSD,ARCHIVE。
⑥ hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>
为每个目录删除存储类型配额。尽最大努力处理每个目录,如果目录为空或者本身是个文件,命令将会报错。如果目录针对指定的存储类型没有设置配额,命令不会报错。如果-storageType被指定时,对应的存储类型配额将会被清除。有效的存储类型是RAM_DISK,DISK,SSD,ARCHIVE。
报告命令
HDFS的count命令 可以报告配额值以及当前使用的名称和字节计数。
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory>
使用-q选项,就会报告每个目录设置的名字配额值,剩余可用名字配额值,设置的空间配额值和剩余的可用空间配额。如果目录没有设置配额,则报告值将会是 none 和inf。-h选项将会以人类可读的格式显示数字。-v选项打印一个header line。-t选项显示每个目录的每个存储类型配额以及每个存储类型的可用配额。如果在-t选项后指定了存储类型,那么就只会显示指定存储类型的配额和指定存储类型剩余可用配额,否则,就会显示支持配额的所有存储类型的配额和剩余配额。
----------- 全文完 ------------
以上是关于HDFS 配额(Quotas)指南 -- Apache Hadoop 2.9.0的主要内容,如果未能解决你的问题,请参考以下文章
sh 只是为了您需要通过名称更新CF中的组织。 (获取配额列表使用`cf quotas`命令)。这里描述了这个解决方案
K8s:通过 Resource Quotas 限制命名空间对象创建数量和计算资源使用
K8s:通过 Resource Quotas 限制命名空间对象创建数量和计算资源使用