概覽
HDFS 允許管理員對目錄下的子目錄和文件個數(Name Quotas),以及目錄下數據存儲大小(Space Quotas)進行配額限制。名稱配額和空間配額是獨立運作的,但這兩種配額的管理和實施是密切並行的。
名稱配額(Name Quotas)
名稱配額是對目錄樹中的文件和目錄名的數量的硬限制。如果超出配額,則文件和目錄創建失敗。新創建的目錄沒有關聯的配額,最大的配額是Long.Max_Value。一個配額強制一個目錄保持空白。(是的,一個目錄會計入它自己的配額!)
空間配額(Space Quotas)
空間配額是對目錄樹中的文件所使用的字節數的硬限制。如果配額不允許寫入整個塊,則塊分配失敗。一個塊的每個副本都按配額計數。新創建的目錄沒有關聯的配額,最大的配額是Long.Max_Value。零配額仍然允許創建文件,但是不能向文件添加任何塊
名稱配額和空間配額在fsimage中是持久化的。在啟動時,如果fsimage立即違反了配額(可能fsimage被偷偷修改了),則會對每一次違反都打印一個警告。設置或刪除配額將創建一個日志條目。
存儲類型配額
存儲類型配額是對目錄樹中的文件使用特定存儲類型(SSD、 DISK、 ARCHIVE)的硬限制。它在許多方面類似於存儲空間配額,但提供了對集群存儲空間使用的細粒度控制。要在目錄上設置存儲類型配額,必須在目錄上配置存儲策略,以便根據存儲策略將文件存儲在不同的存儲類型中。有關更多信息,請參見 HDFS 存儲策略文檔 。
存儲類型配額可以與空間配額和名稱配額結合起來,以有效地管理集群存儲使用。比如說,
- 對於配置了存儲策略的目錄,管理員應該為資源約束存儲類型(如 SSD)設置存儲類型配額,為其他存儲類型和總體空間配額設置限制較少的值或默認無限制。HDFS 將根據存儲策略和總體空間配額從目標存儲類型中扣除配額
- 對於未配置存儲策略的目錄,管理員不應配置存儲類型配額。即使特定存儲類型不可用(或可用,但沒有正確配置存儲類型信息) ,也可以配置存儲類型配額。但是,在這種情況下,建議使用總體空間配額,因為存儲類型信息對於存儲類型配額強制不可用或不准確
- DISK 上的存儲類型配額的使用受到限制,除非 DISK 不是主要的存儲介質。(例如以存檔為主的集群)
管理員命令
配額由一組僅對管理員可用的命令來管理。
-
hdfs dfsadmin -setQuota
... 將每個目錄的名稱配額設置為 n。
-
hdfs dfsadmin -clrQuota
... 刪除每個目錄的任何名稱配額。
-
hdfs dfsadmin -setSpaceQuota
... 將每個目錄的空間配額設置為 n 個字節。這是對目錄下所有文件的總大小的硬限制。空間配額也考慮到副本,即一個 1GB 3個副本的數據將消耗3 GB 的配額。
-
hdfs dfsadmin -clrSpaceQuota
... 刪除每個目錄的空間配額。
-
hdfs dfsadmin -setSpaceQuota
-storageType ... 將存儲類型配額設置為為每個目錄指定的 n 字節存儲類型。
-
hdfs dfsadmin -clrSpaceQuota -storageType
... 刪除為每個目錄指定的存儲類型配額。
報告命令
報告配額值和當前使用的名稱和字節數。
-
hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]]
... 使用 -q 選項可以報告每個目錄的名稱配額值、剩余的可用名稱配額、空間配額值和剩余的可用空間配額。如果目錄沒有配額集,則報告的值為 none 和 inf。h 選項以人類可讀的格式顯示大小。v 選項顯示一行標題。t 選項顯示每個存儲類型配額集和每個目錄剩余的可用配額。如果給出了-t 選項,則只顯示指定類型的配額和剩余配額。否則,將顯示支持配額的所有存儲類型的配額和剩余配額。