我们都知道,与传统文件系统中的块大小相比,HDFS中的块大小非常大(64M或128M)。这样做是为了与传输时间相比减少寻道时间的百分比(传输速率的改进比磁盘寻道时间的改善要大得多,因此,设计文件系统时的目标总是与要传输的数据量相比减少寻道的数量)。但这也带来了内部碎片的另一个缺点(这就是为什么传统的文件系统块大小不是很大,只有几KB的数量级-通常是4K或8K)。
我正在通过书- Hadoop,最终指南,并发现这写在什么地方,小于HDFS块大小的文件不占用整个块,也没有考虑到整个块的空间,但不能理解如何?有人能帮我解释一下吗。
发布于 2013-01-01 16:58:34
HDFS中的块划分只是在逻辑上构建在底层文件系统(例如ext3/fat)的物理块之上。文件系统并没有在物理上划分为多个块(比如64MB或128MB或任何大小的块)。它只是将元数据存储在NameNode中的抽象。由于NameNode必须将整个元数据加载到内存中,因此元数据条目的数量是有限制的,因此需要较大的块大小。
因此,存储在HDFS上的三个8MB文件在逻辑上占用3个数据块(NameNode中的3个元数据条目),但在物理上占用底层文件系统中的8*3=24MB空间。
较大的块大小是为了在考虑NameNode内存限制的同时合理使用存储空间。
发布于 2012-10-22 23:16:37
根据Hadoop -权威指南
与单个磁盘的文件系统不同,
中小于单个块的文件不会占用整个块的底层存储空间。非限定时,本书中的术语“块”指的是HDFS中的块。
HDFS中的每个数据块都作为文件存储在底层操作系统文件系统(ext3、ext4等)的数据节点中,相应的详细信息存储在名称节点中。假设文件大小为200MB,块大小为64MB。在此方案中,文件将有4个数据块,对应于数据节点中大小分别为64MB、64MB、64MB和8MB的4个文件(假设复制大小为1)。
数据节点上的ls -ltr将显示数据块详细信息
-rw-rw-r-- 1培训培训11月21日15:27 blk_-7636754311343966967_1002.meta
-rw-rw-r-- 1培训4 Oct 21 15:27 blk_-7636754311343966967
-rw-rw-r-- 1培训99 10月21日15:29块_-2464541116551769838_1003.meta
-rw-rw-r-- 1培训培训11403 10月21日15:29 blk_-2464541116551769838
-rw-rw-r-- 1培训99 10月21日15:29块_-2951058074740783562_1004.meta
-rw-rw-r-- 1培训11544 10月21 15:29 blk_-2951058074740783562
发布于 2015-11-05 20:47:47
在普通的文件系统中,如果我们创建一个空文件,那么它也会保存4k大小,因为它存储在块上。在HDFS中不会发生这种情况,对于1 GB的文件,只使用1 GB的内存,而不是4 GB。说得更清楚些。
在操作系统中:文件大小为1KB,数据块大小为4KB,内存使用量为4KB,浪费时间为3KB。在HDFS中:文件大小1 GB,块大小:4 GB,已用内存:1 GB,浪费:0 GB,剩余3 GB可供其他块自由使用。
*不要把数字看得太重,它们是编造出来的数字,目的是为了说明问题。
如果您有2个1 GB的不同文件,那么将有2个块,每个块1 GB。在文件系统中,如果您存储两个文件,每个文件大小为1KB,那么您将拥有两个4KB + 4KB = 8KB的不同文件,其中6KB浪费。
所以这使得HDFS比文件系统要好得多。但具有讽刺意味的是,HDFS使用的是本地文件系统,最终也会出现同样的问题。
https://stackoverflow.com/questions/13012924
复制相似问题