private List<ClientStatsPublisher> getClientStatPublishers() {
    List<ClientStatsPublisher> clientStatsPublishers = new ArrayList<ClientStatsPublisher>();
    String confString = HiveConf.getVar(job, HiveConf.ConfVars.CLIENT_STATS_PUBLISHERS);
    confString = confString.trim();
    if (confString.equals("")) {
      return clientStatsPublishers;
    }

    String[] clientStatsPublisherClasses = confString.split(",");

    for (String clientStatsPublisherClass : clientStatsPublisherClasses) {
      try {
        clientStatsPublishers.add((ClientStatsPublisher) Class.forName(
            clientStatsPublisherClass.trim(), true, Utilities.getSessionSpecifiedClassLoader()).newInstance());
      } catch (Exception e) {
        LOG.warn(e.getClass().getName() + " occured when trying to create class: "
            + clientStatsPublisherClass.trim() + " implementing ClientStatsPublisher interface");
        LOG.warn("The exception message is: " + e.getMessage());
        LOG.warn("Program will continue, but without this ClientStatsPublisher working");
      }
    }
    return clientStatsPublishers;
  }
This class contains the state of the running task Going forward, we will return this handle
from execute and Driver can split execute into start, monitorProgess and postProcess.
ql/src/java/org/apache/hadoop/hive/ql/exec/mr/HadoopJobExecHelper.java