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