HDFS クォータガイド

概要

Hadoop分散ファイルシステム(HDFS)では、管理者は個々のディレクトリで使用される名前の数とスペースの量に対するクォータを設定できます。名前クォータとスペースクォータは独立して動作しますが、2種類のクォータの管理と実装は非常に類似しています。

名前クォータ

名前クォータはそのディレクトリをルートとするツリー内のファイル名とディレクトリ名の数に対するハードリミットです。クォータを超過すると、ファイルとディレクトリの作成は失敗します。クォータは名前変更されたディレクトリに保持されます。操作によってクォータ違反が発生する場合は、名前変更操作は失敗します。新しいクォータに違反する可能性があっても、クォータの設定は成功します。新しく作成されたディレクトリには、関連付けられたクォータはありません。最大クォータはLong.Max_Valueです。クォータが1の場合、ディレクトリは空のままになります。(はい、ディレクトリは自身のクォータにカウントされます!)

クォータはfsimageに永続的に保存されます。起動時に、fsimageがすぐにクォータに違反している場合(fsimageが密かに変更された可能性があります)、そのような違反ごとに警告が出力されます。クォータの設定または削除により、ジャーナルエントリが作成されます。

スペースクォータ

スペースクォータはそのディレクトリをルートとするツリー内のファイルによって使用されるバイト数に対するハードリミットです。クォータによってフルブロックの書き込みが許可されない場合、ブロックの割り当ては失敗します。ブロックの各レプリカはクォータにカウントされます。クォータは名前変更されたディレクトリに保持されます。操作によってクォータ違反が発生する場合は、名前変更操作は失敗します。新しく作成されたディレクトリには、関連付けられたクォータはありません。最大クォータはLong.Max_Valueです。クォータが0の場合でも、ファイルの作成は許可されますが、ファイルにブロックを追加することはできません。ディレクトリはホストファイルシステムのスペースを使用せず、スペースクォータにカウントされません。ファイルメタデータを保存するために使用されるホストファイルシステムのスペースは、クォータにカウントされません。クォータはファイルの意図されたレプリケーションファクターで課金されます。ファイルのレプリケーションファクターを変更すると、クォータにクレジットまたはデビットが適用されます。

クォータはfsimageに永続的に保存されます。起動時に、fsimageがすぐにクォータに違反している場合(fsimageが密かに変更された可能性があります)、そのような違反ごとに警告が出力されます。クォータの設定または削除により、ジャーナルエントリが作成されます。

ストレージタイプクォータ

ストレージタイプクォータは、ディレクトリをルートとするツリー内のファイルによって使用される特定のストレージタイプ(SSD、DISK、ARCHIVE)の使用量に対するハードリミットです。多くの点でスペースクォータと同様ですが、クラスタストレージスペースの使用量を詳細に制御できます。ディレクトリにストレージタイプクォータを設定するには、ストレージポリシーに従ってファイルを異なるストレージタイプに保存できるように、ディレクトリにストレージポリシーを設定する必要があります。詳細については、HDFS ストレージポリシー ドキュメントを参照してください。

ストレージタイプクォータは、スペースクォータと名前クォータと組み合わせて、クラスタストレージの使用を効率的に管理できます。たとえば、

  1. ストレージポリシーが設定されているディレクトリの場合、管理者はSSDなどのリソース制約のあるストレージタイプのストレージタイプクォータを設定し、他のストレージタイプと全体のスペースクォータのクォータを、より制限の少ない値またはデフォルトの無制限で残しておく必要があります。HDFS は、ストレージポリシーに基づいてターゲットストレージタイプと全体のスペースクォータの両方からクォータを差し引きます。
  2. ストレージポリシーが設定されていないディレクトリの場合、管理者はストレージタイプクォータを設定しないでください。ストレージタイプクォータは、特定のストレージタイプが使用できない場合(または使用可能だがストレージタイプ情報で適切に設定されていない場合)でも設定できます。ただし、この場合、ストレージタイプ情報が使用できないか、ストレージタイプクォータの適用に不正確なため、全体のスペースクォータをお勧めします。
  3. DISK のストレージタイプクォータは、DISK が主要なストレージメディアではない場合を除いて、あまり役に立ちません。(例:主に ARCHIVE ストレージを使用するクラスタ)。

