很多hadoop用戶經常迷惑hadoop fsck,hadoop fs -dus,hadoop -count -q等hadoop文件系統命令輸出的大小以及意義。
這裡對這類問題做一個小結。首先我們來明確2個概念:
為什麼邏輯空間一般不等於物理空間?
分布式文件系統為了保證文件的可靠性,往往會保存多個備份(一般是3份),只要備份數不為1的情況下,一般物理空間會是邏輯空間的幾倍。關系如下:
HDFS物理空間=邏輯空間*block備份數
hadoop fsck和hadoop fs -dus
執行hadoop fsck和hadoop fs -dus顯示的文件大小表示的是文件占用的邏輯空間。
$ hadoop fsck /path/to/directory Total size: 16565944775310 B <=== 看這裡 Total dirs: 3922 Total files: 418464 Total blocks (validated): 502705 (avg. block size 32953610 B) Minimally replicated blocks: 502705 (100.0 %) Over-replicated blocks: 0 (0.0 %) Under-replicated blocks: 0 (0.0 %) Mis-replicated blocks: 0 (0.0 %) Default replication factor: 3 Average block replication: 3.0 Corrupt blocks: 0 Missing replicas: 0 (0.0 %) Number of data-nodes: 18 Number of racks: 1 FSCK ended at Thu Oct 20 20:49:59 CET 2011 in 7516 milliseconds The filesystem under path '/path/to/directory' is HEALTHY $ hadoop fs -dus /path/to/directory hdfs://master:54310/path/to/directory 16565944775310 <=== 看這裡
正如命令示例所見,hadoop fsck和hadoop fs -dus報告的文件大小都是HDFS文件實際占用的大小,即這個空間大小是沒有算塊的備份數的。文件真正占用的物理空間=邏輯空間block備份數據,即16565944775310 3=49697834325930,這個49697834325930是物理空間。
hadoop fs -count -q
通過執行hadoop fs -count -q /path/to/directory 可以看到這個目錄真正的空間使用情況。執行結果如下:
$ hadoop fs -count -q /path/to/directory QUOTA REMAINING_QUOTA SPACE_QUOTA REMAINING_SPACE_QUOTA DIR_COUNT FILE_COUNT CONTENT_SIZE FILE_NAME none inf 54975581388800 5277747062870 3922 418464 16565944775310 hdfs://master:54310/path/to/directory
fs -count -q會輸出8列,分別表示如下:
命名空間的quota(限制文件數) 剩余的命名空間quota 物理空間的quota (限制空間占用大小) 剩余的物理空間 目錄數統計 文件數統計 目錄邏輯空間總大小 路徑可以看出通過hadoop fs -count -q 可以看到一個目錄比較詳細的空間和qutoa占用情況,包含了物理空間、邏輯空間、文件數、目錄數、qutoa剩余量等。