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; }