Job.setMapperClass(xxx.class):实际上设置的是mapreduce.map.class,即New。
JobConf.setMapperClass(xxx.class):实际上设置的是mapred.mapper.class,即Old。
而job的setUseNewAPI中
String oldMapperClass = "mapred.mapper.class";
String oldReduceClass = "mapred.reducer.class";
conf.setBooleanIfUnset("mapred.mapper.new-api",
conf.get(oldMapperClass) == null);
可见不调用JobConf.setMapperClass,就应该是使用的NewAPI。
但在使用LocalJobRunner多线程运行job时,会偶尔报出以下错误,使用老的api了。
java.lang.ClassCastException: ***InputSplit cannot be cast to org.apache.hadoop.mapred.InputSplit
这里有个同样的问题,也没有解决,怀疑可能是多线程时造成mr内部出问题了