Reflection Hadoop如何决定在MapTask类中运行哪个mapper,OldMapper还是NewMapper?
我无法理解Reflection Hadoop如何决定在MapTask类中运行哪个mapper,OldMapper还是NewMapper?,reflection,hadoop,mapreduce,Reflection,Hadoop,Mapreduce,我无法理解runOldMapper(…)和runNewMapper(…)类中的runOldMapper(…)方法之间的区别。Hadoop根据JobConf中的参数“useNewApi”来决定;但是,在框架中何时何地设置了此参数?我认为所有作业的默认值都是FALSE。我们可以通过调用JobConf.setUseNewMapper(布尔标志)将该值设置为TRUE,该函数设置“mapred.mapper.new api”,但我们应该在何时以及为什么决定设置此参数?假设此行为是由mapred.mappe
runOldMapper(…)
和runNewMapper(…)
类中的runOldMapper(…)
方法之间的区别。Hadoop根据JobConf
中的参数“useNewApi”
来决定;但是,在框架中何时何地设置了此参数?我认为所有作业的默认值都是FALSE。我们可以通过调用JobConf.setUseNewMapper(布尔标志)
将该值设置为TRUE,该函数设置“mapred.mapper.new api”
,但我们应该在何时以及为什么决定设置此参数?假设此行为是由mapred.mapper.new api
配置触发的,这是正确的
根据您使用的是新作业配置还是旧作业配置/客户端,在源代码中查找:
方法,该方法调用org.apache.hadoop.mapreduce.Job.submit()
private方法。这将根据是否设置了旧的映射器/还原器类属性来配置setUseNewAPI()
属性新api
-如您在问题中所述,如果您使用新的API映射器实现,开发人员需要调用org.apache.hadoop.mapred.JobConf
方法(默认情况下为false,映射器类实现mapred.mapper接口;如果映射器扩展了mapreduce.mapper类,则为true)setUseNewMapper(true)