理解Hadoop HDFS的配額和fs, fsck工具

hadoop 使用HDFS來落地存儲hbase的數據, 我們可以通過以下命令來查看HDFS的空間佔用大小.

  1. hadoop fsck
  2. hadoop fs -dus
  3. hadoop fs -count -q
    上述命令在hdfs裏面可能存在權限問題, 可以前面加上sudo -u hdfs 來運行以上命令

首先讓我們看看fsck和fs -dus區別

hadoop fsck

hadoop fsck /path/to/directory
 Total size:    16565944775310 B    <=== see here
 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 -du -s

hadoop fs -dus /path/to/directory
hdfs://master:54310/path/to/directory        16565944775310    <=== see here

可以看見上面都有16565944775310 Bytes (15.1 TB) 的空間被HDFS佔用, 他們都顯示了”正常”的文件大小, 卻沒有考慮到HDFS的replication(複製). 在這種情況下, 路徑/目錄 存儲了大約378.7M的數據. 現在fsck告訴我們, 在hdfs上所有文件的平均塊複製( Average block replication) 的值是3, 這意味着, 這些文件在原始的HDFS存儲空間中會存在, 就是會存在3倍.

3.0 x 16565944775310 (15.1 TB) = 49697834325930 Bytes (45.2 TB)

這纔是HDFS真實消耗了多少磁盤空間.

hadoop fs -count -q

hadoop fs -count -q /path/to/directory

QUOTA  REMAINING_QUOTA   SPACE_QUOTA    REMAINING_SPACE_QUOTA
none   inf               54975581388800 5277747062870

DIR_COUNT  FILE_COUNT   CONTENT_SIZE    FILE_NAME
3922       418464       16565944775310  hdfs://master:54310/path/to/directory

這裏作了一下換行, 並且加入了一些列標, 可以更加方便的看出:

第七列, CONTENT_SIZE 16565944775310 Bytes (15.1 TB) 是有效的HDFS空間佔用
第三列, SPACE_QUOTA 54975581388800 Bytes ( 50 TB) 是原始的HDFS磁盤配額, 也就是HDFS在磁盤上總的空間, HDFS能夠使用 50 TB.
第四列, REMAINING_SPACE_QUOTA 5277747062870 Bytes (4.8 TB) 是剩餘的HDFS磁盤配額.

可以看到, hadoop fsckhadoop fs -du -s都會顯示數據的有效佔用, 等於本地文件系統的佔用大小.
hadoop fs -count -q第三列和第四列間接返回了實際消耗在分佈式集羣節點的磁盤佔用. 根據
每個HDFS塊(block)/3個副本(replications)的比例(這裏3已經在hadoop fsck 上輸出了, average block replication=3.0),
所以我們可以作一個減法來算出實際磁盤佔用:

54975581388800 (50 TB) - 5277747062870 (4.8 TB) = 49697834325930 (45.2 TB)

可以知道, hadoop空間配額總是會計算原始的 HDFS 磁盤佔用消耗,
所以如果你有 1 TB 的磁盤, 當你設置副本(replication)=10的時候, 你可以存 100 GB 的單個文件.
如果副本是3 你可以存單個文件 333 GB的.
這就是 hadoop 的空間配額怎麼計算的. 同時hadoop 會在你沒有設置副本值(replication)的時候, 給出了一個默認的3個副本的值. 這也就決定了hadoop的磁盤配額會始終計算原始HDFS 磁盤空間消耗, 並且算上副本值.

本地文件系統大小    hadoop fsck/hadoop fs -dus    hadoop fs -count -q(if replication factor == 3)
100GB            100GB                          300GB

原文在這裏http://www.michael-noll.com/blog/2011/10/20/understanding-hdfs-quotas-and-hadoop-fs-and-fsck-tools/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章