code: public void close() throws IOException, InterruptedException {
  		for(OutputContext outputContext : this.outputContexts.values()) {
  			outputContext.recordWriter.close(outputContext.taskAttemptContext);
  			outputContext.outputCommitter.commitTask(outputContext.taskAttemptContext);
  			// This is a trick for Hadoop 2.0 where there is extra business logic in commitJob()
  			JobContext jContext;
  			try {
  				jContext = JobContextFactory.get(outputContext.taskAttemptContext.getConfiguration(),
  				    new JobID());
  			} catch(Exception e) {
  				throw new IOException(e);
  			}
  			try {
  				Class cl = Class.forName(OutputCommitter.class.getName());
  				Method method = cl.getMethod("commitJob", Class.forName(JobContext.class.getName()));
  				if(method != null) {
  					method.invoke(outputContext.outputCommitter, jContext);
  				}
  			} catch(Exception e) {
  				// Hadoop 2.0 : do nothing
  				// we need to call commitJob as a trick, but the trick itself may throw an IOException.
  				// it doesn't mean that something went wrong.
  				// If there was something really wrong it would have failed before.
  			}
  			outputContext.outputCommitter.cleanupJob(outputContext.jobContext);
  		}
  	}
docs: Closes all the opened outputs.
  
  This should be called from cleanup method of map/reduce task. If overridden subclasses must invoke
  <code>super.close()</code> at the end of their <code>close()</code>