多个文件是否存储在一个块中?

时间:2014-01-22 04:41:29

标签: hadoop hdfs

当我将许多小文件存储到HDFS中时,它们会存储在一个块中吗?

在我看来,根据这个讨论,这些小文件应该存储在一个块中: HDFS block size Vs actual file size

4 个答案:

答案 0 :(得分:11)

引自 Hadoop - 权威指南

  

HDFS低效存储小文件,因为每个文件存储在一个块中,并阻止   元数据由namenode保存在内存中。因此,大量的小文件都可以   在namenode上占用了大量内存。 (但请注意,小文件不需要   比存储文件的原始内容所需的磁盘空间更多。对于   例如,以128 MB的块大小存储的1 MB文件使用1 MB的磁盘空间,而不是   128 MB。)    Hadoop Archives 或HAR文件是将文件打包到HDFS的文件存档工具   更高效地阻止,从而减少名字节点内存使用,同时仍然允许   透明访问文件。

结论:每个文件都会存储在一个单独的块中。

答案 1 :(得分:2)

以下是Hadoop权威指南中指定的内容:

  

与单个磁盘的文件系统不同,HDFS中的文件较小   而不是一个块不占据整个块的价值   底层存储

例如,如果您有30 MB文件且块大小为64 MB,则此文件将逻辑存储在一个块中,但在物理文件系统中,HDFS仅使用30 MB来存储该文件。剩下的30 MB可以免费使用。

答案 2 :(得分:0)

每个块只属于一个文件,如下所示: 1.使用fsck命令获取文件的块信息:

hadoop fsck /gavial/data/OB/AIR/PM25/201709/01/15_00.json -files -blocks

这样说:

    /gavial/data/OB/AIR/PM25/201709/01/15_00.json 521340 bytes, 1 block(s):  OK
0. BP-1004679263-192.168.130.151-1485326068364:blk_1074920015_1179253 len=521340 repl=3

Status: HEALTHY
 Total size:    521340 B
 Total dirs:    0
 Total files:   1
 Total symlinks:        0
 Total blocks (validated):  1 (avg. block size 521340 B)
 Minimally replicated blocks:   1 (100.0 %)
 Over-replicated blocks:    0 (0.0 %)

块ID是

blk_1074920015

2.使用fsck命令显示阻止状态,像这样输出

hdfs fsck -blockId blk_1074920015

Block Id: blk_1074920015
Block belongs to: /gavial/data/OB/AIR/PM25/201709/01/15_00.json
No. of Expected Replica: 3
No. of live Replica: 3
No. of excess Replica: 0
No. of stale Replica: 0
No. of decommission Replica: 0
No. of corrupted Replica: 0
Block replica on datanode/rack: datanode-5/default-rack is HEALTHY
Block replica on datanode/rack: datanode-1/default-rack is HEALTHY
显然,该块只属于一个文件

答案 3 :(得分:-1)

是。当您存储大量小文件时,它们将存储在一个块中,直到该块具有相等的容纳空间。 但效率低下是因为对于每个小文件,都会在namenode中为每个小文件创建一个索引条目(文件名,块,偏移量)。如果我们有许多小文件而不是少量非常大的文件,这会浪费为namenode中的元数据保留的内存。