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块大小和文件大小问题?的主要内容,如果未能解决你的问题,请参考以下文章