protected void initializeAndRunProcessor(Map<String, LogicalInput> inputs,
      Map<String, LogicalOutput> outputs)
      throws Exception {
    Throwable originalThrowable = null;

    try {
      MRTaskReporter mrReporter = new MRTaskReporter(getContext());
      // Init and run are both potentially long, and blocking operations. Synchronization
      // with the 'abort' operation will not work since if they end up blocking on a monitor
      // which does not belong to the lock, the abort will end up getting blocked.
      // Both of these method invocations need to handle the abort call on their own.
      rproc.init(mrReporter, inputs, outputs);
      rproc.run();

    } catch (Throwable t) {
      rproc.setAborted(true);
      originalThrowable = t;

    } finally {
      if (originalThrowable != null && (originalThrowable instanceof Error || 
          Throwables.getRootCause(originalThrowable) instanceof Error)) {
        LOG.error("Cannot recover from this FATAL error", originalThrowable);
        getContext().reportFailure(TaskFailureType.FATAL, originalThrowable, "Cannot recover from this error");

        throw new RuntimeException(originalThrowable);
      }

      try {
        if (rproc != null) {
          rproc.close();
        }
        if (originalThrowable == null) {
          closeOutputTasks(outputs, MROutput::commit);

          perfLogger.perfLogEnd(CLASS_NAME, PerfLogger.TEZ_RUN_PROCESSOR);
        }
      } catch (Throwable t) {
        if (originalThrowable == null) {
          originalThrowable = t;
        }
      }

      if (originalThrowable != null) {
        LOG.error("Failed initializeAndRunProcessor", originalThrowable);
        closeOutputTasks(outputs, MROutput::abort);

        if (originalThrowable instanceof InterruptedException) {
          throw (InterruptedException) originalThrowable;
        }
        throw new RuntimeException(originalThrowable);
      }
    }
  }
This provides the ability to pass things into TezProcessor, which is normally impossible
because of how Tez APIs are structured. Piggyback on ExecutionContext.
ql/src/java/org/apache/hadoop/hive/ql/exec/tez/TezProcessor.java