diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java
index 05dbf1e51a5..bc12eba73bf 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNode.java
@@ -180,6 +180,14 @@ public synchronized Resource getUnallocatedResource() {
return this.unallocatedResource;
}
+ public synchronized Resource getReservedResource() {
+ if (getReservedContainer() != null) {
+ return getReservedContainer().getReservedResource();
+ } else {
+ return Resource.newInstance(0, 0);
+ }
+ }
+
/**
* Get allocated resources on the node.
* @return Allocated resources on the node
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNodeReport.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNodeReport.java
index fa71a257343..a83571a9c66 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNodeReport.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/SchedulerNodeReport.java
@@ -30,12 +30,14 @@
public class SchedulerNodeReport {
private final Resource used;
private final Resource avail;
+ private final Resource reserved;
private final int num;
public SchedulerNodeReport(SchedulerNode node) {
this.used = node.getAllocatedResource();
this.avail = node.getUnallocatedResource();
this.num = node.getNumContainers();
+ this.reserved = node.getReservedResource();
}
/**
@@ -52,6 +54,14 @@ public Resource getAvailableResource() {
return avail;
}
+ /**
+ * @return the amount of resources currently reserved on the node
+ */
+ public Resource getReservedResource() {
+ return reserved;
+ }
+
+
/**
* @return the number of containers currently running on this node.
*/
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/NodesPage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
index d0e384da34f..e66a774f421 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/NodesPage.java
@@ -82,9 +82,13 @@ protected void render(Block html) {
if (!this.opportunisticContainersEnabled) {
trbody.th(".containers", "Containers")
.th(".mem", "Mem Used")
+ .th(".mem", "Mem Reserved")
.th(".mem", "Mem Avail")
+ .th(".mem", "Mem Actual-Avail")
.th(".vcores", "VCores Used")
- .th(".vcores", "VCores Avail");
+ .th(".vcores", "VCores Reserved")
+ .th(".vcores", "VCores Avail")
+ .th(".vcores", "VCores Actual-Avail");
} else {
trbody.th(".containers", "Running Containers (G)")
.th(".mem", "Mem Used (G)")
@@ -151,6 +155,11 @@ protected void render(Block html) {
NodeInfo info = new NodeInfo(ni, sched);
int usedMemory = (int) info.getUsedMemory();
int availableMemory = (int) info.getAvailableMemory();
+ int reservedMemory = (int) info.getReservedMemoryMB();
+ int actualAvailableMemory = (int)(info.getAvailableMemory() - info
+ .getReservedMemoryMB());
+ int actualAvailableVirtualCores = (int) (info.getAvailableVirtualCores()
+ - info.getReservedVirtualCores());
nodeTableData.append("[\"")
.append(StringUtils.join(",", info.getNodeLabels())).append("\",\"")
.append(info.getRack()).append("\",\"").append(info.getState())
@@ -170,11 +179,21 @@ protected void render(Block html) {
.append("
").append(StringUtils.byteDesc(usedMemory * BYTES_IN_MB))
.append("\",\"").append("
")
+ .append(StringUtils.byteDesc(reservedMemory * BYTES_IN_MB))
+ .append("\",\"").append("
")
.append(StringUtils.byteDesc(availableMemory * BYTES_IN_MB))
+ .append("\",\"").append("
")
+ .append(StringUtils.byteDesc(actualAvailableMemory * BYTES_IN_MB))
.append("\",\"").append(String.valueOf(info.getUsedVirtualCores()))
.append("\",\"")
+ .append(String.valueOf(info.getReservedVirtualCores()))
+ .append("\",\"")
.append(String.valueOf(info.getAvailableVirtualCores()))
+ .append("\",\"")
+ .append(String.valueOf(actualAvailableMemory))
.append("\",\"");
// If opportunistic containers are enabled, add extra fields.
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/NodeInfo.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/NodeInfo.java
index 2530c8ea117..40ad7d0e906 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/NodeInfo.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/NodeInfo.java
@@ -50,8 +50,10 @@
protected int numContainers;
protected long usedMemoryMB;
protected long availMemoryMB;
+ protected long reservedMemoryMB;
protected long usedVirtualCores;
protected long availableVirtualCores;
+ protected long reservedVirtualCores;
private int numRunningOpportContainers;
private long usedMemoryOpportGB;
private long usedVirtualCoresOpport;
@@ -72,9 +74,12 @@ public NodeInfo(RMNode ni, ResourceScheduler sched) {
this.numContainers = report.getNumContainers();
this.usedMemoryMB = report.getUsedResource().getMemorySize();
this.availMemoryMB = report.getAvailableResource().getMemorySize();
+ this.reservedMemoryMB = report.getReservedResource().getMemory();
this.usedVirtualCores = report.getUsedResource().getVirtualCores();
this.availableVirtualCores =
report.getAvailableResource().getVirtualCores();
+ this.reservedVirtualCores =
+ report.getReservedResource().getVirtualCores();
}
this.id = id.toString();
this.rack = ni.getRackName();
@@ -155,6 +160,10 @@ public long getAvailableMemory() {
return this.availMemoryMB;
}
+ public long getReservedMemoryMB() {
+ return this.reservedMemoryMB;
+ }
+
public long getUsedVirtualCores() {
return this.usedVirtualCores;
}
@@ -163,6 +172,10 @@ public long getAvailableVirtualCores() {
return this.availableVirtualCores;
}
+ public long getReservedVirtualCores() {
+ return this.reservedVirtualCores;
+ }
+
public int getNumRunningOpportContainers() {
return numRunningOpportContainers;
}