我们都知道,与传统文件系统中的块大小相比,HDFS中的块大小非常大(64M或128M)。这样做是为了减少与传输时间相比的寻道时间百分比(与对磁盘寻道时间的改进相比,传输速率的提高幅度要大得多,因此,设计文件系统时的目标始终是减少这种情况。与要传输的数据量相比的搜寻次数)。但这带来了内部碎片化的另一个缺点(这就是为什么传统文件系统块大小不是很高,并且只有几KB的数量级-通常为4K或8K)的原因。
我正在浏览《 Hadoop权威指南》这本书,发现这写在某个地方,小于HDFS块大小的文件不会占满整个块,也不占满整个块的空间,但不知道如何?有人可以对此有所启发吗?
最佳答案
HDFS中的块划分只是在逻辑上建立在基础文件系统的物理块之上(例如ext3 / fat)。文件系统没有物理上划分为块(例如64MB或128MB或任何块大小)。将元数据存储在NameNode中只是一种抽象。由于NameNode必须将整个元数据加载到内存中,因此,元数据条目的数量受到限制,从而说明了对大块大小的需求。
因此,存储在HDFS上的三个8MB文件在逻辑上占用3个块(NameNode中的3个元数据条目),但在物理上占用基础文件系统中的8 * 3 = 24MB空间。
大块大小是为了考虑到存储空间的正确使用,同时考虑到NameNode的内存限制。