磁盘块大小和 hadoop 块大小

Posted

技术标签:

【中文标题】磁盘块大小和 hadoop 块大小【英文标题】:Disk block size and hadoop block size 【发布时间】:2018-09-29 15:28:47 【问题描述】:

我读过很多帖子说 64 MB 的 Hadoop 块大小减少了元数据,并有助于提高 4 kb 块大小的性能。但是,为什么数据块大小在 OS Disk 中正好是 4kb 而在 Hadoop 中是 64 MB。

为什么不是 100 或其他更大的数字?

【问题讨论】:

您混淆了 HDFS 和实际的操作系统文件系统... HDFS 只是一种抽象。更大的文件,意味着更少的管理(namenode内存使用),当前默认实际上是128MB。关于“为什么不是 100”,好吧,二进制系统并不真正喜欢不是 2 次方的大小,但可以随意将 HDFS 块大小编辑为您想要的任何大小 【参考方案1】:

但是,为什么数据块大小在 OS Disk 中正好是 4kb 而在 Hadoop 中是 64 MB。

与单个操作系统文件系统相比,我们在 HDFS 中存储大量数据。因此,为 HDFS 设置小块大小是没有意义的。通过具有较小的块大小,将会有更多的块,并且 NameNode 必须存储更多关于这些块的元数据。而且数据的获取也会很慢,因为必须从分散在许多机器上的大量块中获取数据。

为什么不是 100 或其他更大的数字?

最初 HDFS 块大小为 64MB,现在默认为 128MB。检查 hdfs-site.xml here 中的 dfs.blocksize 属性。这是因为更大更好的存储容量和速度(HDD 和 SSD)。当后来它变为 256MB 时,我们不应该感到惊讶。

查看this HDFS 漫画,快速了解 HDFS。

【讨论】:

【参考方案2】:

除了现有的答案之外,以下内容也是相关的:

操作系统级别的块和 HDFS 级别的块是不同的概念。当您在操作系统上有一个 10kb 的文件时,这实际上意味着分配了 3 个 4kb 的块,结果是您消耗了 12kb。 显然,您不想将大部分空间分配给未满的块,因此您需要较小的块大小。

然而,在 HDFS 上,块的内容决定了块的大小。 因此,如果您有 129MB 可以存储在 1 个 128MB 的块和 1 个 1MB 的块中。 (我不确定它是否会以不同的方式展开)。

因此,您不会“丢失”未分配的 127 mb。

考虑到这一点,您将需要一个相对较大的块大小来优化块管理。

【讨论】:

以上是关于磁盘块大小和 hadoop 块大小的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop块大小和文件大小问题?

将 Hadoop 块大小更改为小于最小块大小

文件系统块大小和每个文件浪费的磁盘空间之间的关系是啥

Hadoop fs查找块大小?

Hadoop小结

如何在hadoop中设置地图块大小?