2014-01-22 90 views
1

我运行的是单节点hadoop环境。当我跑$hadoop fsck /user/root/mydatadir -block,我真的得到了各地的输出混淆这给:文件数与HDFS中的块数


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块(我不理会当前正在写入的文件)。

根据我的理解,尽管每个文件的大小小于HDFS块大小(对于我来说它是64MB,默认大小),但每个文件使用至少1个块.i.e,我预计50个文件有50个块。我的理解有什么问题?

回答

2

这些文件不需要每个完整的块。令人担忧的是管理他们以及开销 - 如果你有真正他们 - NameNode的利用率许多

从Hadoop的 - 权威指南:

小文件不占用任何磁盘空间比 需要存储文件的原始内容。例如,存储为 的1 MB文件(块大小为128 MB)使用1 MB磁盘空间,而不是128 MB。) Hadoop归档文件或HAR文件是一种文件归档工具,它可以更高效地将文件打包到HDFS块中,从而减少 namenode的内存使用量,同时仍允许透明地访问 文件。

但是,一个块只包含一个文件 - 除非使用专用输入格式,如HAR,SequenceFile或CombineFileIputFormat。这里是一些更多的信息Small File problem info

+0

这样,多个文件可以在一个块中。这是对的吗? –

+0

我更新了答案,以澄清 – javadba

+0

在我的情况下,我没有使用任何特殊格式。我只写了一些文件,它们可能比HDFS块的大小要小。 –