Author: todd
Date: Mon Aug 1 17:52:49 2011
New Revision: 1152875
URL: http://svn.apache.org/viewvc?rev=1152875&view=rev
Log:
MAPREDUCE-2740. MultipleOutputs in new API creates needless TaskAttemptContexts. Contributed
by Todd Lipcon.
Modified:
hadoop/common/trunk/mapreduce/CHANGES.txt
hadoop/common/trunk/mapreduce/src/java/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java
Modified: hadoop/common/trunk/mapreduce/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/mapreduce/CHANGES.txt?rev=1152875&r1=1152874&r2=1152875&view=diff
==============================================================================
--- hadoop/common/trunk/mapreduce/CHANGES.txt (original)
+++ hadoop/common/trunk/mapreduce/CHANGES.txt Mon Aug 1 17:52:49 2011
@@ -212,6 +212,9 @@ Trunk (unreleased changes)
JobInProgress.getCounters() aquire locks in a shorter time period.
(Joydeep Sen Sarma via schen)
+ MAPREDUCE-2740. MultipleOutputs in new API creates needless
+ TaskAttemptContexts. (todd)
+
BUG FIXES
MAPREDUCE-2603. Disable High-Ram emulation in system tests.
Modified: hadoop/common/trunk/mapreduce/src/java/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/mapreduce/src/java/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java?rev=1152875&r1=1152874&r2=1152875&view=diff
==============================================================================
--- hadoop/common/trunk/mapreduce/src/java/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java
(original)
+++ hadoop/common/trunk/mapreduce/src/java/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.java
Mon Aug 1 17:52:49 2011
@@ -132,6 +132,10 @@ public class MultipleOutputs<KEYOUT, VAL
* Cache for the taskContexts
*/
private Map<String, TaskAttemptContext> taskContexts = new HashMap<String, TaskAttemptContext>();
+ /**
+ * Cached TaskAttemptContext which uses the job's configured settings
+ */
+ private TaskAttemptContext jobOutputFormatContext;
/**
* Checks if a named output name is valid token.
@@ -382,11 +386,13 @@ public class MultipleOutputs<KEYOUT, VAL
public void write(KEYOUT key, VALUEOUT value, String baseOutputPath)
throws IOException, InterruptedException {
checkBaseOutputPath(baseOutputPath);
- TaskAttemptContext taskContext =
- new TaskAttemptContextImpl(context.getConfiguration(),
- context.getTaskAttemptID(),
- new WrappedStatusReporter(context));
- getRecordWriter(taskContext, baseOutputPath).write(key, value);
+ if (jobOutputFormatContext == null) {
+ jobOutputFormatContext =
+ new TaskAttemptContextImpl(context.getConfiguration(),
+ context.getTaskAttemptID(),
+ new WrappedStatusReporter(context));
+ }
+ getRecordWriter(jobOutputFormatContext, baseOutputPath).write(key, value);
}
// by being synchronized MultipleOutputTask can be use with a
|