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 ha...@apache.org on 2017/09/15 16:57:00 UTC
[50/50] [abbrv] hadoop git commit: YARN-6705 Add separate NM
preemption thresholds for cpu and memory (Haibo Chen)
YARN-6705 Add separate NM preemption thresholds for cpu and memory (Haibo Chen)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6d9500c9
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6d9500c9
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6d9500c9
Branch: refs/heads/YARN-1011
Commit: 6d9500c9966a7c0366e4f192fac58c7eb1d523d4
Parents: 6ca0bc8
Author: Haibo Chen <ha...@apache.org>
Authored: Wed Jul 12 12:32:13 2017 -0700
Committer: Haibo Chen <ha...@apache.org>
Committed: Fri Sep 15 09:54:55 2017 -0700
----------------------------------------------------------------------
.../hadoop/yarn/conf/YarnConfiguration.java | 31 +++++++++++++--
.../src/main/resources/yarn-default.xml | 34 ++++++++++++++--
.../monitor/ContainersMonitorImpl.java | 42 +++++++++++++-------
3 files changed, 85 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/6d9500c9/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
index 9ecde42..f346db1 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/conf/YarnConfiguration.java
@@ -1741,10 +1741,33 @@ public class YarnConfiguration extends Configuration {
public static final String NM_OVERALLOCATION_MEMORY_UTILIZATION_THRESHOLD =
NM_PREFIX + "overallocation.memory-utilization-threshold";
- public static final String NM_OVERALLOCATION_PREEMPTION_THRESHOLD =
- NM_PREFIX + "overallocation.preemption-threshold";
- public static final float DEFAULT_NM_OVERALLOCATION_PREEMPTION_THRESHOLD
- = 0.96f;
+ /**
+ * The CPU utilization threshold, if went beyond for a few times in a row,
+ * OPPORTUNISTIC containers started due to overallocation should start
+ * getting preempted.
+ */
+ public static final String NM_OVERALLOCATION_CPU_PREEMPTION_THRESHOLD =
+ NM_PREFIX + "overallocation.preemption-threshold.cpu";
+ public static final float
+ DEFAULT_NM_OVERALLOCATION_CPU_PREEMPTION_THRESHOLD = 0.99f;
+
+ /**
+ * The number of times that CPU utilization must go over the CPU preemption
+ * threshold consecutively before preemption starts to kick in.
+ */
+ public static final String NM_OVERALLOCATION_PREEMPTION_CPU_COUNT =
+ NM_PREFIX + "overallocation.preemption-threshold-count.cpu";
+ public static final int DEFAULT_NM_OVERALLOCATION_PREEMPTION_CPU_COUNT = 4;
+
+
+ /**
+ * The memory utilization threshold beyond which OPPORTUNISTIC containers
+ * started due to overallocation should start getting preempted.
+ */
+ public static final String NM_OVERALLOCATION_MEMORY_PREEMPTION_THRESHOLD =
+ NM_PREFIX + "overallocation.preemption-threshold.memory";
+ public static final float
+ DEFAULT_NM_OVERALLOCATION_MEMORY_PREEMPTION_THRESHOLD = 0.95f;
/**
* Interval of time the linux container executor should try cleaning up
http://git-wip-us.apache.org/repos/asf/hadoop/blob/6d9500c9/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
index 20d4c1d..681e394 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/resources/yarn-default.xml
@@ -1639,11 +1639,37 @@
<property>
<description>When a node is over-allocated to improve utilization by
- running OPPORTUNISTIC containers, this config captures the utilization
- beyond which OPPORTUNISTIC containers should start getting preempted.
+ running OPPORTUNISTIC containers, this config captures the CPU
+ utilization beyond which OPPORTUNISTIC containers should start getting
+ preempted. This is used in combination with
+ yarn.nodemanager.overallocation.preemption-threshold-count.cpu, that is,
+ only when the CPU utilization goes over this threshold consecutively for
+ a few times will preemption kicks in.
</description>
- <name>yarn.nodemanager.overallocation.preemption-threshold</name>
- <value>0.96</value>
+ <name>yarn.nodemanager.overallocation.preemption-threshold.cpu</name>
+ <value>0.99</value>
+ </property>
+
+ <property>
+ <description>When a node is over-allocated to improve utilization by
+ running OPPORTUNISTIC containers, this config captures the number of
+ times that CPU utilization has to go above
+ ${yarn.nodemanager.overallocation.preemption-threshold.cpu}
+ consecutively for NM to start preempting OPPORTUNISTIC containers
+ started due to overallocation.
+ </description>
+ <name>yarn.nodemanager.overallocation.preemption-threshold-count.cpu</name>
+ <value>4</value>
+ </property>
+
+ <property>
+ <description>When a node is over-allocated to improve utilization by
+ running OPPORTUNISTIC containers, this config captures the CPU
+ utilization beyond which OPPORTUNISTIC containers should start getting
+ preempted.
+ </description>
+ <name>yarn.nodemanager.overallocation.preemption-threshold.memory</name>
+ <value>0.95</value>
</property>
<property>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/6d9500c9/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
index 941997e..2c1e088 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
@@ -103,6 +103,7 @@ public class ContainersMonitorImpl extends AbstractService implements
private ResourceUtilization containersUtilization;
private ResourceThresholds overAllocationPreemptionThresholds;
+ private int overAlloctionPreemptionCpuCount = -1;
private volatile boolean stopped = false;
@@ -237,7 +238,7 @@ public class ContainersMonitorImpl extends AbstractService implements
YarnConfiguration.MAX_NM_OVERALLOCATION_THRESHOLD);
if (overAllocationMemoryUtilizationThreshold <= 0) {
LOG.info("NodeManager oversubscription is disabled because the memory " +
- "utilization threshold is no larger than zero.");
+ "overallocation threshold is no larger than zero.");
return;
}
@@ -249,36 +250,49 @@ public class ContainersMonitorImpl extends AbstractService implements
YarnConfiguration.MAX_NM_OVERALLOCATION_THRESHOLD);
if (overAllocationCpuUtilizationThreshold <= 0) {
LOG.info("NodeManager oversubscription is disabled because the CPU " +
- "utilization threshold is no larger than zero.");
+ "overallocation threshold is no larger than zero.");
return;
}
- float preemptionThreshold = conf.getFloat(
- YarnConfiguration.NM_OVERALLOCATION_PREEMPTION_THRESHOLD,
- YarnConfiguration.DEFAULT_NM_OVERALLOCATION_PREEMPTION_THRESHOLD);
- if (preemptionThreshold <= overAllocationCpuUtilizationThreshold) {
- LOG.info("NodeManager oversubscription is disabled because preemption" +
- "threshold is no larger than the cpu utilization threshold.");
+ float cpuPreemptionThreshold = conf.getFloat(
+ YarnConfiguration.NM_OVERALLOCATION_CPU_PREEMPTION_THRESHOLD,
+ YarnConfiguration.
+ DEFAULT_NM_OVERALLOCATION_CPU_PREEMPTION_THRESHOLD);
+ if (cpuPreemptionThreshold <= overAllocationCpuUtilizationThreshold) {
+ LOG.info("NodeManager oversubscription is disabled because the cpu " +
+ " preemption threshold is no larger than the cpu overallocation" +
+ " threshold.");
return;
}
- if (preemptionThreshold <= overAllocationMemoryUtilizationThreshold) {
- LOG.info("NodeManager oversubscription is disabled because preemption" +
- "threshold is no larger than the memory utilization threshold.");
+
+ float memoryPreemptionThreshold = conf.getFloat(
+ YarnConfiguration.NM_OVERALLOCATION_MEMORY_PREEMPTION_THRESHOLD,
+ YarnConfiguration.
+ DEFAULT_NM_OVERALLOCATION_MEMORY_PREEMPTION_THRESHOLD);
+ if (memoryPreemptionThreshold <= overAllocationMemoryUtilizationThreshold) {
+ LOG.info("NodeManager oversubscription is disabled because the memory" +
+ " preemption threshold is no larger than the memory overallocation" +
+ " threshold.");
return;
}
+ this.overAlloctionPreemptionCpuCount = conf.getInt(
+ YarnConfiguration.NM_OVERALLOCATION_PREEMPTION_CPU_COUNT,
+ YarnConfiguration.DEFAULT_NM_OVERALLOCATION_PREEMPTION_CPU_COUNT);
+
ResourceThresholds resourceThresholds = ResourceThresholds.newInstance(
overAllocationCpuUtilizationThreshold,
overAllocationMemoryUtilizationThreshold);
((NodeManager.NMContext) context).setOverAllocationInfo(
OverAllocationInfo.newInstance(resourceThresholds));
- this.overAllocationPreemptionThresholds =
- ResourceThresholds.newInstance(preemptionThreshold);
+ this.overAllocationPreemptionThresholds = ResourceThresholds.newInstance(
+ cpuPreemptionThreshold, memoryPreemptionThreshold);
LOG.info("NodeManager oversubscription enabled with overallocation " +
"thresholds (memory:" + overAllocationMemoryUtilizationThreshold +
", CPU:" + overAllocationCpuUtilizationThreshold + ") and preemption" +
- " threshold: " + preemptionThreshold);
+ " threshold (memory:" + memoryPreemptionThreshold + ", CPU:" +
+ cpuPreemptionThreshold + ")");
}
private boolean isResourceCalculatorAvailable() {
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org