多个文件存储在一个块中吗?

kxkpmulp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(517)

当我将许多小文件存储到hdfs中时,它们会存储在单个块中吗?
在我看来,根据下面的讨论,这些小文件应该存储到单个块中:hdfs块大小与实际文件大小

yc0p9oo0

yc0p9oo01#

每个块只属于一个文件,只需执行以下操作: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_住宅区

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

显然,该块只属于一个文件

zbwhf8kr

zbwhf8kr2#

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

hpcdzsge

hpcdzsge3#

以下是hadoop最终指南中指定的内容:
与单个磁盘的文件系统不同,hdfs中小于单个块的文件不会占用整个块的底层存储
例如,如果您有30 mb的文件,并且块大小为64 mb,则该文件将在逻辑上存储在一个块中,但在物理文件系统中,hdfs仅使用30 mb来存储该文件。剩下的30 mb将免费使用。

vlf7wbxs

vlf7wbxs4#

引用hadoop-权威指南:
hdfs存储小文件效率低下,因为每个文件都存储在一个块中,而块元数据由namenode保存在内存中。因此,大量的小文件会占用namenode上的大量内存(但是,请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的磁盘空间。例如,块大小为128 mb的1 mb文件使用1 mb的磁盘空间,而不是128 mb。)hadoop archives(har文件)是一种文件归档工具,它可以更有效地将文件打包到hdfs块中,从而减少namenode内存的使用,同时仍然允许对文件进行透明访问。
结论:每个文件将存储在一个单独的块中。

相关问题