protected override void Render(HtmlBlock.Block html) { string rmweb = $(AMParams.RmWeb); Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> nav = html.Div("#nav").H3 ("Cluster").Ul().Li().A(Url(rmweb, "cluster", "cluster"), "About").().Li().A(Url (rmweb, "cluster", "apps"), "Applications").().Li().A(Url(rmweb, "cluster", "scheduler" ), "Scheduler").().().H3("Application").Ul().Li().A(Url("app/info"), "About").() .Li().A(Url("app"), "Jobs").().(); if (app.GetJob() != null) { string jobid = MRApps.ToString(app.GetJob().GetID()); IList <AMInfo> amInfos = app.GetJob().GetAMInfos(); AMInfo thisAmInfo = amInfos[amInfos.Count - 1]; string nodeHttpAddress = thisAmInfo.GetNodeManagerHost() + ":" + thisAmInfo.GetNodeManagerHttpPort (); nav.H3("Job").Ul().Li().A(Url("job", jobid), "Overview").().Li().A(Url("jobcounters" , jobid), "Counters").().Li().A(Url("conf", jobid), "Configuration").().Li().A(Url ("tasks", jobid, "m"), "Map tasks").().Li().A(Url("tasks", jobid, "r"), "Reduce tasks" ).().Li().A(".logslink", Url(MRWebAppUtil.GetYARNWebappScheme(), nodeHttpAddress , "node", "containerlogs", thisAmInfo.GetContainerId().ToString(), app.GetJob(). GetUserName()), "AM Logs").().(); if (app.GetTask() != null) { string taskid = MRApps.ToString(app.GetTask().GetID()); nav.H3("Task").Ul().Li().A(Url("task", taskid), "Task Overview").().Li().A(Url("taskcounters" , taskid), "Counters").().(); } } nav.H3("Tools").Ul().Li().A("/conf", "Configuration").().Li().A("/logs", "Local logs" ).().Li().A("/stacks", "Server stacks").().Li().A("/jmx?qry=Hadoop:*", "Server metrics" ).().().(); }
/* * (non-Javadoc) * @see org.apache.hadoop.yarn.webapp.view.HtmlBlock#render(org.apache.hadoop.yarn.webapp.view.HtmlBlock.Block) */ protected override void Render(HtmlBlock.Block html) { Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> nav = html.Div("#nav").H3 ("Application").Ul().Li().A(Url("about"), "About").().Li().A(Url("app"), "Jobs") .().(); if (app.GetJob() != null) { string jobid = MRApps.ToString(app.GetJob().GetID()); nav.H3("Job").Ul().Li().A(Url("job", jobid), "Overview").().Li().A(Url("jobcounters" , jobid), "Counters").().Li().A(Url("conf", jobid), "Configuration").().Li().A(Url ("tasks", jobid, "m"), "Map tasks").().Li().A(Url("tasks", jobid, "r"), "Reduce tasks" ).().(); if (app.GetTask() != null) { string taskid = MRApps.ToString(app.GetTask().GetID()); nav.H3("Task").Ul().Li().A(Url("task", taskid), "Task Overview").().Li().A(Url("taskcounters" , taskid), "Counters").().(); } } nav.H3("Tools").Ul().Li().A("/conf", "Configuration").().Li().A("/logs", "Local logs" ).().Li().A("/stacks", "Server stacks").().Li().A("/jmx?qry=Hadoop:*", "Server metrics" ).().().(); }
private void CreateContainerLocalityTable(HtmlBlock.Block html) { RMAppAttemptMetrics attemptMetrics = null; RMAppAttempt attempt = GetRMAppAttempt(); if (attempt != null) { attemptMetrics = attempt.GetRMAppAttemptMetrics(); } if (attemptMetrics == null) { return; } Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> div = html.Div(JQueryUI.InfoWrap ); Hamlet.TABLE <Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > table = div .H3("Total Allocated Containers: " + attemptMetrics.GetTotalAllocatedContainers( )).H3("Each table cell" + " represents the number of NodeLocal/RackLocal/OffSwitch containers" + " satisfied by NodeLocal/RackLocal/OffSwitch resource requests.").Table("#containerLocality" ); table.Tr().Th(JQueryUI.Th, string.Empty).Th(JQueryUI.Th, "Node Local Request").Th (JQueryUI.Th, "Rack Local Request").Th(JQueryUI.Th, "Off Switch Request").(); string[] containersType = new string[] { "Num Node Local Containers (satisfied by)" , "Num Rack Local Containers (satisfied by)", "Num Off Switch Containers (satisfied by)" }; bool odd = false; for (int i = 0; i < attemptMetrics.GetLocalityStatistics().Length; i++) { table.Tr((odd = !odd) ? JQueryUI.Odd : JQueryUI.Even).Td(containersType[i]).Td(attemptMetrics .GetLocalityStatistics()[i][0].ToString()).Td(i == 0 ? string.Empty : attemptMetrics .GetLocalityStatistics()[i][1].ToString()).Td(i <= 1 ? string.Empty : attemptMetrics .GetLocalityStatistics()[i][2].ToString()).(); } table.(); div.(); }
private void CreateResourceRequestsTable(HtmlBlock.Block html) { AppInfo app = new AppInfo(rm, rm.GetRMContext().GetRMApps()[this.appAttemptId.GetApplicationId ()], true, WebAppUtils.GetHttpSchemePrefix(conf)); IList <ResourceRequest> resourceRequests = app.GetResourceRequests(); if (resourceRequests == null || resourceRequests.IsEmpty()) { return; } Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> div = html.Div(JQueryUI.InfoWrap ); Hamlet.TABLE <Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> > table = div .H3("Total Outstanding Resource Requests: " + GetTotalResource(resourceRequests) ).Table("#ResourceRequests"); table.Tr().Th(JQueryUI.Th, "Priority").Th(JQueryUI.Th, "ResourceName").Th(JQueryUI .Th, "Capability").Th(JQueryUI.Th, "NumContainers").Th(JQueryUI.Th, "RelaxLocality" ).Th(JQueryUI.Th, "NodeLabelExpression").(); bool odd = false; foreach (ResourceRequest request in resourceRequests) { if (request.GetNumContainers() == 0) { continue; } table.Tr((odd = !odd) ? JQueryUI.Odd : JQueryUI.Even).Td(request.GetPriority().ToString ()).Td(request.GetResourceName()).Td(request.GetCapability().ToString()).Td(request .GetNumContainers().ToString()).Td(request.GetRelaxLocality().ToString()).Td(request .GetNodeLabelExpression() == null ? "N/A" : request.GetNodeLabelExpression()).(); } table.(); div.(); }
protected override void Render(HtmlBlock.Block html) { //Yes this is a hack, but there is no other way to insert //CSS in the correct spot html.Style(".metrics {margin-bottom:5px}"); ClusterMetricsInfo clusterMetrics = new ClusterMetricsInfo(this.rm); Hamlet.DIV <Org.Apache.Hadoop.Yarn.Webapp.Hamlet.Hamlet> div = html.Div().$class("metrics" ); div.H3("Cluster Metrics").Table("#metricsoverview").Thead().$class("ui-widget-header" ).Tr().Th().$class("ui-state-default").("Apps Submitted").().Th().$class("ui-state-default" ).("Apps Pending").().Th().$class("ui-state-default").("Apps Running").().Th().$class ("ui-state-default").("Apps Completed").().Th().$class("ui-state-default").("Containers Running" ).().Th().$class("ui-state-default").("Memory Used").().Th().$class("ui-state-default" ).("Memory Total").().Th().$class("ui-state-default").("Memory Reserved").().Th( ).$class("ui-state-default").("VCores Used").().Th().$class("ui-state-default"). ("VCores Total").().Th().$class("ui-state-default").("VCores Reserved").().Th(). $class("ui-state-default").("Active Nodes").().Th().$class("ui-state-default").( "Decommissioned Nodes").().Th().$class("ui-state-default").("Lost Nodes").().Th( ).$class("ui-state-default").("Unhealthy Nodes").().Th().$class("ui-state-default" ).("Rebooted Nodes").().().().Tbody().$class("ui-widget-content").Tr().Td(clusterMetrics .GetAppsSubmitted().ToString()).Td(clusterMetrics.GetAppsPending().ToString()).Td (clusterMetrics.GetAppsRunning().ToString()).Td((clusterMetrics.GetAppsCompleted () + clusterMetrics.GetAppsFailed() + clusterMetrics.GetAppsKilled()).ToString() ).Td(clusterMetrics.GetContainersAllocated().ToString()).Td(StringUtils.ByteDesc (clusterMetrics.GetAllocatedMB() * BytesInMb)).Td(StringUtils.ByteDesc(clusterMetrics .GetTotalMB() * BytesInMb)).Td(StringUtils.ByteDesc(clusterMetrics.GetReservedMB () * BytesInMb)).Td(clusterMetrics.GetAllocatedVirtualCores().ToString()).Td(clusterMetrics .GetTotalVirtualCores().ToString()).Td(clusterMetrics.GetReservedVirtualCores(). ToString()).Td().A(Url("nodes"), clusterMetrics.GetActiveNodes().ToString()).(). Td().A(Url("nodes/decommissioned"), clusterMetrics.GetDecommissionedNodes().ToString ()).().Td().A(Url("nodes/lost"), clusterMetrics.GetLostNodes().ToString()).().Td ().A(Url("nodes/unhealthy"), clusterMetrics.GetUnhealthyNodes().ToString()).().Td ().A(Url("nodes/rebooted"), clusterMetrics.GetRebootedNodes().ToString()).().(). ().(); string user = Request().GetRemoteUser(); if (user != null) { UserMetricsInfo userMetrics = new UserMetricsInfo(this.rm, user); if (userMetrics.MetricsAvailable()) { div.H3("User Metrics for " + user).Table("#usermetricsoverview").Thead().$class("ui-widget-header" ).Tr().Th().$class("ui-state-default").("Apps Submitted").().Th().$class("ui-state-default" ).("Apps Pending").().Th().$class("ui-state-default").("Apps Running").().Th().$class ("ui-state-default").("Apps Completed").().Th().$class("ui-state-default").("Containers Running" ).().Th().$class("ui-state-default").("Containers Pending").().Th().$class("ui-state-default" ).("Containers Reserved").().Th().$class("ui-state-default").("Memory Used").(). Th().$class("ui-state-default").("Memory Pending").().Th().$class("ui-state-default" ).("Memory Reserved").().Th().$class("ui-state-default").("VCores Used").().Th() .$class("ui-state-default").("VCores Pending").().Th().$class("ui-state-default" ).("VCores Reserved").().().().Tbody().$class("ui-widget-content").Tr().Td(userMetrics .GetAppsSubmitted().ToString()).Td(userMetrics.GetAppsPending().ToString()).Td(userMetrics .GetAppsRunning().ToString()).Td((userMetrics.GetAppsCompleted() + userMetrics.GetAppsFailed () + userMetrics.GetAppsKilled()).ToString()).Td(userMetrics.GetRunningContainers ().ToString()).Td(userMetrics.GetPendingContainers().ToString()).Td(userMetrics. GetReservedContainers().ToString()).Td(StringUtils.ByteDesc(userMetrics.GetAllocatedMB () * BytesInMb)).Td(StringUtils.ByteDesc(userMetrics.GetPendingMB() * BytesInMb) ).Td(StringUtils.ByteDesc(userMetrics.GetReservedMB() * BytesInMb)).Td(userMetrics .GetAllocatedVirtualCores().ToString()).Td(userMetrics.GetPendingVirtualCores(). ToString()).Td(userMetrics.GetReservedVirtualCores().ToString()).().().(); } } SchedulerInfo schedulerInfo = new SchedulerInfo(this.rm); div.H3("Scheduler Metrics").Table("#schedulermetricsoverview").Thead().$class("ui-widget-header" ).Tr().Th().$class("ui-state-default").("Scheduler Type").().Th().$class("ui-state-default" ).("Scheduling Resource Type").().Th().$class("ui-state-default").("Minimum Allocation" ).().Th().$class("ui-state-default").("Maximum Allocation").().().().Tbody().$class ("ui-widget-content").Tr().Td(schedulerInfo.GetSchedulerType().ToString()).Td(schedulerInfo .GetSchedulerResourceTypes().ToString()).Td(schedulerInfo.GetMinAllocation().ToString ()).Td(schedulerInfo.GetMaxAllocation().ToString()).().().(); div.(); }