4

我无法理解课堂上runOldMapper(...)runNewMapper(...)方法之间的区别MapTask。Hadoop根据"useNewApi"来自的参数决定JobConf;但是在框架中何时何地设置了这个参数?我认为所有作业的默认值都是 FALSE。我们可以通过调用JobConf.setUseNewMapper(boolean flag)which sets将值设置为 TRUE "mapred.mapper.new-api",但是我们应该在什么时候以及为什么决定设置这个参数呢?

4

1 回答 1

3

假设此行为是由mapred.mapper.new-api配置触发的,您是正确的。

根据您使用的是新作业还是旧作业 conf/client,请在源代码中查找:

  • org.apache.hadoop.mapreduce.Job.submit()方法,它调用setUseNewAPI()私有方法。这new-api取决于是否设置了旧的映射器/减速器类属性来配置属性
  • org.apache.hadoop.mapred.JobConf- 正如您在问题中指出的那样,setUseNewMapper(true)如果您使用新的 API 映射器实现,则开发人员将需要调用该方法(默认情况下为 false,并且您的映射器类实现了 mapred.Mapper 接口,或者如果您的映射器扩展了 mapreduce,则为 true。映射器类)
于 2012-12-01T14:11:57.747 回答