Browse Source

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
Sanford Ryza 11 years ago
parent
commit
06d62b1982

+ 3 - 0
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 

+ 6 - 2
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 class ResourceWeights {
   }
 
   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;

+ 9 - 4
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 class AppSchedulable extends Schedulable {
     this.queue = queue;
     this.containerTokenSecretManager = scheduler.
     		getContainerTokenSecretManager();
+    this.priority = Priority.newInstance(1);
+    this.resourceWeights = new ResourceWeights();
   }
 
   @Override
@@ -75,6 +78,10 @@ public class AppSchedulable extends Schedulable {
     return app;
   }
 
+  public ResourceWeights getResourceWeights() {
+    return resourceWeights;
+  }
+
   @Override
   public void updateDemand() {
     demand = Resources.createResource(0);
@@ -134,9 +141,7 @@ public class AppSchedulable extends Schedulable {
   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;
   }
 
   /**

+ 3 - 1
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 class FairScheduler extends AbstractYarnScheduler {
       // 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