diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/RegisterApplicationMasterResponse.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/RegisterApplicationMasterResponse.java
index 79f9f3a..1a6028b 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/RegisterApplicationMasterResponse.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/RegisterApplicationMasterResponse.java
@@ -42,6 +42,7 @@
*
Maximum capability for allocated resources in the cluster.
* ApplicationACLs for the application.
* ClientToAMToken master key.
+ * Name of the ResourceCalculator for the queue
*
*
*
@@ -57,7 +58,7 @@ public static RegisterApplicationMasterResponse newInstance(
Resource minCapability, Resource maxCapability,
Map acls, ByteBuffer key,
List containersFromPreviousAttempt, String queue,
- List nmTokensFromPreviousAttempts) {
+ List nmTokensFromPreviousAttempts, String calculator) {
RegisterApplicationMasterResponse response =
Records.newRecord(RegisterApplicationMasterResponse.class);
response.setMaximumResourceCapability(maxCapability);
@@ -66,6 +67,7 @@ public static RegisterApplicationMasterResponse newInstance(
response.setContainersFromPreviousAttempts(containersFromPreviousAttempt);
response.setNMTokensFromPreviousAttempts(nmTokensFromPreviousAttempts);
response.setQueue(queue);
+ response.setResourceCalculatorName(calculator);
return response;
}
@@ -180,4 +182,26 @@ public abstract void setContainersFromPreviousAttempts(
@Private
@Unstable
public abstract void setNMTokensFromPreviousAttempts(List nmTokens);
+
+ /**
+ * Get the name of the ResourceCalculator for this queue.
+ *
+ * @return the name of the ResourceCalculator
+ *
+ */
+ @Public
+ @Unstable
+ public abstract String getResourceCalculatorName();
+
+ /**
+ * Set the name of the ResourceCalculator used by the scheduler for this
+ * queue.
+ *
+ * @param calculator
+ * Name of the ResourceCalculator used
+ *
+ */
+ @Private
+ @Unstable
+ public abstract void setResourceCalculatorName(String calculator);
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
index df8784b..e71c4ec 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/proto/yarn_service_protos.proto
@@ -47,6 +47,7 @@ message RegisterApplicationMasterResponseProto {
repeated ContainerProto containers_from_previous_attempts = 4;
optional string queue = 5;
repeated NMTokenProto nm_tokens_from_previous_attempts = 6;
+ optional string resource_calculator_name = 7;
}
message FinishApplicationMasterRequestProto {
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/RegisterApplicationMasterResponsePBImpl.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/RegisterApplicationMasterResponsePBImpl.java
index 06a637a..6c65093 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/RegisterApplicationMasterResponsePBImpl.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/api/protocolrecords/impl/pb/RegisterApplicationMasterResponsePBImpl.java
@@ -387,4 +387,24 @@ private NMTokenProto convertToProtoFormat(NMToken token) {
private NMToken convertFromProtoFormat(NMTokenProto proto) {
return new NMTokenPBImpl(proto);
}
+
+ @Override
+ public String getResourceCalculatorName() {
+ RegisterApplicationMasterResponseProtoOrBuilder p =
+ viaProto ? proto : builder;
+ if (!p.hasResourceCalculatorName()) {
+ return null;
+ }
+ return p.getResourceCalculatorName();
+ }
+
+ @Override
+ public void setResourceCalculatorName(String calculatorName) {
+ maybeInitBuilder();
+ if (calculatorName == null) {
+ builder.clearResourceCalculatorName();
+ } else {
+ builder.setResourceCalculatorName(calculatorName);
+ }
+ }
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
index d77180c..a10d260 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ApplicationMasterService.java
@@ -293,6 +293,8 @@ public RegisterApplicationMasterResponse registerApplicationMaster(
response.setApplicationACLs(app.getRMAppAttempt(applicationAttemptId)
.getSubmissionContext().getAMContainerSpec().getApplicationACLs());
response.setQueue(app.getQueue());
+ response
+ .setResourceCalculatorName(rScheduler.getResourceCalculatorName());
if (UserGroupInformation.isSecurityEnabled()) {
LOG.info("Setting client token master key");
response.setClientToAMTokenMasterKey(java.nio.ByteBuffer.wrap(rmContext
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java
index 5ce16c2..9019212 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/YarnScheduler.java
@@ -220,4 +220,11 @@ public String moveApplication(ApplicationId appId, String newQueue)
* @throws YarnException
*/
void killAllAppsInQueue(String queueName) throws YarnException;
+
+ /**
+ * Get the name of the ResourceCalculator being used
+ *
+ * @return name of the ResourceCalculator
+ */
+ public String getResourceCalculatorName();
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
index c8a73bf..f65375a 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/CapacityScheduler.java
@@ -1271,4 +1271,10 @@ private LeafQueue getAndCheckLeafQueue(String queue) throws YarnException {
}
return (LeafQueue) ret;
}
+
+ /** {@inheritDoc} */
+ @Override
+ public String getResourceCalculatorName() {
+ return getResourceCalculator().getClass().getName();
+ }
}
diff --git 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 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 40c72a6..f395967 100644
--- 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
+++ 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
@@ -1534,4 +1534,10 @@ FSQueue findLowestCommonAncestorQueue(FSQueue queue1, FSQueue queue2) {
}
return queue1; // names are identical
}
+
+ /** {@inheritDoc} */
+ @Override
+ public String getResourceCalculatorName() {
+ return RESOURCE_CALCULATOR.getClass().getName();
+ }
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
index dd2ea43..838d656 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/fifo/FifoScheduler.java
@@ -936,4 +936,10 @@ public synchronized boolean checkAccess(UserGroupInformation callerUGI,
public Resource getUsedResource() {
return usedResource;
}
+
+ /** {@inheritDoc} */
+ @Override
+ public String getResourceCalculatorName() {
+ return resourceCalculator.getClass().getName();
+ }
}
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java
index b0ffc85..1002ed0 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestApplicationMasterService.java
@@ -18,6 +18,14 @@
package org.apache.hadoop.yarn.server.resourcemanager;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.api.protocolrecords.RegisterApplicationMasterResponse;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler;
+import org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator;
+import org.apache.hadoop.yarn.util.resource.DominantResourceCalculator;
+import org.apache.hadoop.yarn.util.resource.ResourceCalculator;
import org.junit.Assert;
import org.apache.commons.logging.Log;
@@ -41,7 +49,9 @@
import org.junit.Test;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import static java.lang.Thread.sleep;
import static org.mockito.Matchers.any;
@@ -259,4 +269,42 @@ public void testFinishApplicationMasterBeforeRegistering() throws Exception {
}
}
}
+
+ @Test(timeout = 3000000)
+ public void testResourceCalculatorName() throws Exception {
+ HashMap driver =
+ new HashMap();
+
+ CapacitySchedulerConfiguration csconf =
+ new CapacitySchedulerConfiguration();
+ csconf.setResourceComparator(DominantResourceCalculator.class);
+ YarnConfiguration testCapacityDRConf = new YarnConfiguration(csconf);
+ testCapacityDRConf.setClass(YarnConfiguration.RM_SCHEDULER,
+ CapacityScheduler.class, ResourceScheduler.class);
+ YarnConfiguration testCapacityDefConf = new YarnConfiguration();
+ testCapacityDefConf.setClass(YarnConfiguration.RM_SCHEDULER,
+ CapacityScheduler.class, ResourceScheduler.class);
+ YarnConfiguration testFairDefConf = new YarnConfiguration();
+ testFairDefConf.setClass(YarnConfiguration.RM_SCHEDULER,
+ FairScheduler.class, ResourceScheduler.class);
+
+ driver.put(DefaultResourceCalculator.class.getName(), conf);
+ driver.put(DominantResourceCalculator.class.getName(), testCapacityDRConf);
+ driver.put(DefaultResourceCalculator.class.getName(), testCapacityDefConf);
+ driver.put(DefaultResourceCalculator.class.getName(), testFairDefConf);
+
+ for (Map.Entry entry : driver.entrySet()) {
+ String expectedValue = entry.getKey();
+ MockRM rm = new MockRM(entry.getValue());
+ rm.start();
+ MockNM nm1 = rm.registerNode("127.0.0.1:1234", 6 * GB);
+ RMApp app1 = rm.submitApp(2048);
+ nm1.nodeHeartbeat(true);
+ RMAppAttempt attempt1 = app1.getCurrentAppAttempt();
+ MockAM am1 = rm.sendAMLaunched(attempt1.getAppAttemptId());
+ RegisterApplicationMasterResponse resp = am1.registerAppAttempt();
+ Assert.assertEquals(expectedValue, resp.getResourceCalculatorName());
+ rm.stop();
+ }
+ }
}