在我的程序的地图阶段,我需要知道创建的mappers的总数。这将帮助我在地图的关键创建过程中(我想为每个对象发出与mappers数一样多的关键值对)。hadoop得到实际的mappers人数
我知道设置mappers的数量只是一个提示,但获得的实际数量是多少。 我想在我的映射器的配置方法如下:
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吗?
现在,我只是计算输入文件夹中的文件数量,但这不是一个好的解决方案,因为文件可能大于块大小,并导致多个输入拆分并因此导致映射器。有什么建议么?
http://wiki.apache.org/hadoop/HowManyMapsAndReduces 这取决于你的块大小和你的文件数量。因此,如果您想要,然后将此编号添加到您的作业的distributedCache,您实际上可以在mapreduce之外进行计算。 – DDW
可能重复的[Hadoop MapReduce:映射器的默认数量](http://stackoverflow.com/questions/10591278/hadoop-mapreduce-default-number-of-mappers) – harpun
谢谢@irW的评论!我已经有类似的东西了,但是我想知道是否有像标准getter这样的东西,而不是重新实现已经存在并且已经调用的方法。不过,如果没有更好的解决方案,我会继续使用这个解决方案。 – vefthym