HDFS 配額指南

概觀

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> <directory>...<directory>

    將每個目錄的名稱配額設定為 N。盡力為每個目錄執行,如果 N 不是正整數、目錄不存在或為檔案,或目錄會立即超過新的配額,則會報告錯誤。

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

    移除每個目錄的所有名稱配額。盡力為每個目錄執行,如果目錄不存在或為檔案,則會報告錯誤。如果目錄沒有配額,則不會有錯誤。

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

    將每個目錄的空間配額設定為 N 位元組。這是目錄樹下所有檔案總大小的硬性限制。空間配額也會考慮複製,例如複製 3 次的 1 GB 資料會消耗 3 GB 的配額。N 也可用二進制字首指定以方便使用,例如 50g 表示 50 GB,2t 表示 2 TB 等。盡力為每個目錄執行,如果 N 不是零或正整數、目錄不存在或為檔案,或目錄會立即超過新的配額,則會報告錯誤。

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

    移除每個目錄的所有空間配額。盡力為每個目錄執行,如果目錄不存在或為檔案,則會報告錯誤。如果目錄沒有配額,則不會有錯誤。

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

    將每個目錄的儲存類型配額設定為 N 位元組的指定儲存類型。這是目錄樹下所有檔案總儲存類型使用量的硬性限制。儲存類型配額使用量反映基於儲存政策的預期使用量。例如,複製 3 次且使用 ALL_SSD 儲存政策的 1 GB 資料會消耗 3 GB 的 SSD 配額。N 也可用二進制字首指定以方便使用,例如 50g 表示 50 GB,2t 表示 2 TB 等。盡力為每個目錄執行,如果 N 不是零或正整數、目錄不存在或為檔案,或目錄會立即超過新的配額,則會報告錯誤。當指定 -storageType 選項時,會設定儲存類型特定配額。可用的儲存類型有 DISK、SSD、ARCHIVE、PROVIDED。

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

    移除每個目錄中指定的儲存類型配額。針對每個目錄盡力執行,如果目錄不存在或為檔案,則會回報錯誤。如果目錄沒有針對指定的儲存類型開啟儲存類型配額,則不會發生錯誤。當指定 -storageType 選項時,會清除儲存類型特定配額。可用的儲存類型為 DISK、SSD、ARCHIVE、PROVIDED。

回報指令

HDFS shell 的 count 指令延伸功能,可回報配額值和目前使用的名稱和位元組數目。

  • hadoop fs -count -q [-h] [-v] [-t [以逗號分隔的儲存類型清單]] <目錄>...<目錄>

    使用 -q 選項時,也會回報每個目錄設定的名稱配額值、剩餘可用名稱配額、設定的空間配額值和剩餘可用空間配額。如果目錄沒有設定配額,則回報值為 noneinf。-h 選項會以人類可讀的格式顯示大小。-v 選項會顯示標題列。-t 選項會顯示每個目錄的每個儲存類型配額設定和剩餘可用配額。如果在 -t 選項後給定特定儲存類型,則只會顯示指定類型的配額和剩餘配額。否則,會顯示支援配額的所有儲存類型的配額和剩餘配額。