Hadoop如何决定在MapTask类,OldMapper或NewMapper中运行哪个映射器?

时间:2012-12-01 13:56:28

标签: reflection hadoop mapreduce

我无法理解runOldMapper(...)类中runNewMapper(...)MapTask方法之间的区别。 Hadoop根据"useNewApi"中的JobConf参数决定;但是在框架中何时何地设置了此参数?我认为所有工作的默认值都是FALSE。我们可以通过调用设置JobConf.setUseNewMapper(boolean flag)的{​​{1}}将值设置为TRUE,但是我们何时以及为什么要决定设置此参数?

1 个答案:

答案 0 :(得分:3)

您认为这种行为是由mapred.mapper.new-api配置触发的,这是正确的。

根据您使用新旧作业conf / client,查看源代码:

  • org.apache.hadoop.mapreduce.Job.submit()方法,它调用setUseNewAPI()私有方法。这会根据是否设置旧的映射器/减速器类属性来配置new-api属性
  • org.apache.hadoop.mapred.JobConf - 如您在问题中所述,如果您使用新的API映射器实现,开发人员将需要调用setUseNewMapper(true)方法(默认情况下为false,并且您的mapper类实现了mapred .Mapper接口,如果你的mapper扩展了mapreduce.Mapper类,则为true)