Author: jlowe Date: Thu Mar 13 15:45:31 2014 New Revision: 1577210 URL: http://svn.apache.org/r1577210 Log: MAPREDUCE-5789. Average Reduce time is incorrect on Job Overview page. Contributed by Rushabh S Shah
Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/JobInfo.java hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/TestJobInfo.java Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt?rev=1577210&r1=1577209&r2=1577210&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt (original) +++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/CHANGES.txt Thu Mar 13 15:45:31 2014 @@ -34,6 +34,9 @@ Release 0.23.11 - UNRELEASED MAPREDUCE-5778. JobSummary does not escape newlines in the job name (Akira AJISAKA via jlowe) + MAPREDUCE-5789. Average Reduce time is incorrect on Job Overview page + (Rushabh S Shah via jlowe) + Release 0.23.10 - 2013-12-09 INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/JobInfo.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/JobInfo.java?rev=1577210&r1=1577209&r2=1577210&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/JobInfo.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/JobInfo.java Thu Mar 13 15:45:31 2014 @@ -289,7 +289,7 @@ public class JobInfo { avgMergeTime += attempt.getSortFinishTime() - attempt.getShuffleFinishTime(); avgReduceTime += (attempt.getFinishTime() - attempt - .getShuffleFinishTime()); + .getSortFinishTime()); } break; } Modified: hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/TestJobInfo.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/TestJobInfo.java?rev=1577210&r1=1577209&r2=1577210&view=diff ============================================================================== --- hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/TestJobInfo.java (original) +++ hadoop/common/branches/branch-0.23/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/test/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/TestJobInfo.java Thu Mar 13 15:45:31 2014 @@ -22,6 +22,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.IOException; +import java.util.HashMap; import junit.framework.Assert; @@ -29,12 +30,22 @@ import org.apache.hadoop.conf.Configurat import org.apache.hadoop.fs.Path; import org.apache.hadoop.mapred.JobACLsManager; import org.apache.hadoop.mapreduce.v2.api.records.JobId; +import org.apache.hadoop.mapreduce.v2.api.records.JobReport; +import org.apache.hadoop.mapreduce.v2.api.records.JobState; +import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptId; +import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptState; +import org.apache.hadoop.mapreduce.v2.api.records.TaskId; +import org.apache.hadoop.mapreduce.v2.api.records.TaskType; +import org.apache.hadoop.mapreduce.v2.app.job.Job; +import org.apache.hadoop.mapreduce.v2.app.job.Task; +import org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt; import org.apache.hadoop.mapreduce.v2.hs.HistoryFileManager.HistoryFileInfo; import org.apache.hadoop.mapreduce.v2.hs.CompletedJob; import org.apache.hadoop.mapreduce.v2.hs.TestJobHistoryEntities; import org.apache.hadoop.mapreduce.v2.util.MRBuilderUtils; import org.junit.Test; + public class TestJobInfo { @Test(timeout = 10000) @@ -66,4 +77,63 @@ public class TestJobInfo { // merge time should be 50. Assert.assertEquals(50L, jobInfo.getAvgMergeTime().longValue()); } + + @Test + public void testAverageReduceTime() { + + Job job = mock(CompletedJob.class); + final Task task1 = mock(Task.class); + final Task task2 = mock(Task.class); + + JobId jobId = MRBuilderUtils.newJobId(1L, 1, 1); + + final TaskId taskId1 = MRBuilderUtils.newTaskId(jobId, 1, TaskType.REDUCE); + final TaskId taskId2 = MRBuilderUtils.newTaskId(jobId, 2, TaskType.REDUCE); + + final TaskAttemptId taskAttemptId1 = MRBuilderUtils. + newTaskAttemptId(taskId1, 1); + final TaskAttemptId taskAttemptId2 = MRBuilderUtils. + newTaskAttemptId(taskId2, 2); + + final TaskAttempt taskAttempt1 = mock(TaskAttempt.class); + final TaskAttempt taskAttempt2 = mock(TaskAttempt.class); + + JobReport jobReport = mock(JobReport.class); + + when(taskAttempt1.getState()).thenReturn(TaskAttemptState.SUCCEEDED); + when(taskAttempt1.getLaunchTime()).thenReturn(0L); + when(taskAttempt1.getShuffleFinishTime()).thenReturn(4L); + when(taskAttempt1.getSortFinishTime()).thenReturn(6L); + when(taskAttempt1.getFinishTime()).thenReturn(8L); + + when(taskAttempt2.getState()).thenReturn(TaskAttemptState.SUCCEEDED); + when(taskAttempt2.getLaunchTime()).thenReturn(5L); + when(taskAttempt2.getShuffleFinishTime()).thenReturn(10L); + when(taskAttempt2.getSortFinishTime()).thenReturn(22L); + when(taskAttempt2.getFinishTime()).thenReturn(42L); + + + when(task1.getType()).thenReturn(TaskType.REDUCE); + when(task2.getType()).thenReturn(TaskType.REDUCE); + when(task1.getAttempts()).thenReturn + (new HashMap<TaskAttemptId, TaskAttempt>() + {{put(taskAttemptId1,taskAttempt1); }}); + when(task2.getAttempts()).thenReturn + (new HashMap<TaskAttemptId, TaskAttempt>() + {{put(taskAttemptId2,taskAttempt2); }}); + + when(job.getTasks()).thenReturn + (new HashMap<TaskId, Task>() + {{ put(taskId1,task1); put(taskId2, task2); }}); + when(job.getID()).thenReturn(jobId); + + when(job.getReport()).thenReturn(jobReport); + + when(job.getName()).thenReturn("TestJobInfo"); + when(job.getState()).thenReturn(JobState.SUCCEEDED); + + JobInfo jobInfo = new JobInfo(job); + + Assert.assertEquals(11L, jobInfo.getAvgReduceTime().longValue()); + } }