理解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/

你可能感兴趣的:(Hdfs,Hadoop)