我无法理解 runOldMapper(...)
以及 runNewMapper(...)
中的方法 MapTask
班级。hadoop基于 "useNewApi"
参数来自 JobConf
; 但是,在框架中何时何地设置了此参数?我认为所有作业的默认值都是false。我们可以通过调用 JobConf.setUseNewMapper(boolean flag)
哪一套 "mapred.mapper.new-api"
,但是何时以及为什么我们应该决定设置这个参数?
我无法理解 runOldMapper(...)
以及 runNewMapper(...)
中的方法 MapTask
班级。hadoop基于 "useNewApi"
参数来自 JobConf
; 但是,在框架中何时何地设置了此参数?我认为所有作业的默认值都是false。我们可以通过调用 JobConf.setUseNewMapper(boolean flag)
哪一套 "mapred.mapper.new-api"
,但是何时以及为什么我们应该决定设置这个参数?
1条答案
按热度按时间flvlnr441#
你的假设是正确的,这种行为是由
mapred.mapper.new-api
配置。根据您使用的是新的还是旧的job conf/client,请在源代码中查找:
org.apache.hadoop.mapreduce.Job.submit()
方法,该方法调用setUseNewAPI()
私有方法。这将配置new-api
属性,这取决于是否设置了旧的Map器/还原器类属性org.apache.hadoop.mapred.JobConf
-正如您在问题中所指出的,您开发人员将需要调用setUseNewMapper(true)
方法(默认情况下为false,Map器类实现mapred.mapper接口;如果Map器扩展mapreduce.mapper类,则为true)