<%@ page contentType="text/html; charset=UTF-8" import="javax.servlet.http.*" import="java.io.*" import="java.util.*" import="org.apache.hadoop.fs.*" import="org.apache.hadoop.mapred.*" import="org.apache.hadoop.util.*" import="java.text.SimpleDateFormat" import="org.apache.hadoop.mapred.JobHistory.*" %> "/> "/> <%! static SimpleDateFormat dateFormat = new SimpleDateFormat("d-MMM-yyyy HH:mm:ss") ; %> <% String jobid = request.getParameter("jobid"); String logFile = request.getParameter("logFile"); String encodedLogFileName = JobHistory.JobInfo.encodeJobHistoryFilePath(logFile); Path jobFile = new Path(logFile); String[] jobDetails = jobFile.getName().split("_"); String jobUniqueString = jobDetails[0] + "_" +jobDetails[1] + "_" + jobid ; JobInfo job = (JobInfo)request.getSession().getAttribute("job"); FileSystem fs = (FileSystem)request.getSession().getAttribute("fs"); %>

Hadoop Job <%=jobid %> on History Viewer

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) == "")?"Incomplete" :job.get(Keys.JOB_STATUS)) %>
<% Map tasks = job.getAllTasks(); int totalMaps = 0 ; int totalReduces = 0; int totalCleanups = 0; int totalSetups = 0; int numFailedMaps = 0; int numKilledMaps = 0; int numFailedReduces = 0 ; int numKilledReduces = 0; int numFinishedCleanups = 0; int numFailedCleanups = 0; int numKilledCleanups = 0; int numFinishedSetups = 0; int numFailedSetups = 0; int numKilledSetups = 0; long mapStarted = 0 ; long mapFinished = 0 ; long reduceStarted = 0 ; long reduceFinished = 0; long cleanupStarted = 0; long cleanupFinished = 0; long setupStarted = 0; long setupFinished = 0; Map allHosts = new TreeMap(); for (JobHistory.Task task : tasks.values()) { Map attempts = task.getTaskAttempts(); allHosts.put(task.get(Keys.HOSTNAME), ""); for (TaskAttempt attempt : attempts.values()) { long startTime = attempt.getLong(Keys.START_TIME) ; long finishTime = attempt.getLong(Keys.FINISH_TIME) ; if (Values.MAP.name().equals(task.get(Keys.TASK_TYPE))){ if (mapStarted==0 || mapStarted > startTime ) { mapStarted = startTime; } if (mapFinished < finishTime ) { mapFinished = finishTime ; } totalMaps++; if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) { numFailedMaps++; } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) { numKilledMaps++; } } else if (Values.REDUCE.name().equals(task.get(Keys.TASK_TYPE))) { if (reduceStarted==0||reduceStarted > startTime) { reduceStarted = startTime ; } if (reduceFinished < finishTime) { reduceFinished = finishTime; } totalReduces++; if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) { numFailedReduces++; } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) { numKilledReduces++; } } else if (Values.CLEANUP.name().equals(task.get(Keys.TASK_TYPE))) { if (cleanupStarted==0||cleanupStarted > startTime) { cleanupStarted = startTime ; } if (cleanupFinished < finishTime) { cleanupFinished = finishTime; } totalCleanups++; if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) { numFinishedCleanups++; } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) { numFailedCleanups++; } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) { numKilledCleanups++; } } else if (Values.SETUP.name().equals(task.get(Keys.TASK_TYPE))) { if (setupStarted==0||setupStarted > startTime) { setupStarted = startTime ; } if (setupFinished < finishTime) { setupFinished = finishTime; } totalSetups++; if (Values.SUCCESS.name().equals(attempt.get(Keys.TASK_STATUS))) { numFinishedSetups++; } else if (Values.FAILED.name().equals(attempt.get(Keys.TASK_STATUS))) { numFailedSetups++; } else if (Values.KILLED.name().equals(attempt.get(Keys.TASK_STATUS))) { numKilledSetups++; } } } } %> Analyse This Job
KindTotal Tasks(successful+failed+killed)Successful tasksFailed tasksKilled tasksStart TimeFinish Time
Setup <%=totalSetups%> <%=numFinishedSetups%> <%=numFailedSetups%> <%=numKilledSetups%> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, setupStarted, 0) %> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, setupFinished, setupStarted) %>
Map <%=totalMaps %> <%=job.getInt(Keys.FINISHED_MAPS) %> <%=numFailedMaps %> <%=numKilledMaps %> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapStarted, 0) %> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, mapFinished, mapStarted) %>
Reduce <%=totalReduces%> <%=job.getInt(Keys.FINISHED_REDUCES)%> <%=numFailedReduces%> <%=numKilledReduces%> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceStarted, 0) %> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, reduceFinished, reduceStarted) %>
Cleanup <%=totalCleanups%> <%=numFinishedCleanups%> <%=numFailedCleanups%> <%=numKilledCleanups%> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupStarted, 0) %> <%=StringUtils.getFormattedTimeWithDiff(dateFormat, cleanupFinished, cleanupStarted) %>

<% DefaultJobHistoryParser.FailedOnNodesFilter filter = new DefaultJobHistoryParser.FailedOnNodesFilter(); JobHistory.parseHistoryFromFS(logFile, filter, fs); Map> badNodes = filter.getValues(); if (badNodes.size() > 0) { %>

Failed tasks attempts by nodes

<% for (Map.Entry> entry : badNodes.entrySet()) { String node = entry.getKey(); Set failedTasks = entry.getValue(); %> <% } } %>
HostnameFailed Tasks
<%=node %> <% for (String t : failedTasks) { %> <%=t %>,  <% } %>

<% DefaultJobHistoryParser.KilledOnNodesFilter killedFilter = new DefaultJobHistoryParser.KilledOnNodesFilter(); JobHistory.parseHistoryFromFS(logFile, filter, fs); badNodes = killedFilter.getValues(); if (badNodes.size() > 0) { %>

Killed tasks attempts by nodes

<% for (Map.Entry> entry : badNodes.entrySet()) { String node = entry.getKey(); Set killedTasks = entry.getValue(); %> <% } } %>
HostnameKilled Tasks
<%=node %> <% for (String t : killedTasks) { %> <%=t %>,  <% } %>