我正在使用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
谢谢,
1条答案
按热度按时间nr9pn0ug1#
在代码中指定了:
它的计算单位是字节。因此,你得到了大量的Map器。
我想你应该用这样的方法:
67108864是64mb的字节值
计算:
6410241024 = 67108864
mapred.max.split.size
basicall是用来组合小文件来定义分割大小的,在这里你要处理大量的小文件和mapred.min.split.size
用于定义处理大文件时的拆分。如果您使用的是Yarn或mr2,那么您应该使用
mapreduce.input.fileinputformat.split.minsize