<%@ page contentType="text/html; charset=UTF-8" import="javax.servlet.*" import="javax.servlet.http.*" import="java.io.*" import="java.util.*" import="java.text.DecimalFormat" import="org.apache.hadoop.http.HtmlQuoting" import="org.apache.hadoop.mapred.*" import="org.apache.hadoop.mapreduce.*" import="org.apache.hadoop.util.*" %> <%! private static final long serialVersionUID = 1L; %> <% JobTracker tracker = (JobTracker) application.getAttribute("job.tracker"); ClusterStatus status = tracker.getClusterStatus(); ClusterMetrics metrics = tracker.getClusterMetrics(); String trackerName = StringUtils.simpleHostname(tracker.getJobTrackerMachine()); JobQueueInfo[] queues = tracker.getQueues(); Vector runningJobs = tracker.runningJobs(); Vector completedJobs = tracker.completedJobs(); Vector failedJobs = tracker.failedJobs(); %> <%! private static DecimalFormat percentFormat = new DecimalFormat("##0.00"); public void generateSummaryTable(JspWriter out, ClusterMetrics metrics, JobTracker tracker) throws IOException { String tasksPerNode = metrics.getTaskTrackerCount() > 0 ? percentFormat.format(((double)(metrics.getMapSlotCapacity() + metrics.getReduceSlotCapacity())) / metrics.getTaskTrackerCount()): "-"; out.print("\n"+ "" + "" + "" + "" + "" + "" + "" + "" + "" + "\n"); out.print("
Running Map TasksRunning Reduce TasksTotal SubmissionsNodesOccupied Map SlotsOccupied Reduce SlotsReserved Map SlotsReserved Reduce SlotsMap Task CapacityReduce Task CapacityAvg. Tasks/NodeBlacklisted NodesGraylisted NodesExcluded Nodes
" + metrics.getRunningMaps() + "" + metrics.getRunningReduces() + "" + metrics.getTotalJobSubmissions() + "" + metrics.getTaskTrackerCount() + "" + metrics.getOccupiedMapSlots() + "" + metrics.getOccupiedReduceSlots() + "" + metrics.getReservedMapSlots() + "" + metrics.getReservedReduceSlots() + "" + metrics.getMapSlotCapacity() + "" + metrics.getReduceSlotCapacity() + "" + tasksPerNode + "" + metrics.getBlackListedTaskTrackerCount() + "" + "" + metrics.getGrayListedTaskTrackerCount() + "" + "" + metrics.getDecommissionedTaskTrackerCount() + "" + "
\n"); out.print("
"); if (tracker.hasRestarted()) { out.print(""); if (tracker.hasRecovered()) { out.print("The JobTracker got restarted and recovered back in " ); out.print(StringUtils.formatTime(tracker.getRecoveryDuration())); } else { out.print("The JobTracker got restarted and is still recovering"); } out.print(""); } }%> <%= trackerName %> Hadoop Map/Reduce Administration <% JSPUtil.processButtons(request, response, tracker); %>

<%= trackerName %> Hadoop Map/Reduce Administration

State: <%= status.getJobTrackerState() %>
Started: <%= new Date(tracker.getStartTime())%>
Version: <%= VersionInfo.getVersion()%>, r<%= VersionInfo.getRevision()%>
Compiled: <%= VersionInfo.getDate()%> by <%= VersionInfo.getUser()%>
Identifier: <%= tracker.getTrackerIdentifier()%>

Cluster Summary (Heap Size is <%= StringUtils.byteDesc(Runtime.getRuntime().totalMemory()) %>/<%= StringUtils.byteDesc(Runtime.getRuntime().maxMemory()) %>)

<% generateSummaryTable(out, metrics, tracker); %>

Scheduling Information

<% for(JobQueueInfo queue: queues) { String queueName = queue.getQueueName(); String state = queue.getQueueState(); String schedulingInformation = queue.getSchedulingInfo(); if(schedulingInformation == null || schedulingInformation.trim().equals("")) { schedulingInformation = "NA"; } %> <% } %>
Queue Name State Scheduling Information
<%=queueName%> <%=state%> <%=HtmlQuoting.quoteHtmlChars(schedulingInformation).replaceAll("\n","
") %>

Filter (Jobid, Priority, User, Name)
Example: 'user:smith 3200' will filter by 'smith' only in the user field and '3200' in all fields

Running Jobs

<%=JSPUtil.generateJobTable("Running", runningJobs, 30, 0, tracker.conf)%>
<% if (completedJobs.size() > 0) { out.print("

Completed Jobs

"); out.print(JSPUtil.generateJobTable("Completed", completedJobs, 0, runningJobs.size(), tracker.conf)); out.print("
"); } %> <% if (failedJobs.size() > 0) { out.print("

Failed Jobs

"); out.print(JSPUtil.generateJobTable("Failed", failedJobs, 0, (runningJobs.size()+completedJobs.size()), tracker.conf)); out.print("
"); } %>

Retired Jobs

<%=JSPUtil.generateRetiredJobTable(tracker, (runningJobs.size()+completedJobs.size()+failedJobs.size()))%>

Local Logs

Log directory, Job Tracker History <% out.println(ServletUtil.htmlFooter()); %>