<% /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ %> <%@ page contentType="text/html; charset=UTF-8" import="javax.servlet.*" import="javax.servlet.http.*" import="java.io.*" import="java.lang.management.MemoryUsage" import="java.lang.management.MemoryMXBean" import="java.lang.management.ManagementFactory" 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(); MemoryMXBean mem = ManagementFactory.getMemoryMXBean(); ClusterMetrics metrics = tracker.getClusterMetrics(); String trackerName = StringUtils.simpleHostname(tracker.getJobTrackerMachine()); JobQueueInfo[] queues = tracker.getJobQueues(); List runningJobs = tracker.getRunningJobs(); List completedJobs = tracker.getCompletedJobs(); List failedJobs = tracker.getFailedJobs(); %> <%! 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("
QueuesRunning Map TasksRunning Reduce TasksTotal SubmissionsNodesOccupied Map SlotsOccupied Reduce SlotsReserved Map SlotsReserved Reduce SlotsMap Slot CapacityReduce Slot CapacityAvg. Slots/NodeBlacklisted NodesExcluded Nodes
" + tracker.getRootQueues().length + "" + metrics.getRunningMaps() + "" + metrics.getRunningReduces() + "" + metrics.getTotalJobSubmissions() + "" + metrics.getTaskTrackerCount() + "" + metrics.getOccupiedMapSlots() + "" + metrics.getOccupiedReduceSlots() + "" + metrics.getReservedMapSlots() + "" + metrics.getReservedReduceSlots() + "" + + metrics.getMapSlotCapacity() + "" + metrics.getReduceSlotCapacity() + "" + tasksPerNode + "" + metrics.getBlackListedTaskTrackerCount() + "" + "" + metrics.getDecommissionedTaskTrackerCount() + "" + "
\n"); out.print("
"); if (tracker.recoveryManager.shouldRecover()) { 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 <% if (!JSPUtil.processButtons(request, response, tracker)) { return;// user is not authorized } %>

<%= trackerName %> Hadoop Map/Reduce Administration

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

Cluster Summary (Heap Size is <% MemoryUsage heap = mem.getHeapMemoryUsage(); out.print(StringUtils.byteDesc(heap.getUsed()) + "/"); out.print(StringUtils.byteDesc(heap.getCommitted()) + "/"); out.print(StringUtils.byteDesc(heap.getMax()) + ")"); %> <% generateSummaryTable(out, metrics, tracker); %>
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()); %>