You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ji...@apache.org on 2015/04/18 00:57:43 UTC
hadoop git commit: YARN-3451. Display attempt start time and elapsed
time on the web UI. Contributed by Rohith Sharmaks (cherry picked from commit
6779467ab6fcc6a02d0e8c80b138cc9df1aa831e)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 57eb07d34 -> 9827da95b
YARN-3451. Display attempt start time and elapsed time on the web UI. Contributed by Rohith Sharmaks
(cherry picked from commit 6779467ab6fcc6a02d0e8c80b138cc9df1aa831e)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/9827da95
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/9827da95
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/9827da95
Branch: refs/heads/branch-2
Commit: 9827da95bca8e9eb86afce7d0c8f8aeb315238db
Parents: 57eb07d
Author: Jian He <ji...@apache.org>
Authored: Fri Apr 17 15:55:34 2015 -0700
Committer: Jian He <ji...@apache.org>
Committed: Fri Apr 17 15:57:36 2015 -0700
----------------------------------------------------------------------
hadoop-yarn-project/CHANGES.txt | 3 ++
.../api/records/ApplicationAttemptReport.java | 34 +++++++++++++++++++-
.../src/main/proto/yarn_protos.proto | 2 ++
.../hadoop/yarn/client/ProtocolHATestBase.java | 3 +-
.../yarn/client/api/impl/TestYarnClient.java | 3 +-
.../hadoop/yarn/client/cli/TestYarnCLI.java | 8 ++---
.../impl/pb/ApplicationAttemptReportPBImpl.java | 24 ++++++++++++++
.../yarn/server/webapp/dao/AppAttemptInfo.java | 12 +++++++
.../rmapp/attempt/RMAppAttemptImpl.java | 3 +-
.../webapp/RMAppAttemptBlock.java | 5 +++
10 files changed, 89 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index 0089b55..3639300 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -94,6 +94,9 @@ Release 2.8.0 - UNRELEASED
YARN-2696. Queue sorting in CapacityScheduler should consider node label.
(Wangda Tan via jianhe)
+ YARN-3451. Display attempt start time and elapsed time on the web UI.
+ (Rohith Sharmaks via jianhe)
+
OPTIMIZATIONS
YARN-3339. TestDockerContainerExecutor should pull a single image and not
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptReport.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptReport.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptReport.java
index b7f9c1b..5797058 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptReport.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ApplicationAttemptReport.java
@@ -47,7 +47,8 @@ public abstract class ApplicationAttemptReport {
public static ApplicationAttemptReport newInstance(
ApplicationAttemptId applicationAttemptId, String host, int rpcPort,
String url, String oUrl, String diagnostics,
- YarnApplicationAttemptState state, ContainerId amContainerId) {
+ YarnApplicationAttemptState state, ContainerId amContainerId,
+ long startTime, long finishTime) {
ApplicationAttemptReport report =
Records.newRecord(ApplicationAttemptReport.class);
report.setApplicationAttemptId(applicationAttemptId);
@@ -58,9 +59,19 @@ public abstract class ApplicationAttemptReport {
report.setDiagnostics(diagnostics);
report.setYarnApplicationAttemptState(state);
report.setAMContainerId(amContainerId);
+ report.setStartTime(startTime);
+ report.setFinishTime(finishTime);
return report;
}
+ public static ApplicationAttemptReport newInstance(
+ ApplicationAttemptId applicationAttemptId, String host, int rpcPort,
+ String url, String oUrl, String diagnostics,
+ YarnApplicationAttemptState state, ContainerId amContainerId) {
+ return newInstance(applicationAttemptId, host, rpcPort, url, oUrl,
+ diagnostics, state, amContainerId, 0L, 0L);
+ }
+
/**
* Get the <em>YarnApplicationAttemptState</em> of the application attempt.
*
@@ -171,4 +182,25 @@ public abstract class ApplicationAttemptReport {
@Private
@Unstable
public abstract void setAMContainerId(ContainerId amContainerId);
+
+ @Public
+ @Unstable
+ public abstract long getStartTime();
+
+ @Private
+ @Unstable
+ public abstract void setStartTime(long startTime);
+
+ /**
+ * Get the <em>finish time</em> of the application.
+ *
+ * @return <em>finish time</em> of the application
+ */
+ @Public
+ @Unstable
+ public abstract long getFinishTime();
+
+ @Private
+ @Unstable
+ public abstract void setFinishTime(long finishTime);
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
index a0491fe..ddd3764 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_protos.proto
@@ -215,6 +215,8 @@ message ApplicationAttemptReportProto {
optional YarnApplicationAttemptStateProto yarn_application_attempt_state = 6;
optional ContainerIdProto am_container_id = 7;
optional string original_tracking_url = 8;
+ optional int64 startTime = 9;
+ optional int64 finishTime = 10;
}
enum NodeStateProto {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java
index 509b470..903dd94 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/ProtocolHATestBase.java
@@ -700,7 +700,8 @@ public abstract class ProtocolHATestBase extends ClientBaseWithFixes {
public ApplicationAttemptReport createFakeApplicationAttemptReport() {
return ApplicationAttemptReport.newInstance(
createFakeApplicationAttemptId(), "localhost", 0, "", "", "",
- YarnApplicationAttemptState.RUNNING, createFakeContainerId());
+ YarnApplicationAttemptState.RUNNING, createFakeContainerId(), 1000l,
+ 1200l);
}
public List<ApplicationAttemptReport>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
index de669f2..10b9bbb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestYarnClient.java
@@ -593,7 +593,8 @@ public class TestYarnClient {
"diagnostics",
YarnApplicationAttemptState.FINISHED,
ContainerId.newContainerId(
- newApplicationReport.getCurrentApplicationAttemptId(), 1));
+ newApplicationReport.getCurrentApplicationAttemptId(), 1), 0,
+ 0);
appAttempts.add(attempt);
ApplicationAttemptReport attempt1 = ApplicationAttemptReport.newInstance(
ApplicationAttemptId.newInstance(applicationId, 2),
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
index 003f086..1013958 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/cli/TestYarnCLI.java
@@ -145,10 +145,10 @@ public class TestYarnCLI {
ApplicationId applicationId = ApplicationId.newInstance(1234, 5);
ApplicationAttemptId attemptId = ApplicationAttemptId.newInstance(
applicationId, 1);
- ApplicationAttemptReport attemptReport = ApplicationAttemptReport
- .newInstance(attemptId, "host", 124, "url", "oUrl", "diagnostics",
- YarnApplicationAttemptState.FINISHED, ContainerId.newContainerId(
- attemptId, 1));
+ ApplicationAttemptReport attemptReport =
+ ApplicationAttemptReport.newInstance(attemptId, "host", 124, "url",
+ "oUrl", "diagnostics", YarnApplicationAttemptState.FINISHED,
+ ContainerId.newContainerId(attemptId, 1), 1000l, 2000l);
when(
client
.getApplicationAttemptReport(any(ApplicationAttemptId.class)))
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptReportPBImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptReportPBImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptReportPBImpl.java
index c3c0221..8a97318 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptReportPBImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/records/impl/pb/ApplicationAttemptReportPBImpl.java
@@ -286,4 +286,28 @@ public class ApplicationAttemptReportPBImpl extends ApplicationAttemptReport {
builder.clearAmContainerId();
this.amContainerId = amContainerId;
}
+
+ @Override
+ public void setStartTime(long startTime) {
+ maybeInitBuilder();
+ builder.setStartTime(startTime);
+ }
+
+ @Override
+ public void setFinishTime(long finishTime) {
+ maybeInitBuilder();
+ builder.setFinishTime(finishTime);
+ }
+
+ @Override
+ public long getStartTime() {
+ ApplicationAttemptReportProtoOrBuilder p = viaProto ? proto : builder;
+ return p.getStartTime();
+ }
+
+ @Override
+ public long getFinishTime() {
+ ApplicationAttemptReportProtoOrBuilder p = viaProto ? proto : builder;
+ return p.getFinishTime();
+ }
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/dao/AppAttemptInfo.java
----------------------------------------------------------------------
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 1ff7028..92ebeb0 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
@@ -37,6 +37,8 @@ public class AppAttemptInfo {
protected String diagnosticsInfo;
protected YarnApplicationAttemptState appAttemptState;
protected String amContainerId;
+ protected long startedTime;
+ protected long finishedTime;
public AppAttemptInfo() {
// JAXB needs this
@@ -53,6 +55,8 @@ public class AppAttemptInfo {
if (appAttempt.getAMContainerId() != null) {
amContainerId = appAttempt.getAMContainerId().toString();
}
+ startedTime = appAttempt.getStartTime();
+ finishedTime = appAttempt.getFinishTime();
}
public String getAppAttemptId() {
@@ -87,4 +91,12 @@ public class AppAttemptInfo {
return amContainerId;
}
+ public long getStartedTime() {
+ return startedTime;
+ }
+
+ public long getFinishedTime() {
+ return finishedTime;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
index 1071831..6d3a1cf 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/attempt/RMAppAttemptImpl.java
@@ -1906,7 +1906,8 @@ public class RMAppAttemptImpl implements RMAppAttempt, Recoverable {
attemptReport = ApplicationAttemptReport.newInstance(this
.getAppAttemptId(), this.getHost(), this.getRpcPort(), this
.getTrackingUrl(), this.getOriginalTrackingUrl(), this.getDiagnostics(),
- YarnApplicationAttemptState .valueOf(this.getState().toString()), amId);
+ YarnApplicationAttemptState.valueOf(this.getState().toString()),
+ amId, this.startTime, this.finishTime);
} finally {
this.readLock.unlock();
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/9827da95/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMAppAttemptBlock.java
----------------------------------------------------------------------
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/RMAppAttemptBlock.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMAppAttemptBlock.java
index 506e31f..6543e92 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMAppAttemptBlock.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMAppAttemptBlock.java
@@ -41,6 +41,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.scheduler.SchedulerApplicat
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
import org.apache.hadoop.yarn.server.webapp.AppAttemptBlock;
import org.apache.hadoop.yarn.server.webapp.dao.AppAttemptInfo;
+import org.apache.hadoop.yarn.util.Times;
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;
@@ -205,6 +206,10 @@ public class RMAppAttemptBlock extends AppAttemptBlock{
"Application Attempt State:",
appAttempt.getAppAttemptState() == null ? UNAVAILABLE : appAttempt
.getAppAttemptState())
+ ._("Started:", Times.format(appAttempt.getStartedTime()))
+ ._("Elapsed:",
+ org.apache.hadoop.util.StringUtils.formatTime(Times.elapsed(
+ appAttempt.getStartedTime(), appAttempt.getFinishedTime())))
._(
"AM Container:",
appAttempt.getAmContainerId() == null || containers == null