Mapreduce程序的映射程序数



如果我的mapreduce作业读取了60个文件,每个文件的大小为1mb,那么将执行多少映射器。假设在这个/user/cloudera/inputs/目录下有60个文件,每个文件的大小是1mb

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

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

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

Map任务通常一次处理一个输入块(使用默认的FileInputFormat)。如果文件很小,而且有很多,那么每个地图任务处理的输入很少,而且有更多的地图任务,每个任务都会带来额外的记账开销。将1GB的文件分成16个64MB的块,与10000个100KB左右的文件进行比较。10000个文件每个使用一个映射,作业时间可能比使用单个输入文件的等效文件慢几十倍或数百倍。

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

如果您使用的是像TextInputFormat这样的东西,问题是每个文件至少有一个分割,所以映射数量的上限是文件数量,在您有许多非常小的文件的情况下,最终会有许多映射器处理每一个非常小的数据。

为了解决这个问题,您应该使用CombineFileInputFormat,它将把多个文件打包到同一个分割中(我认为这达到了块大小的限制),因此使用这种格式,映射器的数量将与文件的数量无关,它将只取决于数据量。

您必须通过从CombineFileInputFormt扩展来创建自己的输入格式,您可以在这里找到实现。定义了InputFormat后,让我们像在链接CombinedInputFormat中那样称它,您可以通过以下操作告诉您的工作使用它:

job.setInputFormatClass(CombinedInputFormat.class);

相关内容

  • 没有找到相关文章

最新更新