Mapreduce程序的映射器数量

时间:2014-10-31 14:01:10

标签: mapreduce

如果我的mapreduce作业读取目录中每1 mb大小可用的60个文件,那么将执行多少Mapper。让我们假设在这个/ user / cloudera / inputs /目录下有60个文件,每个文件的大小是1 mb

在我的mapreduce配置类中,我指定了目录/ user / cloudera / inputs /.

有人可以告诉我有多少块用于存储每个1 mb大小的60个文件以及执行了多少个映射器

它是60块和60个映射器吗?如果是这样有人解释我是如何

1 个答案:

答案 0 :(得分:0)

Map任务通常一次处理一个输入块(使用默认的FileInputFormat)。如果文件很小并且有很多文件,那么每个地图任务处理的输入都很少,而且还有更多的地图任务,每个任务都会增加额外的簿记开销。将1GB文件分成16个64MB块和10,000个左右100KB文件。 10,000个文件各使用一个映射,作业时间比单个输入文件的等效数据慢几十或几百倍。

In your case 60 map are used in 60 files and used 60 blocks.

如果你正在使用类似TextInputFormat的东西,问题是每个文件至少有1个分割,所以地图数量的上限是文件的数量,在你的情况下,你有很多非常小的文件最终会有许多映射器处理每个非常少的数据。

要解决这个问题,你应该使用CombineFileInputFormat,它将多个文件打包到同一个分区中(我想到了块大小限制),所以使用这种格式,映射器的数量将独立于文件的数量,它将仅取决于数据量。

您必须通过从CombineFileInputFormt扩展来创建自己的输入格式,您可以找到实现here。一旦你定义了你的InputFormat,让我们在链接CombinedInputFormat中调用它,你可以通过这样做告诉你的工作使用它:

job.setInputFormatClass(CombinedInputFormat.class);