YARN-4418. AM Resource Limit per partition can be updated to ResourceUsage as well. (Sunil G via wangda)
(cherry picked from commit 07b0fb996a
)
This commit is contained in:
parent
e02ad5a618
commit
c915a658c8
|
@ -564,6 +564,9 @@ Release 2.8.0 - UNRELEASED
|
||||||
YARN-4309. Add container launch related debug information to container logs
|
YARN-4309. Add container launch related debug information to container logs
|
||||||
when a container fails. (Varun Vasudev via wangda)
|
when a container fails. (Varun Vasudev via wangda)
|
||||||
|
|
||||||
|
YARN-4418. AM Resource Limit per partition can be updated to ResourceUsage as well.
|
||||||
|
(Sunil G via wangda)
|
||||||
|
|
||||||
OPTIMIZATIONS
|
OPTIMIZATIONS
|
||||||
|
|
||||||
YARN-3339. TestDockerContainerExecutor should pull a single image and not
|
YARN-3339. TestDockerContainerExecutor should pull a single image and not
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class ResourceUsage {
|
||||||
//CACHED_USED and CACHED_PENDING may be read by anyone, but must only
|
//CACHED_USED and CACHED_PENDING may be read by anyone, but must only
|
||||||
//be written by ordering policies
|
//be written by ordering policies
|
||||||
USED(0), PENDING(1), AMUSED(2), RESERVED(3), CACHED_USED(4),
|
USED(0), PENDING(1), AMUSED(2), RESERVED(3), CACHED_USED(4),
|
||||||
CACHED_PENDING(5);
|
CACHED_PENDING(5), AMLIMIT(6);
|
||||||
|
|
||||||
private int idx;
|
private int idx;
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ public class ResourceUsage {
|
||||||
sb.append("pending=" + resArr[1] + "%, ");
|
sb.append("pending=" + resArr[1] + "%, ");
|
||||||
sb.append("am_used=" + resArr[2] + "%, ");
|
sb.append("am_used=" + resArr[2] + "%, ");
|
||||||
sb.append("reserved=" + resArr[3] + "%}");
|
sb.append("reserved=" + resArr[3] + "%}");
|
||||||
|
sb.append("am_limit=" + resArr[6] + "%, ");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,11 +107,19 @@ public class ResourceUsage {
|
||||||
public Resource getUsed(String label) {
|
public Resource getUsed(String label) {
|
||||||
return _get(label, ResourceType.USED);
|
return _get(label, ResourceType.USED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Resource getCachedUsed() {
|
||||||
|
return _get(NL, ResourceType.CACHED_USED);
|
||||||
|
}
|
||||||
|
|
||||||
public Resource getCachedUsed(String label) {
|
public Resource getCachedUsed(String label) {
|
||||||
return _get(label, ResourceType.CACHED_USED);
|
return _get(label, ResourceType.CACHED_USED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Resource getCachedPending() {
|
||||||
|
return _get(NL, ResourceType.CACHED_PENDING);
|
||||||
|
}
|
||||||
|
|
||||||
public Resource getCachedPending(String label) {
|
public Resource getCachedPending(String label) {
|
||||||
return _get(label, ResourceType.CACHED_PENDING);
|
return _get(label, ResourceType.CACHED_PENDING);
|
||||||
}
|
}
|
||||||
|
@ -149,15 +158,23 @@ public class ResourceUsage {
|
||||||
public void setUsed(String label, Resource res) {
|
public void setUsed(String label, Resource res) {
|
||||||
_set(label, ResourceType.USED, res);
|
_set(label, ResourceType.USED, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCachedUsed(String label, Resource res) {
|
public void setCachedUsed(String label, Resource res) {
|
||||||
_set(label, ResourceType.CACHED_USED, res);
|
_set(label, ResourceType.CACHED_USED, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCachedUsed(Resource res) {
|
||||||
|
_set(NL, ResourceType.CACHED_USED, res);
|
||||||
|
}
|
||||||
|
|
||||||
public void setCachedPending(String label, Resource res) {
|
public void setCachedPending(String label, Resource res) {
|
||||||
_set(label, ResourceType.CACHED_PENDING, res);
|
_set(label, ResourceType.CACHED_PENDING, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setCachedPending(Resource res) {
|
||||||
|
_set(NL, ResourceType.CACHED_PENDING, res);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pending
|
* Pending
|
||||||
*/
|
*/
|
||||||
|
@ -263,6 +280,41 @@ public class ResourceUsage {
|
||||||
_set(label, ResourceType.AMUSED, res);
|
_set(label, ResourceType.AMUSED, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AM-Resource Limit
|
||||||
|
*/
|
||||||
|
public Resource getAMLimit() {
|
||||||
|
return getAMLimit(NL);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Resource getAMLimit(String label) {
|
||||||
|
return _get(label, ResourceType.AMLIMIT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void incAMLimit(String label, Resource res) {
|
||||||
|
_inc(label, ResourceType.AMLIMIT, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void incAMLimit(Resource res) {
|
||||||
|
incAMLimit(NL, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decAMLimit(Resource res) {
|
||||||
|
decAMLimit(NL, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decAMLimit(String label, Resource res) {
|
||||||
|
_dec(label, ResourceType.AMLIMIT, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAMLimit(Resource res) {
|
||||||
|
setAMLimit(NL, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAMLimit(String label, Resource res) {
|
||||||
|
_set(label, ResourceType.AMLIMIT, res);
|
||||||
|
}
|
||||||
|
|
||||||
private static Resource normalize(Resource res) {
|
private static Resource normalize(Resource res) {
|
||||||
if (res == null) {
|
if (res == null) {
|
||||||
return Resources.none();
|
return Resources.none();
|
||||||
|
|
|
@ -606,6 +606,7 @@ public class LeafQueue extends AbstractCSQueue {
|
||||||
minimumAllocation);
|
minimumAllocation);
|
||||||
|
|
||||||
metrics.setAMResouceLimit(amResouceLimit);
|
metrics.setAMResouceLimit(amResouceLimit);
|
||||||
|
queueUsage.setAMLimit(nodePartition, amResouceLimit);
|
||||||
return amResouceLimit;
|
return amResouceLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -217,6 +217,11 @@ public class QueueCapacities {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Absolute Maximum AM resource percentage Getter and Setter */
|
/* Absolute Maximum AM resource percentage Getter and Setter */
|
||||||
|
|
||||||
|
public float getMaxAMResourcePercentage() {
|
||||||
|
return _get(NL, CapacityType.MAX_AM_PERC);
|
||||||
|
}
|
||||||
|
|
||||||
public float getMaxAMResourcePercentage(String label) {
|
public float getMaxAMResourcePercentage(String label) {
|
||||||
return _get(label, CapacityType.MAX_AM_PERC);
|
return _get(label, CapacityType.MAX_AM_PERC);
|
||||||
}
|
}
|
||||||
|
@ -225,6 +230,10 @@ public class QueueCapacities {
|
||||||
_set(label, CapacityType.MAX_AM_PERC, value);
|
_set(label, CapacityType.MAX_AM_PERC, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setMaxAMResourcePercentage(float value) {
|
||||||
|
_set(NL, CapacityType.MAX_AM_PERC, value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear configurable fields, like
|
* Clear configurable fields, like
|
||||||
* (absolute)capacity/(absolute)maximum-capacity, this will be used by queue
|
* (absolute)capacity/(absolute)maximum-capacity, this will be used by queue
|
||||||
|
|
|
@ -37,8 +37,8 @@ public class TestResourceUsage {
|
||||||
|
|
||||||
@Parameterized.Parameters
|
@Parameterized.Parameters
|
||||||
public static Collection<String[]> getParameters() {
|
public static Collection<String[]> getParameters() {
|
||||||
return Arrays.asList(new String[][] { { "Pending" }, { "Used" },
|
return Arrays.asList(new String[][]{{"Pending"}, {"Used"}, {"Reserved"},
|
||||||
{ "Reserved" }, { "AMUsed" } });
|
{"AMUsed"}, {"AMLimit"}, {"CachedUsed"}, {"CachedPending"}});
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestResourceUsage(String suffix) {
|
public TestResourceUsage(String suffix) {
|
||||||
|
@ -112,16 +112,26 @@ public class TestResourceUsage {
|
||||||
check(0, 0, res);
|
check(0, 0, res);
|
||||||
|
|
||||||
// Add 1,1 should returns 1,1
|
// Add 1,1 should returns 1,1
|
||||||
inc(usage, suffix, Resource.newInstance(1, 1), label);
|
try {
|
||||||
check(1, 1, get(usage, suffix, label));
|
inc(usage, suffix, Resource.newInstance(1, 1), label);
|
||||||
|
check(1, 1, get(usage, suffix, label));
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
// Few operations need not have to be verified as some resources doesn't
|
||||||
|
// inc/dec apis exposed (For Eg: CachedUsed and CachedPending).
|
||||||
|
}
|
||||||
|
|
||||||
// Set 2,2
|
// Set 2,2
|
||||||
set(usage, suffix, Resource.newInstance(2, 2), label);
|
set(usage, suffix, Resource.newInstance(2, 2), label);
|
||||||
check(2, 2, get(usage, suffix, label));
|
check(2, 2, get(usage, suffix, label));
|
||||||
|
|
||||||
// dec 2,2
|
// dec 2,2
|
||||||
dec(usage, suffix, Resource.newInstance(2, 2), label);
|
try {
|
||||||
check(0, 0, get(usage, suffix, label));
|
dec(usage, suffix, Resource.newInstance(2, 2), label);
|
||||||
|
check(0, 0, get(usage, suffix, label));
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
// Few operations need not have to be verified, as some resources doesn't
|
||||||
|
// inc/dec apis exposed (For Eg: CachedUsed and CachedPending).
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void check(int mem, int cpu, Resource res) {
|
void check(int mem, int cpu, Resource res) {
|
||||||
|
|
|
@ -43,7 +43,8 @@ public class TestQueueCapacities {
|
||||||
{ "UsedCapacity" },
|
{ "UsedCapacity" },
|
||||||
{ "AbsoluteUsedCapacity" },
|
{ "AbsoluteUsedCapacity" },
|
||||||
{ "MaximumCapacity" },
|
{ "MaximumCapacity" },
|
||||||
{ "AbsoluteMaximumCapacity" } });
|
{ "AbsoluteMaximumCapacity" },
|
||||||
|
{ "MaxAMResourcePercentage" } });
|
||||||
}
|
}
|
||||||
|
|
||||||
public TestQueueCapacities(String suffix) {
|
public TestQueueCapacities(String suffix) {
|
||||||
|
|
Loading…
Reference in New Issue