diff --git a/ql/src/java/org/apache/hadoop/hive/ql/stats/CounterStatsAggregator.java b/ql/src/java/org/apache/hadoop/hive/ql/stats/CounterStatsAggregator.java index 026f4e0..16b4460 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/stats/CounterStatsAggregator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/stats/CounterStatsAggregator.java @@ -41,14 +41,16 @@ @Override public boolean connect(Configuration hconf, Task sourceTask) { - try { - jc = new JobClient(toJobConf(hconf)); - RunningJob job = jc.getJob(((MapRedTask)sourceTask).getJobID()); - if (job != null) { - counters = job.getCounters(); + if (sourceTask instanceof MapRedTask) { + try { + jc = new JobClient(toJobConf(hconf)); + RunningJob job = jc.getJob(((MapRedTask)sourceTask).getJobID()); + if (job != null) { + counters = job.getCounters(); + } + } catch (Exception e) { + LOG.error("Failed to get Job instance for " + sourceTask.getJobID(),e); } - } catch (Exception e) { - LOG.error("Failed to get Job instance for " + sourceTask.getJobID(),e); } return counters != null; } @@ -59,9 +61,13 @@ private JobConf toJobConf(Configuration hconf) { @Override public String aggregateStats(String counterGrpName, String statType) { - // In case of counters, aggregation is done by JobTracker / MR AM itself - // so no need to aggregate, simply return the counter value for requested stat. - return String.valueOf(counters.getGroup(counterGrpName).getCounter(statType)); + long value = 0; + if (counters != null) { + // In case of counters, aggregation is done by JobTracker / MR AM itself + // so no need to aggregate, simply return the counter value for requested stat. + value = counters.getGroup(counterGrpName).getCounter(statType); + } + return String.valueOf(value); } @Override