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 sj...@apache.org on 2015/09/26 18:05:11 UTC
[04/50] [abbrv] hadoop git commit: YARN-3733. Fix
DominantRC#compare() does not work as expected if cluster resource is empty.
(Rohith Sharmaks via wangda)
YARN-3733. Fix DominantRC#compare() does not work as expected if cluster resource is empty. (Rohith Sharmaks via wangda)
(cherry picked from commit ebd797c48fe236b404cf3a125ac9d1f7714e291e)
(cherry picked from commit 78d626fa892415023827e35ad549636e2a83275d)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/85d92721
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/85d92721
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/85d92721
Branch: refs/heads/branch-2.6
Commit: 85d92721a42fdc50cc828dfe28103ecee9831924
Parents: f1b35ff
Author: Wangda Tan <wa...@apache.org>
Authored: Thu Jun 4 10:22:57 2015 -0700
Committer: Vinod Kumar Vavilapalli <vi...@apache.org>
Committed: Thu Sep 3 17:43:01 2015 -0700
----------------------------------------------------------------------
hadoop-yarn-project/CHANGES.txt | 3 +
.../resource/DominantResourceCalculator.java | 15 +++++
.../capacity/TestCapacityScheduler.java | 58 +++++++++++++++++++-
3 files changed, 75 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/85d92721/hadoop-yarn-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt
index a5b270e..8244d61 100644
--- a/hadoop-yarn-project/CHANGES.txt
+++ b/hadoop-yarn-project/CHANGES.txt
@@ -168,6 +168,9 @@ Release 2.6.1 - UNRELEASED
YARN-2637. Fixed max-am-resource-percent calculation in CapacityScheduler
when activating applications. (Craig Welch via jianhe)
+ YARN-3733. Fix DominantRC#compare() does not work as expected if
+ cluster resource is empty. (Rohith Sharmaks via wangda)
+
Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/85d92721/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
index 6f5b40e..2ee95ce 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/resource/DominantResourceCalculator.java
@@ -53,6 +53,21 @@ public class DominantResourceCalculator extends ResourceCalculator {
return 0;
}
+ if (isInvalidDivisor(clusterResource)) {
+ if ((lhs.getMemory() < rhs.getMemory() && lhs.getVirtualCores() > rhs
+ .getVirtualCores())
+ || (lhs.getMemory() > rhs.getMemory() && lhs.getVirtualCores() < rhs
+ .getVirtualCores())) {
+ return 0;
+ } else if (lhs.getMemory() > rhs.getMemory()
+ || lhs.getVirtualCores() > rhs.getVirtualCores()) {
+ return 1;
+ } else if (lhs.getMemory() < rhs.getMemory()
+ || lhs.getVirtualCores() < rhs.getVirtualCores()) {
+ return -1;
+ }
+ }
+
float l = getResourceAsValue(clusterResource, lhs, true);
float r = getResourceAsValue(clusterResource, rhs, true);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/85d92721/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java
index 2aa57a0..edcd871 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestCapacityScheduler.java
@@ -118,6 +118,7 @@ import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedule
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfo;
import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfoList;
import org.apache.hadoop.yarn.server.utils.BuilderUtils;
+import org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator;
import org.apache.hadoop.yarn.util.resource.DominantResourceCalculator;
import org.apache.hadoop.yarn.util.resource.Resources;
import org.junit.After;
@@ -1136,9 +1137,15 @@ public class TestCapacityScheduler {
private MockRM setUpMove() {
CapacitySchedulerConfiguration conf = new CapacitySchedulerConfiguration();
+ return setUpMove(conf);
+ }
+
+ private MockRM setUpMove(Configuration config) {
+ CapacitySchedulerConfiguration conf =
+ new CapacitySchedulerConfiguration(config);
setupQueueConfiguration(conf);
conf.setClass(YarnConfiguration.RM_SCHEDULER, CapacityScheduler.class,
- ResourceScheduler.class);
+ ResourceScheduler.class);
MockRM rm = new MockRM(conf);
rm.start();
return rm;
@@ -2071,4 +2078,53 @@ public class TestCapacityScheduler {
Assert.assertEquals(0, report.getNumReservedContainers());
rm.stop();
}
+
+ @Test(timeout = 30000)
+ public void testAMLimitUsage() throws Exception {
+
+ CapacitySchedulerConfiguration config =
+ new CapacitySchedulerConfiguration();
+
+ config.set(CapacitySchedulerConfiguration.RESOURCE_CALCULATOR_CLASS,
+ DefaultResourceCalculator.class.getName());
+ verifyAMLimitForLeafQueue(config);
+
+ config.set(CapacitySchedulerConfiguration.RESOURCE_CALCULATOR_CLASS,
+ DominantResourceCalculator.class.getName());
+ verifyAMLimitForLeafQueue(config);
+
+ }
+
+ private void verifyAMLimitForLeafQueue(CapacitySchedulerConfiguration config)
+ throws Exception {
+ MockRM rm = setUpMove(config);
+
+ String queueName = "a1";
+ String userName = "user_0";
+ ResourceScheduler scheduler = rm.getRMContext().getScheduler();
+ LeafQueue queueA =
+ (LeafQueue) ((CapacityScheduler) scheduler).getQueue(queueName);
+ Resource amResourceLimit = queueA.getAMResourceLimit();
+
+ Resource amResource =
+ Resource.newInstance(amResourceLimit.getMemory() + 1,
+ amResourceLimit.getVirtualCores() + 1);
+
+ rm.submitApp(amResource.getMemory(), "app-1", userName, null, queueName);
+
+ rm.submitApp(amResource.getMemory(), "app-1", userName, null, queueName);
+
+ // When AM limit is exceeded, 1 applications will be activated.Rest all
+ // applications will be in pending
+ Assert.assertEquals("PendingApplications should be 1", 1,
+ queueA.getNumPendingApplications());
+ Assert.assertEquals("Active applications should be 1", 1,
+ queueA.getNumActiveApplications());
+
+ Assert.assertEquals("User PendingApplications should be 1", 1, queueA
+ .getUser(userName).getPendingApplications());
+ Assert.assertEquals("User Active applications should be 1", 1, queueA
+ .getUser(userName).getActiveApplications());
+ rm.stop();
+ }
}