MAPREDUCE-5568. Fixed CompletedJob in JHS to show progress percentage correctly in case the number of mappers or reducers is zero. Contributed by MinJi Kim

(cherry picked from commit 78f7cdbfd6)
This commit is contained in:
Jian He 2014-11-25 13:02:55 -08:00
parent 2863056530
commit 80e9be2d95
4 changed files with 70 additions and 7 deletions

View File

@ -24,6 +24,10 @@ Release 2.7.0 - UNRELEASED
MAPREDUCE-6049. AM JVM does not exit if MRClientService graceful shutdown MAPREDUCE-6049. AM JVM does not exit if MRClientService graceful shutdown
fails (Rohith via devaraj) fails (Rohith via devaraj)
MAPREDUCE-5568. Fixed CompletedJob in JHS to show progress percentage
correctly in case the number of mappers or reducers is zero. (MinJi Kim via
jianhe)
Release 2.6.0 - 2014-11-18 Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -141,8 +141,18 @@ private void constructJobReport() {
report.setFinishTime(jobInfo.getFinishTime()); report.setFinishTime(jobInfo.getFinishTime());
report.setJobName(jobInfo.getJobname()); report.setJobName(jobInfo.getJobname());
report.setUser(jobInfo.getUsername()); report.setUser(jobInfo.getUsername());
if ( getTotalMaps() == 0 ) {
report.setMapProgress(1.0f);
} else {
report.setMapProgress((float) getCompletedMaps() / getTotalMaps()); report.setMapProgress((float) getCompletedMaps() / getTotalMaps());
}
if ( getTotalReduces() == 0 ) {
report.setReduceProgress(1.0f);
} else {
report.setReduceProgress((float) getCompletedReduces() / getTotalReduces()); report.setReduceProgress((float) getCompletedReduces() / getTotalReduces());
}
report.setJobFile(getConfFile().toString()); report.setJobFile(getConfFile().toString());
String historyUrl = "N/A"; String historyUrl = "N/A";
try { try {

View File

@ -55,14 +55,19 @@ public class TestJobHistoryEntities {
private final String historyFileName = private final String historyFileName =
"job_1329348432655_0001-1329348443227-user-Sleep+job-1329348468601-10-1-SUCCEEDED-default.jhist"; "job_1329348432655_0001-1329348443227-user-Sleep+job-1329348468601-10-1-SUCCEEDED-default.jhist";
private final String historyFileNameZeroReduceTasks =
"job_1416424547277_0002-1416424775281-root-TeraGen-1416424785433-2-0-SUCCEEDED-default-1416424779349.jhist";
private final String confFileName = "job_1329348432655_0001_conf.xml"; private final String confFileName = "job_1329348432655_0001_conf.xml";
private final Configuration conf = new Configuration(); private final Configuration conf = new Configuration();
private final JobACLsManager jobAclsManager = new JobACLsManager(conf); private final JobACLsManager jobAclsManager = new JobACLsManager(conf);
private boolean loadTasks; private boolean loadTasks;
private JobId jobId = MRBuilderUtils.newJobId(1329348432655l, 1, 1); private JobId jobId = MRBuilderUtils.newJobId(1329348432655l, 1, 1);
Path fulleHistoryPath = Path fullHistoryPath =
new Path(this.getClass().getClassLoader().getResource(historyFileName) new Path(this.getClass().getClassLoader().getResource(historyFileName)
.getFile()); .getFile());
Path fullHistoryPathZeroReduces =
new Path(this.getClass().getClassLoader().getResource(historyFileNameZeroReduceTasks)
.getFile());
Path fullConfPath = Path fullConfPath =
new Path(this.getClass().getClassLoader().getResource(confFileName) new Path(this.getClass().getClassLoader().getResource(confFileName)
.getFile()); .getFile());
@ -87,7 +92,7 @@ public void testCompletedJob() throws Exception {
when(info.getConfFile()).thenReturn(fullConfPath); when(info.getConfFile()).thenReturn(fullConfPath);
//Re-initialize to verify the delayed load. //Re-initialize to verify the delayed load.
completedJob = completedJob =
new CompletedJob(conf, jobId, fulleHistoryPath, loadTasks, "user", new CompletedJob(conf, jobId, fullHistoryPath, loadTasks, "user",
info, jobAclsManager); info, jobAclsManager);
//Verify tasks loaded based on loadTask parameter. //Verify tasks loaded based on loadTask parameter.
assertEquals(loadTasks, completedJob.tasksLoaded.get()); assertEquals(loadTasks, completedJob.tasksLoaded.get());
@ -106,12 +111,27 @@ public void testCompletedJob() throws Exception {
assertEquals(JobState.SUCCEEDED, jobReport.getJobState()); assertEquals(JobState.SUCCEEDED, jobReport.getJobState());
} }
@Test (timeout=100000)
public void testCopmletedJobReportWithZeroTasks() throws Exception {
HistoryFileInfo info = mock(HistoryFileInfo.class);
when(info.getConfFile()).thenReturn(fullConfPath);
completedJob =
new CompletedJob(conf, jobId, fullHistoryPathZeroReduces, loadTasks, "user",
info, jobAclsManager);
JobReport jobReport = completedJob.getReport();
// Make sure that the number reduces (completed and total) are equal to zero.
assertEquals(0, completedJob.getTotalReduces());
assertEquals(0, completedJob.getCompletedReduces());
// Verify that the reduce progress is 1.0 (not NaN)
assertEquals(1.0, jobReport.getReduceProgress(), 0.001);
}
@Test (timeout=10000) @Test (timeout=10000)
public void testCompletedTask() throws Exception { public void testCompletedTask() throws Exception {
HistoryFileInfo info = mock(HistoryFileInfo.class); HistoryFileInfo info = mock(HistoryFileInfo.class);
when(info.getConfFile()).thenReturn(fullConfPath); when(info.getConfFile()).thenReturn(fullConfPath);
completedJob = completedJob =
new CompletedJob(conf, jobId, fulleHistoryPath, loadTasks, "user", new CompletedJob(conf, jobId, fullHistoryPath, loadTasks, "user",
info, jobAclsManager); info, jobAclsManager);
TaskId mt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.MAP); TaskId mt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.MAP);
TaskId rt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.REDUCE); TaskId rt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.REDUCE);
@ -140,7 +160,7 @@ public void testCompletedTaskAttempt() throws Exception {
HistoryFileInfo info = mock(HistoryFileInfo.class); HistoryFileInfo info = mock(HistoryFileInfo.class);
when(info.getConfFile()).thenReturn(fullConfPath); when(info.getConfFile()).thenReturn(fullConfPath);
completedJob = completedJob =
new CompletedJob(conf, jobId, fulleHistoryPath, loadTasks, "user", new CompletedJob(conf, jobId, fullHistoryPath, loadTasks, "user",
info, jobAclsManager); info, jobAclsManager);
TaskId mt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.MAP); TaskId mt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.MAP);
TaskId rt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.REDUCE); TaskId rt1Id = MRBuilderUtils.newTaskId(jobId, 0, TaskType.REDUCE);
@ -179,7 +199,7 @@ public void testGetTaskAttemptCompletionEvent() throws Exception{
HistoryFileInfo info = mock(HistoryFileInfo.class); HistoryFileInfo info = mock(HistoryFileInfo.class);
when(info.getConfFile()).thenReturn(fullConfPath); when(info.getConfFile()).thenReturn(fullConfPath);
completedJob = completedJob =
new CompletedJob(conf, jobId, fulleHistoryPath, loadTasks, "user", new CompletedJob(conf, jobId, fullHistoryPath, loadTasks, "user",
info, jobAclsManager); info, jobAclsManager);
TaskCompletionEvent[] events= completedJob.getMapAttemptCompletionEvents(0,1000); TaskCompletionEvent[] events= completedJob.getMapAttemptCompletionEvents(0,1000);
assertEquals(10, completedJob.getMapAttemptCompletionEvents(0,10).length); assertEquals(10, completedJob.getMapAttemptCompletionEvents(0,10).length);