管理コマンド

クォータは、管理者だけが使用できる一連のコマンドによって管理されます。

  • hdfs dfsadmin -setQuota <N> <directory>...<directory>

    各ディレクトリの名前クォータをNに設定します。各ディレクトリに対して最善を尽くし、Nが正の整数でない場合、ディレクトリが存在しない場合、ファイルである場合、またはディレクトリが新しいクォータをすぐに超える場合にエラーが報告されます。

  • hdfs dfsadmin -clrQuota <directory>...<directory>

    各ディレクトリの名前クォータを削除します。各ディレクトリに対して最善を尽くし、ディレクトリが存在しない場合、またはファイルである場合にエラーが報告されます。ディレクトリにクォータがない場合はエラーではありません。

  • hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory>

    各ディレクトリのスペースクォータをNバイトに設定します。これは、ディレクトリツリー下のすべてのファイルの合計サイズに対するハードリミットです。スペースクォータはレプリケーションも考慮します。つまり、レプリケーションが3の1GBのデータは3GBのクォータを消費します。Nは、便宜上、バイナリプレフィックスを指定することもできます。たとえば、50ギガバイトの場合は50g、2テラバイトの場合は2tなどです。各ディレクトリに対して最善を尽くし、Nが0でも正の整数でもない場合、ディレクトリが存在しない場合、ファイルである場合、またはディレクトリが新しいクォータをすぐに超える場合にエラーが報告されます。

  • hdfs dfsadmin -clrSpaceQuota <directory>...<directory>

    各ディレクトリのスペースクォータを削除します。各ディレクトリに対して最善を尽くし、ディレクトリが存在しない場合、またはファイルである場合にエラーが報告されます。ディレクトリにクォータがない場合はエラーではありません。

  • hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory>

    各ディレクトリの指定されたストレージタイプのストレージタイプクォータをNバイトに設定します。これは、ディレクトリツリー下のすべてのファイルの合計ストレージタイプ使用量に対するハードリミットです。ストレージタイプクォータの使用量は、ストレージポリシーに基づいて意図された使用量を反映します。たとえば、レプリケーションが3でALL_SSDストレージポリシーを持つ1GBのデータは、3GBのSSDクォータを消費します。Nは、便宜上、バイナリプレフィックスを指定することもできます。たとえば、50ギガバイトの場合は50g、2テラバイトの場合は2tなどです。各ディレクトリに対して最善を尽くし、Nが0でも正の整数でもない場合、ディレクトリが存在しない場合、ファイルである場合、またはディレクトリが新しいクォータをすぐに超える場合にエラーが報告されます。-storageTypeオプションを指定すると、ストレージタイプ固有のクォータが設定されます。使用可能なstorageTypeはDISK、SSD、ARCHIVE、PROVIDEDです。

  • hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory>

    各ディレクトリの指定されたストレージタイプクォータを削除します。各ディレクトリに対して最善を尽くし、ディレクトリが存在しない場合、またはファイルである場合にエラーが報告されます。指定されたストレージタイプにストレージタイプクォータがない場合はエラーではありません。-storageTypeオプションを指定すると、ストレージタイプ固有のクォータがクリアされます。使用可能なstorageTypeはDISK、SSD、ARCHIVE、PROVIDEDです。

レポートコマンド

HDFSシェルのcountコマンドの拡張機能として、クォータ値と現在使用中の名前とバイト数のカウントを報告します。

  • hadoop fs -count -q [-h] [-v] [-t [ストレージタイプのカンマ区切りリスト]] <directory>...<directory>

    -q オプションを指定すると、各ディレクトリに設定された名前クォータ値、残りの名前クォータ、設定された容量クォータ値、および残りの容量クォータが表示されます。ディレクトリにクォータが設定されていない場合、表示される値はnoneinfになります。-h オプションは、サイズを人間が読みやすい形式で表示します。-v オプションはヘッダー行を表示します。-t オプションは、各ディレクトリについて、ストレージタイプごとの設定されたクォータと残りのクォータを表示します。-t オプションの後に特定のストレージタイプを指定すると、指定されたタイプのクォータと残りのクォータのみが表示されます。それ以外の場合は、クォータをサポートするすべてのストレージタイプのクォータと残りのクォータが表示されます。