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

Posted

技术标签:

【中文标题】Hadoop块大小和文件大小问题?【英文标题】:Hadoop block size and file size issue? 【发布时间】:2012-07-06 20:00:06 【问题描述】:

这似乎是一个愚蠢的问题,但在 Hadoop 中假设块大小为 X(通常为 64 或 128 MB),本地文件大小为 Y(其中 Y 小于 X)。现在,当我将文件 Y 复制到 HDFS 时,它会消耗一个块还是hadoop会创建更小的块?

【问题讨论】:

【参考方案1】:

Hadoop 消耗一个块。这并不意味着存储容量将以相同的方式消耗。

从网页浏览 HDFS 时的输出如下所示:

filename1   file    48.11 KB    3   128 MB  2012-04-24 18:36    
filename2   file    533.24 KB   3   128 MB  2012-04-24 18:36    
filename3   file    303.65 KB   3   128 MB  2012-04-24 18:37

您会看到每个文件的大小都小于 128 MB 的块大小。这些文件以 KB 为单位。 HDFS 容量根据实际文件大小消耗,但每个文件消耗一个块。

可用的块数量有限,具体取决于 HDFS 的容量。您正在浪费块,因为在使用所有实际存储容量之前您将用完它们。请记住,Unix filsystem 也有块大小的概念,但它是一个非常小的数字,大约 512 字节。这个概念在 HDFS 中是相反的,块大小保持在 64-128 MB 左右。

另一个问题是,当您运行 map/reduce 程序时,它会尝试为每个块生成映射器,因此在这种情况下,当您处理三个小文件时,最终可能会生成三个映射器来处理它们。 当文件较小时,这会浪费资源。您还增加了延迟,因为每个映射器都需要时间来生成,然后最终会在一个非常小的文件上工作。您必须将它们压缩成更接近块大小的文件,以利用映射器处理较少数量的文件。

大量小文件的另一个问题是它加载了 namenode,它将每个块的映射(元数据)和块映射保存在主内存中。使用较小的文件,您可以更快地填充此表,并且随着元数据的增长将需要更多的主内存。

阅读以下内容以供参考:

    http://www.cloudera.com/blog/2009/02/the-small-files-problem/ http://www.ibm.com/developerworks/web/library/wa-introhdfs/ 哦!有一个关于 SO 的讨论:Small files and HDFS blocks

【讨论】:

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

更改 Hadoop 中现有文件的块大小

Hadoop如何修改HDFS文件存储块大小

Hadoop fs查找块大小?

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

hadoop中NAMENODE和DATANODE的大小

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