瀏覽代碼

MAPREDUCE-6720. Inconsistent values of counters across tasks and job reported to timeline service. Contributed by Varun Saxena

Naganarasimha 8 年之前
父節點
當前提交
8bf87eede2

+ 4 - 0
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobHistoryEventHandler.java

@@ -1125,6 +1125,10 @@ public class JobHistoryEventHandler extends AbstractService
     org.apache.hadoop.yarn.api.records.timelineservice.TimelineEntity entity =
     org.apache.hadoop.yarn.api.records.timelineservice.TimelineEntity entity =
         createBaseEntity(event, timestamp, entityType, setCreatedTime);
         createBaseEntity(event, timestamp, entityType, setCreatedTime);
     entity.setId(taskId);
     entity.setId(taskId);
+    if (event.getEventType() == EventType.TASK_STARTED) {
+      entity.addInfo("TASK_TYPE",
+          ((TaskStartedEvent)event).getTaskType().toString());
+    }
     entity.addIsRelatedToEntity(relatedJobEntity, jobId.toString());
     entity.addIsRelatedToEntity(relatedJobEntity, jobId.toString());
     return entity;
     return entity;
   }
   }

+ 6 - 6
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/jobhistory/JobFinishedEvent.java

@@ -158,12 +158,12 @@ public class JobFinishedEvent  implements HistoryEvent {
 
 
   @Override
   @Override
   public Set<TimelineMetric> getTimelineMetrics() {
   public Set<TimelineMetric> getTimelineMetrics() {
-    Set<TimelineMetric> jobMetrics = JobHistoryEventUtils
-        .countersToTimelineMetric(getMapCounters(), finishTime);
-    jobMetrics.addAll(JobHistoryEventUtils
-        .countersToTimelineMetric(getReduceCounters(), finishTime));
-    jobMetrics.addAll(JobHistoryEventUtils
-        .countersToTimelineMetric(getTotalCounters(), finishTime));
+    Set<TimelineMetric> jobMetrics = JobHistoryEventUtils.
+        countersToTimelineMetric(getTotalCounters(), finishTime);
+    jobMetrics.addAll(JobHistoryEventUtils.
+        countersToTimelineMetric(getMapCounters(), finishTime, "MAP:"));
+    jobMetrics.addAll(JobHistoryEventUtils.
+        countersToTimelineMetric(getReduceCounters(), finishTime, "REDUCE:"));
     return jobMetrics;
     return jobMetrics;
   }
   }
 }
 }

+ 6 - 1
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-core/src/main/java/org/apache/hadoop/mapreduce/util/JobHistoryEventUtils.java

@@ -61,11 +61,16 @@ public final class JobHistoryEventUtils {
 
 
   public static Set<TimelineMetric> countersToTimelineMetric(Counters counters,
   public static Set<TimelineMetric> countersToTimelineMetric(Counters counters,
       long timestamp) {
       long timestamp) {
+    return countersToTimelineMetric(counters, timestamp, "");
+  }
+
+  public static Set<TimelineMetric> countersToTimelineMetric(Counters counters,
+      long timestamp, String groupNamePrefix) {
     Set<TimelineMetric> entityMetrics = new HashSet<TimelineMetric>();
     Set<TimelineMetric> entityMetrics = new HashSet<TimelineMetric>();
     for (CounterGroup g : counters) {
     for (CounterGroup g : counters) {
       String groupName = g.getName();
       String groupName = g.getName();
       for (Counter c : g) {
       for (Counter c : g) {
-        String name = groupName + ":" + c.getName();
+        String name = groupNamePrefix + groupName + ":" + c.getName();
         TimelineMetric metric = new TimelineMetric();
         TimelineMetric metric = new TimelineMetric();
         metric.setId(name);
         metric.setId(name);
         metric.addValue(timestamp, c.getValue());
         metric.addValue(timestamp, c.getValue());