|
@@ -20,7 +20,6 @@ package org.apache.hadoop.yarn.server.resourcemanager.webapp;
|
|
|
|
|
|
import static org.apache.hadoop.yarn.webapp.view.JQueryUI._INFO_WRAP;
|
|
|
|
|
|
-import java.security.PrivilegedExceptionAction;
|
|
|
import java.util.Collection;
|
|
|
import java.util.Set;
|
|
|
|
|
@@ -29,36 +28,35 @@ import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
import org.apache.hadoop.conf.Configuration;
|
|
|
import org.apache.hadoop.security.UserGroupInformation;
|
|
|
-import org.apache.hadoop.yarn.api.protocolrecords.GetContainerReportRequest;
|
|
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport;
|
|
|
-import org.apache.hadoop.yarn.api.records.ContainerId;
|
|
|
-import org.apache.hadoop.yarn.api.records.ContainerReport;
|
|
|
import org.apache.hadoop.yarn.api.records.Resource;
|
|
|
-import org.apache.hadoop.yarn.exceptions.ContainerNotFoundException;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppMetrics;
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt;
|
|
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptMetrics;
|
|
|
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptInfo;
|
|
|
import org.apache.hadoop.yarn.server.webapp.AppBlock;
|
|
|
-import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo;
|
|
|
-import org.apache.hadoop.yarn.server.webapp.dao.ContainerInfo;
|
|
|
-import org.apache.hadoop.yarn.util.ConverterUtils;
|
|
|
import org.apache.hadoop.yarn.util.resource.Resources;
|
|
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
|
|
|
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet.DIV;
|
|
|
+import org.apache.hadoop.yarn.webapp.util.WebAppUtils;
|
|
|
import org.apache.hadoop.yarn.webapp.view.InfoBlock;
|
|
|
|
|
|
import com.google.inject.Inject;
|
|
|
+//import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo;
|
|
|
|
|
|
public class RMAppBlock extends AppBlock{
|
|
|
|
|
|
private static final Log LOG = LogFactory.getLog(RMAppBlock.class);
|
|
|
private final ResourceManager rm;
|
|
|
+ private final Configuration conf;
|
|
|
|
|
|
|
|
|
@Inject
|
|
|
RMAppBlock(ViewContext ctx, Configuration conf, ResourceManager rm) {
|
|
|
super(rm.getClientRMService(), ctx, conf);
|
|
|
+ this.conf = conf;
|
|
|
this.rm = rm;
|
|
|
}
|
|
|
|
|
@@ -120,67 +118,41 @@ public class RMAppBlock extends AppBlock{
|
|
|
.th(".started", "Started").th(".node", "Node").th(".logs", "Logs")
|
|
|
.th(".blacklistednodes", "Blacklisted Nodes")._()._().tbody();
|
|
|
|
|
|
+ RMApp rmApp = this.rm.getRMContext().getRMApps().get(this.appID);
|
|
|
+ if (rmApp == null) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
StringBuilder attemptsTableData = new StringBuilder("[\n");
|
|
|
for (final ApplicationAttemptReport appAttemptReport : attempts) {
|
|
|
- AppAttemptInfo appAttempt = new AppAttemptInfo(appAttemptReport);
|
|
|
- ContainerReport containerReport = null;
|
|
|
- try {
|
|
|
- // AM container is always the first container of the attempt
|
|
|
- final GetContainerReportRequest request =
|
|
|
- GetContainerReportRequest.newInstance(ContainerId.newContainerId(
|
|
|
- appAttemptReport.getApplicationAttemptId(), 1));
|
|
|
- if (callerUGI == null) {
|
|
|
- containerReport =
|
|
|
- appBaseProt.getContainerReport(request).getContainerReport();
|
|
|
- } else {
|
|
|
- containerReport = callerUGI.doAs(
|
|
|
- new PrivilegedExceptionAction<ContainerReport>() {
|
|
|
- @Override
|
|
|
- public ContainerReport run() throws Exception {
|
|
|
- ContainerReport report = null;
|
|
|
- try {
|
|
|
- report = appBaseProt.getContainerReport(request)
|
|
|
- .getContainerReport();
|
|
|
- } catch (ContainerNotFoundException ex) {
|
|
|
- LOG.warn(ex.getMessage());
|
|
|
- }
|
|
|
- return report;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- String message =
|
|
|
- "Failed to read the AM container of the application attempt "
|
|
|
- + appAttemptReport.getApplicationAttemptId() + ".";
|
|
|
- LOG.error(message, e);
|
|
|
- html.p()._(message)._();
|
|
|
- return;
|
|
|
- }
|
|
|
- long startTime = 0L;
|
|
|
- String logsLink = null;
|
|
|
- String nodeLink = null;
|
|
|
- if (containerReport != null) {
|
|
|
- ContainerInfo container = new ContainerInfo(containerReport);
|
|
|
- startTime = container.getStartedTime();
|
|
|
- logsLink = containerReport.getLogUrl();
|
|
|
- nodeLink = containerReport.getNodeHttpAddress();
|
|
|
+ RMAppAttempt rmAppAttempt =
|
|
|
+ rmApp.getRMAppAttempt(appAttemptReport.getApplicationAttemptId());
|
|
|
+ if (rmAppAttempt == null) {
|
|
|
+ continue;
|
|
|
}
|
|
|
+ AppAttemptInfo attemptInfo =
|
|
|
+ new AppAttemptInfo(this.rm, rmAppAttempt, rmApp.getUser());
|
|
|
String blacklistedNodesCount = "N/A";
|
|
|
- Set<String> nodes = RMAppAttemptBlock.getBlacklistedNodes(rm,
|
|
|
- ConverterUtils.toApplicationAttemptId(appAttempt.getAppAttemptId()));
|
|
|
+ Set<String> nodes =
|
|
|
+ RMAppAttemptBlock.getBlacklistedNodes(rm,
|
|
|
+ rmAppAttempt.getAppAttemptId());
|
|
|
if(nodes != null) {
|
|
|
blacklistedNodesCount = String.valueOf(nodes.size());
|
|
|
}
|
|
|
|
|
|
// AppAttemptID numerical value parsed by parseHadoopID in
|
|
|
// yarn.dt.plugins.js
|
|
|
+ String nodeLink = attemptInfo.getNodeHttpAddress();
|
|
|
+ if (nodeLink != null) {
|
|
|
+ nodeLink = WebAppUtils.getHttpSchemePrefix(conf) + nodeLink;
|
|
|
+ }
|
|
|
+ String logsLink = attemptInfo.getLogsLink();
|
|
|
attemptsTableData
|
|
|
.append("[\"<a href='")
|
|
|
- .append(url("appattempt", appAttempt.getAppAttemptId()))
|
|
|
+ .append(url("appattempt", rmAppAttempt.getAppAttemptId().toString()))
|
|
|
.append("'>")
|
|
|
- .append(appAttempt.getAppAttemptId())
|
|
|
+ .append(String.valueOf(rmAppAttempt.getAppAttemptId()))
|
|
|
.append("</a>\",\"")
|
|
|
- .append(startTime)
|
|
|
+ .append(attemptInfo.getStartTime())
|
|
|
.append("\",\"<a ")
|
|
|
.append(nodeLink == null ? "#" : "href='" + nodeLink)
|
|
|
.append("'>")
|