我正在运行单节点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,默认大小)。但是,我希望50个文件有50个块。我的理解有什么问题?
答案 0 :(得分:1)
这些文件不需要每个完整的块。关注的是管理它们的开销以及 - 如果你真的许多它们 - namenode利用率:
来自Hadoop - 权威指南:
小文件不占用超出需要的磁盘空间 存储文件的原始内容。例如,存储1 MB文件 块大小为128 MB时使用1 MB磁盘空间,而不是128 MB。) Hadoop Archives或HAR文件是一个文件归档工具 将文件更有效地打包到HDFS块中,从而减少 namenode内存使用情况,同时仍然允许透明访问 文件。
但是,单个块只包含一个文件 - 除非使用专门的输入格式,如HAR,SequenceFile或CombineFileIputFormat。以下是一些更多信息Small File problem info