///////////////// Methods for new API //////////////////////
private void runNewCombiner(final TezRawKeyValueIterator rawIter, final Writer writer) throws InterruptedException, IOException {
RecordWriter recordWriter = new RecordWriter() {
@Override
public void write(Object key, Object value) throws IOException,
InterruptedException {
writer.append(key, value);
}
@Override
public void close(TaskAttemptContext context) throws IOException,
InterruptedException {
// Will be closed by whoever invokes the combiner.
}
};
Class<? extends org.apache.hadoop.mapreduce.Reducer> reducerClazz = (Class<? extends org.apache.hadoop.mapreduce.Reducer>) conf
.getClass(MRJobConfig.COMBINE_CLASS_ATTR, null,
org.apache.hadoop.mapreduce.Reducer.class);
org.apache.hadoop.mapreduce.Reducer reducer = ReflectionUtils.newInstance(reducerClazz, conf);
org.apache.hadoop.mapreduce.Reducer.Context reducerContext =
createReduceContext(
conf,
mrTaskAttemptID,
rawIter,
new MRCounters.MRCounter(combineInputKeyCounter),
new MRCounters.MRCounter(combineInputValueCounter),
recordWriter,
reporter,
(RawComparator)comparator,
keyClass,
valClass);
reducer.run(reducerContext);
recordWriter.close(reducerContext);
}