Mryqu's Notes


  • 首页

  • 搜索
close

[Hadoop] 源码分析mapred.mapper.new-api/mapred.reducer.new-api设置与区别

时间: 2013-10-14   |   分类: BigData     |   阅读: 15 字 ~1分钟

即mapred和mapreduce包的区别后,本文再次从源码角度分析新老API(mapred.mapper.new-api/ mapred.reducer.new-api)的设置与区别。 mapred.mapper.new-api /mapred.reducer.new-api这两个参数很少显式去设置,默认为false,即使用mapred包下的老API。 不过MapReduce框架也会去自动识别应该使用老API还是新API。作业提交有两种方式,异步方式用submit,同步方式用waitForCompletion。不过org.apache.hadoop.mapreduce.Job.waitForCompletion(boolean)里调用了org.apache.hadoop.mapreduce.Job.submit()方法,submit方法又调用了org.apache.hadoop.mapreduce.Job.setUseNewAPI()方法。setUseNewAPI方法里面对新老API做了判断:

  • 是否设置了mapred.mapper.class属性,则mapred.mapper.new-api为true,否则为false。说白了就是用org.apache.hadoop.mapreduce.Job.setMapperClass(Class)还是org.apache.hadoop.mapred.JobConf.setMapperClass(Class)设置的Mapper,前者设置的是mapreduce.job.map.class属性,后者设置的是mapred.mapper.class属性。
  • 如果mapreduce.job.reduces属性值不为0,则看是否设置了mapred.reducer.class属性,则mapred.reducer.new-api为true,否则为false。说白了就是用org.apache.hadoop.mapreduce.Job.setReducerClass(Class)还是org.apache.hadoop.mapred.JobConf.setReducerClass(Class)设置的Mapper,前者设置的是mapreduce.job.reducer.class属性,后者设置的是mapred.reducer.class属性。

new-api相关区别

使用new-api不使用new-api
不允许设置下列属性:
  • mapred.input.format.class
  • mapred.mapper.class
  • mapred.partitioner.class
  • mapred.reducer.class
  • mapred.output.format.class
不允许设置下列属性:
  • mapreduce.job.inputformat.class
  • mapreduce.job.map.class
  • mapreduce.job.partitioner.class
  • mapreduce.job.reducer.class
  • mapreduce.job.outputformat.class
使用下列类或接口的实现:
  • o.a.h.conf.Configuration
  • o.a.h.mapreduce.Mapper抽象类
  • o.a.h.mapreduce.Reducer抽象类
  • o.a.h.mapreduce.OutputFormat抽象类
  • o.a.h.mapreduce.OutputCommitter抽象类
  • o.a.h.mapreduce.TaskID
  • o.a.h.mapreduce.TaskAttemptID
  • o.a.h.mapreduce.TaskAttemptContext接口
  • o.a.h.mapreduce.InputFormat抽象类
  • o.a.h.mapreduce.InputSplit抽象类
使用下列类或接口的实现:
  • o.a.h.mapred.JobConf
  • o.a.h.mapred.Mapper接口
  • o.a.h.mapred.Reducer接口
  • o.a.h.mapred.OutputFormat接口
  • o.a.h.mapred.OutputCommitter抽象类
  • o.a.h.mapred.TaskID
  • o.a.h.mapred.TaskAttemptID
  • o.a.h.mapred.TaskAttemptContext接口
  • o.a.h.mapred.InputFormat接口
  • o.a.h.mapred.InputSplit接口
使用方法:
  • o.a.h.mapred.MapTask.runNewMapper
  • o.a.h.mapreduce.JobSubmitter.writeNewSplits
  • o.a.h.mapred.ReduceTask.runNewReducer
使用方法:
  • o.a.h.mapred.MapTask.runOldMapper
  • o.a.h.mapreduce.JobSubmitter.writeOldSplits
  • o.a.h.mapred.ReduceTask.runOldReducer

标题:[Hadoop] 源码分析mapred.mapper.new-api/mapred.reducer.new-api设置与区别
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#hadoop# #mapreduce# #mapper# #reducer# #new-api#
开源事务管理器列表
Servlet URL映射模式
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%