Hadoop中的文件存储,块大小和输入拆分

时间:2014-07-28 19:30:12

标签: hadoop mapreduce hdfs input-split

考虑这种情况:

我有4个文件,每个文件各6 MB。 HDFS块大小为64 MB。

1 block将保存所有这些文件。它有一些额外的空间。如果添加了新文件,它将适用于此处

现在,当input splits计算Map-reduce作业Input format时,split size通常为HDFS block size,因此每个拆分都可以加载到内存中处理,减少寻找时间。)

这里有多少输入拆分:

  1. 是一个因为所有4个文件都包含在block中吗?

  2. 或者每个文件是一个输入拆分?

  3. 这是如何确定的?如果我希望将所有文件作为单个输入拆分处理,该怎么办?

2 个答案:

答案 0 :(得分:3)

  

1个块将保存所有这些文件。它有一些额外的空间。如果添加了新文件,它将在这里容纳[...]它是一个因为所有4个文件都包含在一个块中吗?

你实际上有4个街区。如果所有文件都适合单个块并不重要。

修改 块属于文件,而不是相反。 HDFS旨在存储几乎肯定会比块大小更大的大文件。每个块存储多个文件会给namenode增加不必要的复杂性......

  • 而不是blk0001文件,现在是blk0001 {file-start -> file-end}
  • 如何附加到文件?
  • 删除文件后会发生什么?
  • 等...
  

还是每个文件分配一个输入?

每个文件仍有1个分割。

  

这是如何确定的?

This is how

  

如果我希望将所有文件作为单个输入拆分处理,该怎么办?

使用其他输入格式,例如MultipleFileInputFormat

答案 1 :(得分:0)

  1. 每个文件都将存储在一个单独的块中,但文件不占用整个底层存储块,它会使用较少的物理存储。

  2. HDFS不适用于较小的文件 - check this out