如果我有很多小文件(~HDFS块大小)和一些大文件
这取决于您使用的InputFormat
,因为这决定了输入拆分计算,从而决定了映射任务的数量。
如果使用默认的TextInputFormat
,则每个文件将至少有一个拆分,因此每个文件至少有1个映射器,即使这些文件只有几个kB,每个映射器也只做很少的工作,但这会给Map/Reduce框架带来很多开销。也就是说,如果你保证这些"小"文件将接近块大小,那可能并不重要。
如果你无法控制你的文件,而且它们可能会变得非常小,我建议使用一种不同的InputFormat
,称为CombineFileInputFormat
,它将几个输入文件组合在同一个分割中,在这种情况下,映射的数量只取决于数据的总量,而不考虑文件的数量。可以在此处找到实现。