<%@ page contentType="text/html; charset=UTF-8" import="javax.servlet.http.*" import="java.io.*" import="java.util.*" import="org.apache.hadoop.mapred.*" import="org.apache.hadoop.util.*" import="java.text.SimpleDateFormat" import="org.apache.hadoop.mapred.JobHistory.*" %> "/> "/> <%! private static SimpleDateFormat dateFormat = new SimpleDateFormat("d/MM HH:mm:ss") ; %> <% String jobid = request.getParameter("jobid"); String jobTrackerId = request.getParameter("jobTrackerId"); String numTasks = request.getParameter("numTasks"); int showTasks = 10 ; if( numTasks != null ) { showTasks = Integer.parseInt(numTasks); } JobInfo job = (JobInfo)request.getSession().getAttribute("job"); %>

Hadoop Job <%=jobid %>

User : <%=job.get(Keys.USER) %>
JobName : <%=job.get(Keys.JOBNAME) %>
JobConf : <%=job.get(Keys.JOBCONF) %>
Submitted At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.SUBMIT_TIME), 0 ) %>
Launched At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.LAUNCH_TIME), job.getLong(Keys.SUBMIT_TIME)) %>
Finished At : <%=StringUtils.getFormattedTimeWithDiff(dateFormat, job.getLong(Keys.FINISH_TIME), job.getLong(Keys.LAUNCH_TIME)) %>
Status : <%= ((job.get(Keys.JOB_STATUS) == null)?"Incomplete" :job.get(Keys.JOB_STATUS)) %>

<% if( ! Values.SUCCESS.name().equals(job.get(Keys.JOB_STATUS)) ){ out.print("

No Analysis available as job did not finish

"); return ; } Map tasks = job.getAllTasks(); int finishedMaps = job.getInt(Keys.FINISHED_MAPS) ; int finishedReduces = job.getInt(Keys.FINISHED_REDUCES) ; JobHistory.Task [] mapTasks = new JobHistory.Task[finishedMaps]; JobHistory.Task [] reduceTasks = new JobHistory.Task[finishedReduces]; int mapIndex = 0 , reduceIndex=0; for( JobHistory.Task task : tasks.values() ) { if( Values.MAP.name().equals(task.get(Keys.TASK_TYPE)) ){ mapTasks[mapIndex++] = task ; }else{ reduceTasks[reduceIndex++] = task; } } Comparator c = new Comparator(){ public int compare(JobHistory.Task t1, JobHistory.Task t2){ Long l1 = new Long(t1.getLong(Keys.FINISH_TIME) - t1.getLong(Keys.START_TIME)); Long l2 = new Long(t2.getLong(Keys.FINISH_TIME) - t2.getLong(Keys.START_TIME)) ; return l2.compareTo(l1); } }; Arrays.sort(mapTasks, c); Arrays.sort(reduceTasks, c); JobHistory.Task minMap = mapTasks[mapTasks.length-1] ; JobHistory.Task minReduce = reduceTasks[reduceTasks.length-1] ; %>

Time taken by best performing Map task <%=minMap.get(Keys.TASKID) %> : <%=StringUtils.formatTimeDiff(minMap.getLong(Keys.FINISH_TIME), minMap.getLong(Keys.START_TIME) ) %>

Worse performing map tasks

<% for( int i=0;i <% } %>
Task IdTime taken
<%=mapTasks[i].get(Keys.TASKID) %> <%=StringUtils.formatTimeDiff(mapTasks[i].getLong(Keys.FINISH_TIME), mapTasks[i].getLong(Keys.START_TIME)) %>

Time taken by best performing Reduce task : <%=minReduce.get(Keys.TASKID) %> : <%=StringUtils.formatTimeDiff(minReduce.getLong(Keys.FINISH_TIME), minReduce.getLong(Keys.START_TIME) ) %>

Worse performing reduce tasks

<% for( int i=0;i <% } %>
Task IdTime taken
<%=reduceTasks[i].get(Keys.TASKID) %> <%=StringUtils.formatTimeDiff(reduceTasks[i].getLong(Keys.FINISH_TIME), reduceTasks[i].getLong(Keys.START_TIME)) %>