{"title": "\u7406\u89e3hadoop fsck\u3001fs -dus\u3001-count -q\u7684\u5927\u5c0f\u8f93\u51fa", "update_time": "2014-04-15 21:01:06", "tags": "count dus fsck hadoop", "pid": "255", "icon": "hadoop.png"}
很多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剩余量等。