当我将许多小文件存储到HDFS中时,它们是否会存储在单个数据块中?
在我看来,根据下面的讨论,这些小文件应该存储到单个块中:HDFS block size Vs actual file size
发布于 2014-01-22 04:46:41
引用Hadoop -权威指南
HDFS存储小文件效率低下,因为每个文件都存储在一个块中,而块元数据由namenode保存在内存中。因此,大量的小文件可能会占用namenode上的大量内存。(但是请注意,小文件占用的磁盘空间不会超过存储文件原始内容所需的磁盘空间。例如,以128 MB的数据块大小存储的1 MB文件使用1 MB的磁盘空间,而不是128 MB。)Hadoop Archives或HAR文件是一种文件归档工具,可以更高效地将文件打包到HDFS块中,从而减少namenode内存使用量,同时仍然允许对文件进行透明访问。
结论:每个文件将存储在单独的块中。
发布于 2014-01-22 10:37:23
以下是Hadoop权威指南中指定的内容:
与单个磁盘的文件系统不同,
中小于单个数据块的文件不会占用整个数据块的底层存储空间
例如,如果您有30 MB的文件,并且数据块大小为64 MB,则此文件在逻辑上将存储在一个数据块中,但在物理文件系统中,HDFS仅使用30 MB来存储文件。剩下的30MB将免费使用。
发布于 2017-09-01 08:40:36
每个block只属于一个文件,如下所示:1.使用fsck命令获取文件的block信息:
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
显然,该块只属于一个文件
https://stackoverflow.com/questions/21274334
复制