From 06d62b1982bd3fb50f111a9cece2595bfa14d757 Mon Sep 17 00:00:00 2001 From: Sanford Ryza Date: Mon, 31 Mar 2014 23:53:58 +0000 Subject: [PATCH] YARN-1889. In Fair Scheduler, avoid creating objects on each call to AppSchedulable comparator (Hong Zhiguo via Sandy Ryza) git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1583494 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-yarn-project/CHANGES.txt | 3 +++ .../resourcemanager/resource/ResourceWeights.java | 8 ++++++-- .../scheduler/fair/AppSchedulable.java | 13 +++++++++---- .../scheduler/fair/FairScheduler.java | 4 +++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 3dc1b240319..ecb44fd82a6 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -36,6 +36,9 @@ Release 2.5.0 - UNRELEASED YARN-1883. TestRMAdminService fails due to inconsistent entries in UserGroups (Mit Desai via jeagles) + YARN-1889. In Fair Scheduler, avoid creating objects on each call to + AppSchedulable comparator (Hong Zhiguo via Sandy Ryza) + OPTIMIZATIONS BUG FIXES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/resource/ResourceWeights.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/resource/ResourceWeights.java index fd83ed3ed7e..230f9a9a580 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/resource/ResourceWeights.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/resource/ResourceWeights.java @@ -34,12 +34,16 @@ public ResourceWeights(float memoryWeight, float cpuWeight) { } public ResourceWeights(float weight) { + setWeight(weight); + } + + public ResourceWeights() { } + + public void setWeight(float weight) { for (int i = 0; i < weights.length; i++) { weights[i] = weight; } } - - public ResourceWeights() { } public void setWeight(ResourceType resourceType, float weight) { weights[resourceType.ordinal()] = weight; 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/fair/AppSchedulable.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java index 304a2cfa0c4..9ed5179270a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/AppSchedulable.java @@ -52,10 +52,11 @@ public class AppSchedulable extends Schedulable { private FSSchedulerApp app; private Resource demand = Resources.createResource(0); private long startTime; - private static RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null); private static final Log LOG = LogFactory.getLog(AppSchedulable.class); private FSLeafQueue queue; private RMContainerTokenSecretManager containerTokenSecretManager; + private Priority priority; + private ResourceWeights resourceWeights; public AppSchedulable(FairScheduler scheduler, FSSchedulerApp app, FSLeafQueue queue) { this.scheduler = scheduler; @@ -64,6 +65,8 @@ public AppSchedulable(FairScheduler scheduler, FSSchedulerApp app, FSLeafQueue q this.queue = queue; this.containerTokenSecretManager = scheduler. getContainerTokenSecretManager(); + this.priority = Priority.newInstance(1); + this.resourceWeights = new ResourceWeights(); } @Override @@ -75,6 +78,10 @@ public FSSchedulerApp getApp() { return app; } + public ResourceWeights getResourceWeights() { + return resourceWeights; + } + @Override public void updateDemand() { demand = Resources.createResource(0); @@ -134,9 +141,7 @@ public ResourceWeights getWeights() { public Priority getPriority() { // Right now per-app priorities are not passed to scheduler, // so everyone has the same priority. - Priority p = recordFactory.newRecordInstance(Priority.class); - p.setPriority(1); - return p; + return priority; } /** 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/fair/FairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java index 3cdff7f4055..fab9ebef961 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fair/FairScheduler.java @@ -535,7 +535,9 @@ public synchronized ResourceWeights getAppWeight(AppSchedulable app) { // Run weight through the user-supplied weightAdjuster weight = weightAdjuster.adjustWeight(app, weight); } - return new ResourceWeights((float)weight); + ResourceWeights resourceWeights = app.getResourceWeights(); + resourceWeights.setWeight((float)weight); + return resourceWeights; } @Override