这似乎是一个愚蠢的问题,但在Hadoop中假设blocksize是X(通常是64或128 MB),本地文件大小是Y(其中Y小于X).现在,当我将文件Y复制到HDFS时,它会占用一个块或者hadoop会创建更小的块?
pyf*_*unc 23
Hadoop消耗了一个块.这并不意味着将以相同的方式消耗存储容量.
从Web浏览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
Run Code Online (Sandbox Code Playgroud)
您会看到每个文件大小都小于128 MB的块大小.这些文件以KB为单位.根据实际文件大小消耗HDFS容量,但每个文件消耗一个块.
可用的块数量有限,具体取决于HDFS的容量.在使用所有实际存储容量之前,您将耗尽块,因为您将耗尽它们.请记住,Unix filsystem也有块大小的概念,但是512字节的数字非常小.这个概念在HDFS中被反转,其中块大小保持在64-128 MB左右.
另一个问题是,当你运行的map/reduce程序,它会尝试在这种情况下产卵每块的映射,所以当你正在处理三个小文件,它可能最终会产卵3名映射器对他们的最终奏效.当文件较小时,这会浪费资源.您还会增加延迟,因为每个映射器需要时间来生成,然后最终将在非常小的文件上工作.您必须将它们压缩到更接近块大小的文件中,以利用处理较少数量文件的映射器.
许多小文件的另一个问题是它加载了namenode,它保存了每个块的映射(元数据)和主存储器中的块映射.对于较小的文件,您可以更快地填充此表,并且随着元数据的增长将需要更多的主内存.
阅读以下内容以供参考:
归档时间: |
|
查看次数: |
13174 次 |
最近记录: |