Hadoop2.4.0创建39063映射任务以在本地模式下处理10MB文件,并使用无效的Inputsplit配置

时间:2015-07-15 17:29:49

标签: hadoop mapreduce

我正在使用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 logic

max(minimumSize, min(maximumSize, blockSize))

max(128,min(64,128) --> 128MB并且它比文件大小好,因此它应该只创建一个inputsplit(一个映射器)

我只是好奇每次在eclipse中运行这个程序时框架如何计算 39063 映射器?

日志:

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

谢谢,

1 个答案:

答案 0 :(得分:2)

在您的代码中指定了:

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

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

计算为字节。因此,你获得了大量的Mapper。

我认为你应该使用这样的东西:

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

67108864是64MB的字节值

计算:64*1024*1024 = 67108864

mapred.max.split.size是basicall用于将小文件与defint拆分大小组合在一起处理大量小文件,mapred.min.split.size用于定义处理大文件的拆分。

如果您使用YARN或MR2,则应使用mapreduce.input.fileinputformat.split.minsize