我运行的是单节点hadoop环境。当我跑的时候 $hadoop fsck /user/root/mydatadir -block
,我真的对它的输出感到困惑:
Status: HEALTHY
Total size: 998562090 B
Total dirs: 1
Total files: 50 (Files currently being written: 1)
Total blocks (validated): 36 (avg. block size 27737835 B) (Total open file blocks (not validated): 1)
Minimally replicated blocks: 36 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 36 (100.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 2
Average block replication: 1.0
Corrupt blocks: 0
Missing replicas: 72 (200.0 %)
Number of data-nodes: 1
Number of racks: 1
它说我已经写了50个文件,但是它只使用了36个块(我只是忽略了当前正在写的文件)。
据我所知,每个文件至少使用1个块,即使它的大小小于hdfs块大小(对我来说是64mb,默认大小)。我的理解有什么问题?
1条答案
按热度按时间djp7away1#
每个文件不需要完整的块。需要考虑的是管理它们的开销以及(如果确实有很多)namenode利用率:
来自hadoop-权威指南:
小文件占用的磁盘空间不会超过存储文件原始内容所需的空间。例如,块大小为128 mb的1 mb文件使用1 mb的磁盘空间,而不是128 mb。)hadoop archives(har文件)是一种文件归档工具,它可以更有效地将文件打包到hdfs块中,从而减少namenode内存的使用,同时仍然允许对文件进行透明访问。
但是,一个块只包含一个文件,除非使用特殊的输入格式,如har、sequencefile或combinefleiputformat。下面是一些小文件问题的更多信息