Hadoop分布式文件系统中的块是存储多个小文件,还是一个块只存储一个文件?
答案 0 :(得分:14)
多个文件不存储在单个块中。顺便说一下,单个文件可以存储在多个块中。文件和block-id之间的映射将保留在NameNode中。
根据Hadoop : The Definitive Guide
与单个磁盘的文件系统不同,HDFS中小于单个块的文件不会占用整个块的底层存储空间。
HDFS旨在处理大文件。如果有太多小文件,则NameNode可能会被加载,因为它存储了HDFS的名称空间。请查看此article,了解如何使用太多小文件来缓解此问题。
答案 1 :(得分:4)
Hadoop块大小是Hadoop存储概念。每次当您在Hadoop中存储文件时,它将分为块大小,并根据复制因子和数据位置将其分布在群集上。
详情:
在HDFS上推送文件时,它将被分为块。每个块就像一个单独的文件,具有块大小所描述的最大大小。
每个块都包含一个.meta文件,用于在Hadoop上存储块的元数据信息。
如果文件非常小,那么整个文件将在一个块中,并且块(存储文件)将与文件和元文件具有相同的大小。
一些命令:
(Dir是我的群集 - / data2 / dfs / dn /):
BLOCK大小:1 GB
cd / data / dfs / dn - >当前 - >完成 - > subDir0 - > (这里是黄金)
Block仅为小文件使用KB存储空间,或者当文件大小为我的blocksize +某些KB
时-rw-r - r-- 1 hdfs hdfs 91K Sep 13 16:19 blk_1073781504
-rw-r - r-- 1 hdfs hdfs 19K Sep 13 16:21 blk_1073781504_40923.meta
当文件更大时,块的大小将如下所示
-rw-r - r-- 1 hdfs hdfs 1.0G Aug 31 12:03 blk_1073753814
-rw-r - r-- 1 hdfs hdfs 8.1M Aug 31 12:04 blk_1073753814_12994.meta
我希望它能解释块存储的东西。如果您想知道文件在块中的存储方式,请运行
hdfs fsck -blocks -locations
如果我错过了这里的任何内容,请告诉我。
答案 2 :(得分:3)
那么你可以使用HAR(Hadoop Archive)文件系统来做到这一点,该文件系统试图将多个小文件打包到由HAR文件系统管理的特殊部分文件的HDFS块中。
答案 3 :(得分:3)
一个块将存储一个文件。如果您的文件大于BlockSize(64/128 / ..),那么它将在具有相应BlockSize的多个块中进行分区。
答案 4 :(得分:1)
需要在hdfs, file is partioned into blocks based on size
中理解要点,而不是在内存中存在一些存储文件的块(这是误解)
基本上多个文件不存储在一个块中(除非它是Archive或Har文件)。