diff --git hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/AMAttemptInfo.java hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/AMAttemptInfo.java index 8cd0a6f..065f8c7 100644 --- hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/AMAttemptInfo.java +++ hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-hs/src/main/java/org/apache/hadoop/mapreduce/v2/hs/webapp/dao/AMAttemptInfo.java @@ -68,8 +68,8 @@ public AMAttemptInfo(AMInfo amInfo, String jobId, String user, String host, if (containerId != null) { this.containerId = containerId.toString(); this.logsLink = join(host, pathPrefix, - ujoin("logs", this.nodeId, this.containerId, jobId, user)); - this.shortLogsLink = ujoin("logs", this.nodeId, this.containerId, + ujoin("logs", this.nodeHttpAddress, this.containerId, jobId, user)); + this.shortLogsLink = ujoin("logs", this.nodeHttpAddress, this.containerId, jobId, user); } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java index 69fc347..6734d22 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/log/AggregatedLogsBlock.java @@ -80,11 +80,17 @@ protected void render(Block html) { logEntity = containerId.toString(); } + String nmApplicationLogUrl = getApplicationLogURL(applicationId); if (!conf.getBoolean(YarnConfiguration.LOG_AGGREGATION_ENABLED, YarnConfiguration.DEFAULT_LOG_AGGREGATION_ENABLED)) { html.h1() ._("Aggregation is not enabled. Try the nodemanager at " + nodeId) ._(); + if(nmApplicationLogUrl != null) { + html.h1() + ._("Or see application log at " + nmApplicationLogUrl) + ._(); + } return; } @@ -107,6 +113,11 @@ protected void render(Block html) { ._("Logs not available for " + logEntity + ". Aggregation may not be complete, " + "Check back later or try the nodemanager at " + nodeId)._(); + if(nmApplicationLogUrl != null) { + html.h1() + ._("Or see application log at " + nmApplicationLogUrl) + ._(); + } return; } catch (Exception ex) { html.h1() @@ -353,4 +364,20 @@ private LogLimits verifyAndGetLogLimits(Block html) { limits.end = end; return limits; } + + private String getApplicationLogURL(ApplicationId applicationId) { + String appId = applicationId.toString(); + if (appId == null || appId.isEmpty()) { + return null; + } + String nodeId = $(NM_NODENAME); + if(nodeId == null || nodeId.isEmpty()) { + return null; + } + StringBuilder sb = new StringBuilder(); + String scheme = YarnConfiguration.useHttps(this.conf) ? + "https://": "http://"; + sb.append(scheme).append(nodeId).append("/node/application/").append(appId); + return sb.toString(); + } } \ No newline at end of file