Hadoop:MR启动的映射器少于指定的映射器

时间:2013-12-04 17:57:47

标签: hadoop mapreduce

我在远程机器上安装了Hadoop 1.2.1(带有超线程的四核),我正在使用1GB文件(一个文件,未压缩)测试MR的性能

当我将分割大小设置为大约250MB时,我有四个映射器。在输出文件(_logs / history / job ....)中,我看到它显示TOTAL MAP TASKS = 4

但是,当我将分割大小设置为1GB / 8以便它使用8个核心时,我看到日志显示为TOTAL MAP TASKS = 7。当分割大小为1GB / 16时,看看会发生什么,日志显示为TOTAL MAP TASKS = 14。这是因为一个核心是为jobtracker指定的,不能使用吗?

1 个答案:

答案 0 :(得分:2)

不幸的是,大多数可能影响地图任务数量的参数比硬性和快速规则更接近“建议”。由InputFormat决定它遵循这些参数的紧密程度。例如,FileInputFormat执行以下操作:

它根据:Math.max(minSize, Math.min(maxSize, blockSize))计算splitSize。对于每个文件,它计算该大小的分割数量。例如,如果拆分大小为1 GB,并且您有两个大小为1.5 GB和2.5 GB的文件,则将获得2 + 3 = 5个拆分。但是,当它走向文件末尾时,它有时会将这些分割拉伸最多10%。例如,5.1 GB文件中的1 GB分割大小将使用5个分割。基于特定的子类实现,还有一些注意事项。

我的观点是,有一些捏造,但这通常是合理的行为。您应该将您设置的参数视为指南,并相信您正在使用的InputFormat在确定要运行的映射器数量时会做一些合理的事情。

不,它与核心数量或任务槽数无关。这可能会影响可以同时运行多少个映射器,但不会影响映射任务的总数。