Mapreduce程序的映射程序数

Mapreduce程序的映射程序数,mapreduce,Mapreduce,如果我的mapreduce作业读取目录中每1 mb可用的60个文件,将执行多少个映射程序。假设在这个/user/cloudera/inputs/目录下有60个文件,每个文件的大小是1MB 在我的mapreduce配置类中,我指定了目录/user/cloudera/inputs/ 有谁能告诉我,有多少块用于存储每1 mb大小的60个文件,以及执行了多少个映射程序 是60个块和60个映射器吗?如果是这样,有人告诉我映射任务通常是如何使用默认的FileInputFormat一次处理一个输入块的。如果文

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

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

有谁能告诉我,有多少块用于存储每1 mb大小的60个文件,以及执行了多少个映射程序


是60个块和60个映射器吗?如果是这样,有人告诉我映射任务通常是如何使用默认的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);