svn merge -c 1399289 FIXES: MAPREDUCE-4721. Task startup time in JHS is same as job startup time. (Ravi Prakash via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1399291 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-10-17 15:01:10 +00:00
parent 7b10aa9f80
commit 070ae0d73e
4 changed files with 77 additions and 3 deletions

View File

@ -440,6 +440,9 @@ Release 0.23.5 - UNRELEASED
MAPREDUCE-4521. mapreduce.user.classpath.first incompatibility with 0.20/1.x
(Ravi Prakash via bobby)
MAPREDUCE-4721. Task startup time in JHS is same as job startup time.
(Ravi Prakash via bobby)
Release 0.23.4 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -122,7 +122,12 @@ public class CompletedTask implements Task {
loadAllTaskAttempts();
this.report = Records.newRecord(TaskReport.class);
report.setTaskId(taskId);
report.setStartTime(taskInfo.getStartTime());
long minLaunchTime = Long.MAX_VALUE;
for(TaskAttempt attempt: attempts.values()) {
minLaunchTime = Math.min(minLaunchTime, attempt.getLaunchTime());
}
minLaunchTime = minLaunchTime == Long.MAX_VALUE ? -1 : minLaunchTime;
report.setStartTime(minLaunchTime);
report.setFinishTime(taskInfo.getFinishTime());
report.setTaskState(getState());
report.setProgress(getProgress());

View File

@ -0,0 +1,66 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.mapreduce.v2.hs;
import java.util.Map;
import java.util.TreeMap;
import org.apache.hadoop.mapreduce.TaskAttemptID;
import org.apache.hadoop.mapreduce.TaskType;
import org.apache.hadoop.mapreduce.jobhistory.JobHistoryParser.TaskAttemptInfo;
import org.apache.hadoop.mapreduce.jobhistory.JobHistoryParser.TaskInfo;
import org.apache.hadoop.mapreduce.v2.api.records.TaskId;
import org.apache.hadoop.mapreduce.v2.api.records.TaskReport;
import org.apache.hadoop.mapreduce.v2.hs.CompletedTask;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
public class TestCompletedTask{
@Test
public void testTaskStartTimes() {
TaskId taskId = Mockito.mock(TaskId.class);
TaskInfo taskInfo = Mockito.mock(TaskInfo.class);
Map<TaskAttemptID, TaskAttemptInfo> taskAttempts
= new TreeMap<TaskAttemptID, TaskAttemptInfo>();
TaskAttemptID id = new TaskAttemptID("0", 0, TaskType.MAP, 0, 0);
TaskAttemptInfo info = Mockito.mock(TaskAttemptInfo.class);
Mockito.when(info.getAttemptId()).thenReturn(id);
Mockito.when(info.getStartTime()).thenReturn(10l);
taskAttempts.put(id, info);
id = new TaskAttemptID("1", 0, TaskType.MAP, 1, 1);
info = Mockito.mock(TaskAttemptInfo.class);
Mockito.when(info.getAttemptId()).thenReturn(id);
Mockito.when(info.getStartTime()).thenReturn(20l);
taskAttempts.put(id, info);
Mockito.when(taskInfo.getAllTaskAttempts()).thenReturn(taskAttempts);
CompletedTask task = new CompletedTask(taskId, taskInfo);
TaskReport report = task.getReport();
// Make sure the startTime returned by report is the lesser of the
// attempy launch times
Assert.assertTrue(report.getStartTime() == 10);
}
}

View File

@ -1527,7 +1527,7 @@ History Server REST API's.
*---------------+--------------+--------------------------------+
| progress | float | The progress of the task as a percent|
*---------------+--------------+--------------------------------+
| startTime | long | The time in which the task started (in ms since epoch)|
| startTime | long | The time in which the task started (in ms since epoch) or -1 if it was never started |
*---------------+--------------+--------------------------------+
| finishTime | long | The time in which the task finished (in ms since epoch)|
*---------------+--------------+--------------------------------+
@ -1607,7 +1607,7 @@ History Server REST API's.
** Task Counters API
With the task counters API, you can object a collection of resources that represent al the counters for that task.
With the task counters API, you can object a collection of resources that represent all the counters for that task.
*** URI