当我有很多KB的小gz文件时,我一直注意到这种行为。 Hadoop
作业需要更多时间才能完成。与我将那些小 gz 文件合并为一个大 gz 文件时相反。另外,小gz文件案例中的映射器数量与文件数量相同,为什么会这样?但在后一种情况下,它只是一个。所以,这可能是一个原因,是吗?
Hadoop通常可以很好地处理少量大文件,而不是相反。
默认情况下,MapReduce为每个必须处理的输入文件分配一个映射任务。因此,如果您有很多小gz文件,那么默认情况下每个文件都有自己的映射器来处理该文件。通常,JVM 初始化与实际处理相隔大约需要几秒钟的时间。因此,随着文件数量的增加,您会看到时间增加。
建议文件接近块大小,以消除小文件问题。
看看这篇来自cloudera的博客文章和这个SF问题。