From ed67a44a1952f0ed714de1414bbca9bc385c60ad Mon Sep 17 00:00:00 2001 From: chenjuanni Date: Wed, 9 Oct 2019 16:21:44 +0800 Subject: [PATCH 1/2] YARN-9880. In YARN ui2 attempts tab, The running Application Attempt's ElapsedTime is incorrect. Contributed by Jenny. --- .../hadoop/yarn/server/webapp/dao/AppAttemptInfo.java | 7 +++++++ .../server/resourcemanager/webapp/dao/AppAttemptInfo.java | 8 ++++++++ .../src/main/webapp/app/models/yarn-app-attempt.js | 7 ++----- .../src/main/webapp/app/serializers/yarn-app-attempt.js | 1 + 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppAttemptInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppAttemptInfo.java index cd30bf0358d09..dca1e6a3b8ac3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppAttemptInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppAttemptInfo.java @@ -27,6 +27,7 @@ import org.apache.hadoop.yarn.api.records.ApplicationAttemptReport; import org.apache.hadoop.yarn.api.records.YarnApplicationAttemptState; +import org.apache.hadoop.yarn.util.Times; @Public @Evolving @@ -44,6 +45,7 @@ public class AppAttemptInfo { protected String amContainerId; protected long startedTime; protected long finishedTime; + protected long elapsedTime; public AppAttemptInfo() { // JAXB needs this @@ -62,6 +64,7 @@ public AppAttemptInfo(ApplicationAttemptReport appAttempt) { } startedTime = appAttempt.getStartTime(); finishedTime = appAttempt.getFinishTime(); + elapsedTime = Times.elapsed(startedTime, finishedTime); } public String getAppAttemptId() { @@ -104,4 +107,8 @@ public long getFinishedTime() { return finishedTime; } + public long getElapsedTime() { + return elapsedTime; + } + } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppAttemptInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppAttemptInfo.java index b41dc6b07a886..dcb08fa26aa3c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppAttemptInfo.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/AppAttemptInfo.java @@ -28,6 +28,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttempt; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.AbstractYarnScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplicationAttempt; +import org.apache.hadoop.yarn.util.Times; import org.apache.hadoop.yarn.webapp.util.WebAppUtils; @XmlRootElement(name = "appAttempt") @@ -37,6 +38,7 @@ public class AppAttemptInfo { protected int id; protected long startTime; protected long finishedTime; + protected long elapsedTime; protected String containerId; protected String nodeHttpAddress; protected String nodeId; @@ -62,6 +64,8 @@ public AppAttemptInfo(ResourceManager rm, RMAppAttempt attempt, String user, this.id = attempt.getAppAttemptId().getAttemptId(); this.startTime = attempt.getStartTime(); this.finishedTime = attempt.getFinishTime(); + this.elapsedTime = + Times.elapsed(attempt.getStartTime(), attempt.getFinishTime()); Container masterContainer = attempt.getMasterContainer(); if (masterContainer != null) { this.containerId = masterContainer.getId().toString(); @@ -104,6 +108,10 @@ public long getFinishedTime() { return this.finishedTime; } + public long getElapsedTime() { + return this.elapsedTime; + } + public String getNodeHttpAddress() { return this.nodeHttpAddress; } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js index b89db46268ae3..863ec7a92cebc 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-attempt.js @@ -24,6 +24,7 @@ export default DS.Model.extend({ startTime: DS.attr('string'), startedTime: DS.attr('string'), finishedTime: DS.attr('string'), + elapsedTimeMs: DS.attr('string'), containerId: DS.attr('string'), amContainerId: DS.attr('string'), nodeHttpAddress: DS.attr('string'), @@ -117,11 +118,7 @@ export default DS.Model.extend({ }.property("logsLink"), elapsedTime: function() { - var elapsedMs = this.get("finishedTs") - this.get("startTs"); - if (elapsedMs <= 0) { - elapsedMs = Date.now() - this.get("startTs"); - } - return Converter.msToElapsedTimeUnit(elapsedMs); + return Converter.msToElapsedTimeUnit(this.get("elapsedTimeMs")); }.property(), tooltipLabel: function() { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-attempt.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-attempt.js index 8a77c67a6be93..602c32ef5992e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-attempt.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-attempt.js @@ -33,6 +33,7 @@ export default DS.JSONAPISerializer.extend({ startTime: Converter.timeStampToDate(payload.startTime), startedTime: Converter.timeStampToDate(payload.startedTime), finishedTime: Converter.timeStampToDate(payload.finishedTime), + elapsedTimeMs: payload.elapsedTime, containerId: payload.containerId, amContainerId: payload.amContainerId, nodeHttpAddress: payload.nodeHttpAddress, From 02c068462037f92a0ad88b5154a1512fe4f2f75c Mon Sep 17 00:00:00 2001 From: chenjuanni Date: Fri, 11 Oct 2019 20:09:04 +0800 Subject: [PATCH 2/2] YARN-9881. Change Cluster_Scheduler_API's Item memorys datatype from int to long. Contributed by Jenny. --- .../hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md index 8f0b46430ca05..6314b01e051d4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-site/src/site/markdown/ResourceManagerRest.md @@ -359,7 +359,7 @@ The capacity scheduler supports hierarchical queues. This one request will print | Item | Data Type | Description | |:---- |:---- |:---- | -| memory | int | The amount of memory used (in MB) | +| memory | long | The amount of memory used (in MB) | | vCores | int | The number of virtual cores | ### Elements of the health object in schedulerInfo: @@ -1162,7 +1162,7 @@ Response Body: | Item | Data Type | Description | |:---- |:---- |:---- | -| memory | int | The amount of memory used (in MB) | +| memory | long | The amount of memory used (in MB) | | vCores | int | The number of virtual cores | #### Response Examples