在我的程序的映射阶段,我需要知道创建的映射器的总数。这将有助于我在映射的键创建过程中(我想为每个对象发出与映射器数量一样多的键值对)。
我知道设置映射器的数量只是一个提示,但是获取实际映射器数量的方法是什么。我在 Mapper 的配置方法中尝试了以下操作:
public void configure(JobConf conf) {
System.out.println("map tasks: "+conf.get("mapred.map.tasks"));
System.out.println("tipid: "+conf.get("mapred.tip.id"));
System.out.println("taskpartition: "+conf.get("mapred.task.partition"));
}
但我得到了结果:
map tasks: 1
tipid: task_local1204340194_0001_m_000000
taskpartition: 0
map tasks: 1
tipid: task_local1204340194_0001_m_000001
taskpartition: 1
这意味着(?)有两个地图任务,而不仅仅是一个,正如打印的那样(这很自然,因为我有两个小输入文件)。地图任务后的数字不应该是2吗?
目前,我只计算输入文件夹中的文件数量,但这不是一个好的解决方案,因为文件可能大于块大小并导致多个输入拆分和映射器。有什么建议么?