考虑这种情况:
我有4个文件,每个文件各6 MB。 HDFS
块大小为64 MB。
1 block
将保存所有这些文件。它有一些额外的空间。如果添加了新文件,它将适用于此处
现在,当input splits
计算Map-reduce
作业Input format
时,split size
通常为HDFS block size
,因此每个拆分都可以加载到内存中处理,减少寻找时间。)
这里有多少输入拆分:
是一个因为所有4个文件都包含在block
中吗?
或者每个文件是一个输入拆分?
这是如何确定的?如果我希望将所有文件作为单个输入拆分处理,该怎么办?
答案 0 :(得分:3)
1个块将保存所有这些文件。它有一些额外的空间。如果添加了新文件,它将在这里容纳[...]它是一个因为所有4个文件都包含在一个块中吗?
你实际上有4个街区。如果所有文件都适合单个块并不重要。
修改强> 块属于文件,而不是相反。 HDFS旨在存储几乎肯定会比块大小更大的大文件。每个块存储多个文件会给namenode增加不必要的复杂性......
blk0001
文件,现在是blk0001 {file-start -> file-end}
。还是每个文件分配一个输入?
每个文件仍有1个分割。
这是如何确定的?
如果我希望将所有文件作为单个输入拆分处理,该怎么办?
使用其他输入格式,例如MultipleFileInputFormat
。
答案 1 :(得分:0)
每个文件都将存储在一个单独的块中,但文件不占用整个底层存储块,它会使用较少的物理存储。
HDFS不适用于较小的文件 - check this out