Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

总览

Hadoop分布式文件系统(HDFS)允许管理员为使用的名称数和用于单个目录的空间量设置配额。名称配额和空间配额是独立运行的,但是两种类型的配额的管理和实施是紧密平行的。

名称配额

名称配额是对根于该目录的树中文件和目录名称数量的硬限制。如果超出配额,文件和目录创建将失败。配额使用重命名的目录;如果该操作将导致配额违反,则重命名操作将失败。即使目录违反新配额,设置配额的尝试仍将成功。新创建的目录没有关联的配额。最大配额是Long.Max_Value。配额为1会强制目录保持空白。(是的,目录计入自己的配额!)

fsimage的配额是持久的。启动时,如果fsimage立即违反配额(可能是fsimage被秘密修改),则会为每个此类违反打印警告。设置或删除配额将创建日记帐分录。

空间配额

空间配额是对根于该目录的树中文件所使用的字节数的硬性限制。如果配额不允许写入整个块,则块分配失败。块的每个副本均计为配额。配额使用重命名的目录;如果重命名操作将导致配额违反,则该操作将失败。新创建的目录没有关联的配额。最大配额是Long.Max_Value。配额为零仍允许创建文件,但是不能将任何块添加到文件中。目录不使用主机文件系统空间,也不计入空间配额。用于保存文件元数据的主机文件系统空间不计入配额。配额按文件的预期复制因子收费;更改文件的复制因子将贷记或借记配额。

fsimage的配额是持久的。启动时,如果fsimage立即违反配额(可能是fsimage被秘密修改),则会为每个此类违反打印警告。设置或删除配额将创建日记帐分录。

存储类型配额

存储类型配额是对根目录目录树中的文件使用特定存储类型(SSD,DISK,ARCHIVE)的硬性限制。它在许多方面类似于存储空间配额,但可以对群集存储空间使用情况进行细粒度控制。要在目录上设置存储类型配额,必须在目录上配置存储策略,以允许根据存储策略将文件存储在不同的存储类型中。有关更多信息,请参见HDFS存储策略文档

可以将存储类型配额与空间配额和名称配额结合使用,以有效地管理集群存储使用情况。例如,

  1. 对于配置了存储策略的目录,管理员应为资源限制存储类型(例如SSD)设置存储类型配额,并为其他存储类型和总体空间配额保留配额限制较小或默认为无限制。HDFS将根据存储策略和总体空间配额从目标存储类型中扣除配额。
  2. 对于未配置存储策略的目录,管理员不应配置存储类型配额。即使特定的存储类型不可用(或可用,但存储类型信息配置不正确),也可以配置存储类型配额。但是,在这种情况下,建议使用整体空间配额,因为对于存储类型配额实施而言,存储类型信息不可用或不准确。
  3. DISK上的存储类型配额用途有限,除非DISK不是主要存储介质。(例如,具有主要ARCHIVE存储的集群)。

行政命令

配额由一组仅对管理员可用的命令管理。

  • hdfs dfsadmin -setQuota <N> <目录> ... <目录>

    将每个目录的名称配额设置为N。每个目录的最大努力,如果N不是一个正整数,该目录不存在或它是一个文件,或者目录将立即超过新的配额,则会报告错误。

  • hdfs dfsadmin -clrQuota <目录> ... <目录>

    删除每个目录的任何名称配额。每个目录的最大努力,如果目录不存在或为文件,则会报告错误。如果目录没有配额,这不是错误。

  • hdfs dfsadmin -setSpaceQuota <N> <目录> ... <目录>

    将每个目录的空间配额设置为N个字节。这是对目录树下所有文件总大小的硬限制。空间配额还考虑了复制,即复制1的3 GB数据消耗3GB的配额。为了方便起见,还可以使用二进制前缀指定N,例如50g表示50 GB,2t表示2 TB等。尽最大努力为每个目录提供服务,如果N既不是零也不是正整数,则报告错误,则该目录不存在或它是一个文件,否则目录将立即超过新的配额。

  • hdfs dfsadmin -clrSpaceQuota <目录> ... <目录>

    删除每个目录的任何空间配额。每个目录的最大努力,如果目录不存在或为文件,则会报告错误。如果目录没有配额,这不是错误。

  • hdfs dfsadmin -setSpaceQuota <N> -storageType <存储类型> <目录> ... <目录>

    将存储类型配额设置为为每个目录指定的N个字节的存储类型。这是目录树下所有文件的总存储类型使用情况的硬限制。存储类型配额使用情况反映了基于存储策略的预期使用情况。例如,复制3和ALL_SSD存储策略的1 GB数据将消耗3 GB的SSD配额。为了方便起见,也可以使用二进制前缀指定N,例如50g表示50 GB,2t表示2 TB等。尽最大努力为每个目录提供服务,如果N既不是零也不是正整数,则报告错误,则该目录不存在或它是一个文件,否则目录将立即超过新的配额。指定-storageType选项时,将设置特定于存储类型的配额。可用的存储类型为RAM_DISK,DISK,SSD,ARCHIVE。

  • hdfs dfsadmin -clrSpaceQuota -storageType <存储类型> <目录> ... <目录>

    删除为每个目录指定的存储类型配额。每个目录的最大努力,如果目录不存在或为文件,则会报告错误。如果目录没有指定存储类型的存储配额,这不是错误。指定-storageType选项时,将清除特定于存储类型的配额。可用的存储类型为RAM_DISK,DISK,SSD,ARCHIVE。

报告命令

HDFS Shell的count命令的扩展报告了配额值以及正在使用的名称和字节的当前计数。

  • hadoop fs -count -q [-h] [-v] [-t [以逗号分隔的存储类型列表]] <目录> ... <目录>

    使用-q选项,还报告为每个目录设置的名称配额值,剩余的可用名称配额,设置的空间配额值以及剩余的可用空间配额。如果目录未设置配额,则报告的值为noneinf。-h选项以人类可读的格式显示大小。-v选项显示标题行。-t选项显示每个存储类型的配额集以及每个目录剩余的可用配额。如果在-t选项后给出了特定的存储类型,则仅显示指定类型的配额和剩余配额。否则,将显示支持配额的所有存储类型的配额和剩余配额。