hadoop2.4.0创建39063个Map任务以在本地模式下处理具有无效inputsplit配置的10mb文件

vuv7lop3  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(204)

我正在使用hadoop-2.4.0和以下所有默认配置:

FileInputFormat.setInputPaths(job, new Path("in")); //10mb file;  just one file.

FileOutputFormat.setOutputPath(job, new Path("out"));

job.getConfiguration().set("mapred.max.split.size", "64");

job.getConfiguration().set("mapred.min.split.size", "128");

ps:我设置的最大分割大小小于最小值(最初我设置错误,我意识到)
根据inputsplit calucaiton逻辑

max(minimumSize, min(maximumSize, blockSize))
``` `max(128,min(64,128) --> 128MB` 而且它比文件大小大,所以它应该只创建一个inputspit(一个Map器)
我只是好奇当我在eclipse中运行这个程序时,框架是如何计算39063个Map器的?
日志:

2015-07-15 12:02:37 DEBUG LocalJobRunner Starting mapper thread pool executor.

2015-07-15 12:02:37 DEBUG LocalJobRunner Max local threads: 1

2015-07-15 12:02:37 DEBUG LocalJobRunner Map tasks to process: 39063

2015-07-15 12:02:38 INFO LocalJobRunner Starting task:
attempt_local192734774_0001_m_000000_0

谢谢,
nr9pn0ug

nr9pn0ug1#

在代码中指定了:

job.getConfiguration().set("mapred.max.split.size", "64");

job.getConfiguration().set("mapred.min.split.size", "128");

它的计算单位是字节。因此,你得到了大量的Map器。
我想你应该用这样的方法:

job.getConfiguration().set("mapred.min.split.size", 67108864);

67108864是64mb的字节值
计算:
6410241024 = 67108864 mapred.max.split.size basicall是用来组合小文件来定义分割大小的,在这里你要处理大量的小文件和 mapred.min.split.size 用于定义处理大文件时的拆分。
如果您使用的是Yarn或mr2,那么您应该使用 mapreduce.input.fileinputformat.split.minsize

相关问题