YARN-10519. Refactor QueueMetricsForCustomResources class to move to yarn-common package. Contributed by Minni Mittal
(cherry picked from commit 8bc2dfbf36
)
This commit is contained in:
parent
763157dd12
commit
1520b84b36
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
package org.apache.hadoop.yarn.metrics;
|
||||||
|
|
||||||
import org.apache.hadoop.thirdparty.com.google.common.collect.Maps;
|
import org.apache.hadoop.thirdparty.com.google.common.collect.Maps;
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
@ -29,26 +29,26 @@ import java.util.function.BiFunction;
|
||||||
* the name of the custom resource.
|
* the name of the custom resource.
|
||||||
* There are different kinds of values like allocated, available and others.
|
* There are different kinds of values like allocated, available and others.
|
||||||
*/
|
*/
|
||||||
public class QueueMetricsCustomResource {
|
public class CustomResourceMetricValue {
|
||||||
private final Map<String, Long> values = Maps.newHashMap();
|
private final Map<String, Long> values = Maps.newHashMap();
|
||||||
|
|
||||||
protected void increase(Resource res) {
|
public void increase(Resource res) {
|
||||||
update(res, Long::sum);
|
update(res, Long::sum);
|
||||||
}
|
}
|
||||||
|
|
||||||
void increaseWithMultiplier(Resource res, long multiplier) {
|
public void increaseWithMultiplier(Resource res, long multiplier) {
|
||||||
update(res, (v1, v2) -> v1 + v2 * multiplier);
|
update(res, (v1, v2) -> v1 + v2 * multiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void decrease(Resource res) {
|
public void decrease(Resource res) {
|
||||||
update(res, (v1, v2) -> v1 - v2);
|
update(res, (v1, v2) -> v1 - v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void decreaseWithMultiplier(Resource res, int containers) {
|
public void decreaseWithMultiplier(Resource res, int containers) {
|
||||||
update(res, (v1, v2) -> v1 - v2 * containers);
|
update(res, (v1, v2) -> v1 - v2 * containers);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void set(Resource res) {
|
public void set(Resource res) {
|
||||||
update(res, (v1, v2) -> v2);
|
update(res, (v1, v2) -> v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,8 +64,7 @@ public class QueueMetricsCustomResource {
|
||||||
if (!values.containsKey(resource.getName())) {
|
if (!values.containsKey(resource.getName())) {
|
||||||
values.put(resource.getName(), 0L);
|
values.put(resource.getName(), 0L);
|
||||||
}
|
}
|
||||||
values.merge(resource.getName(),
|
values.merge(resource.getName(), resource.getValue(), operation);
|
||||||
resource.getValue(), operation);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,133 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.hadoop.yarn.metrics;
|
||||||
|
|
||||||
|
import org.apache.hadoop.metrics2.lib.MetricsRegistry;
|
||||||
|
import org.apache.hadoop.metrics2.lib.MutableGaugeLong;
|
||||||
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
import org.apache.hadoop.yarn.api.records.ResourceInformation;
|
||||||
|
import org.apache.hadoop.yarn.util.resource.ResourceUtils;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is base class for allocated and available metrics for
|
||||||
|
* custom resources.
|
||||||
|
*/
|
||||||
|
public class CustomResourceMetrics {
|
||||||
|
private static final String ALLOCATED_RESOURCE_METRIC_PREFIX =
|
||||||
|
"AllocatedResource.";
|
||||||
|
private static final String ALLOCATED_RESOURCE_METRIC_DESC = "Allocated NAME";
|
||||||
|
|
||||||
|
private static final String AVAILABLE_RESOURCE_METRIC_PREFIX =
|
||||||
|
"AvailableResource.";
|
||||||
|
private static final String AVAILABLE_RESOURCE_METRIC_DESC = "Available NAME";
|
||||||
|
|
||||||
|
private final CustomResourceMetricValue allocated =
|
||||||
|
new CustomResourceMetricValue();
|
||||||
|
private final CustomResourceMetricValue available =
|
||||||
|
new CustomResourceMetricValue();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register all custom resources metrics as part of initialization.
|
||||||
|
* @param customResources Map containing all custom resource types
|
||||||
|
* @param registry of the metric type
|
||||||
|
*/
|
||||||
|
public void registerCustomResources(Map<String, Long> customResources,
|
||||||
|
MetricsRegistry registry) {
|
||||||
|
registerCustomResources(customResources, registry,
|
||||||
|
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
||||||
|
registerCustomResources(customResources, registry,
|
||||||
|
AVAILABLE_RESOURCE_METRIC_PREFIX, AVAILABLE_RESOURCE_METRIC_DESC);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a map of all custom resource metric.
|
||||||
|
* @return map of custom resource
|
||||||
|
*/
|
||||||
|
public Map<String, Long> initAndGetCustomResources() {
|
||||||
|
Map<String, Long> customResources = new HashMap<String, Long>();
|
||||||
|
ResourceInformation[] resources = ResourceUtils.getResourceTypesArray();
|
||||||
|
|
||||||
|
for (int i = 2; i < resources.length; i++) {
|
||||||
|
ResourceInformation resource = resources[i];
|
||||||
|
customResources.put(resource.getName(), Long.valueOf(0));
|
||||||
|
}
|
||||||
|
return customResources;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* As and when this metric object construction happens for any queue, all
|
||||||
|
* custom resource metrics value would be initialized with '0' like any other
|
||||||
|
* mandatory resources metrics.
|
||||||
|
* @param customResources Map containing all custom resource types
|
||||||
|
* @param registry of the metric type
|
||||||
|
* @param metricPrefix prefix in metric name
|
||||||
|
* @param metricDesc suffix for metric name
|
||||||
|
*/
|
||||||
|
public void registerCustomResources(Map<String, Long> customResources,
|
||||||
|
MetricsRegistry registry, String metricPrefix, String metricDesc) {
|
||||||
|
for (Map.Entry<String, Long> entry : customResources.entrySet()) {
|
||||||
|
String resourceName = entry.getKey();
|
||||||
|
Long resourceValue = entry.getValue();
|
||||||
|
|
||||||
|
MutableGaugeLong resourceMetric =
|
||||||
|
(MutableGaugeLong) registry.get(metricPrefix + resourceName);
|
||||||
|
|
||||||
|
if (resourceMetric == null) {
|
||||||
|
resourceMetric = registry.newGauge(metricPrefix + resourceName,
|
||||||
|
metricDesc.replace("NAME", resourceName), 0L);
|
||||||
|
}
|
||||||
|
resourceMetric.set(resourceValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAvailable(Resource res) {
|
||||||
|
available.set(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void increaseAllocated(Resource res) {
|
||||||
|
allocated.increase(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void increaseAllocated(Resource res, int containers) {
|
||||||
|
allocated.increaseWithMultiplier(res, containers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decreaseAllocated(Resource res) {
|
||||||
|
allocated.decrease(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decreaseAllocated(Resource res, int containers) {
|
||||||
|
allocated.decreaseWithMultiplier(res, containers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Long> getAllocatedValues() {
|
||||||
|
return allocated.getValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, Long> getAvailableValues() {
|
||||||
|
return available.getValues();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomResourceMetricValue getAvailable() {
|
||||||
|
return available;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Provides common metrics (available, allocated) for custom resources.
|
||||||
|
*/
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
package org.apache.hadoop.yarn.metrics;
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience;
|
|
@ -17,6 +17,7 @@
|
||||||
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
||||||
|
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -27,10 +28,10 @@ import java.util.Map;
|
||||||
*/
|
*/
|
||||||
public class CSQueueMetricsForCustomResources
|
public class CSQueueMetricsForCustomResources
|
||||||
extends QueueMetricsForCustomResources {
|
extends QueueMetricsForCustomResources {
|
||||||
private final QueueMetricsCustomResource guaranteedCapacity =
|
private final CustomResourceMetricValue guaranteedCapacity =
|
||||||
new QueueMetricsCustomResource();
|
new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource maxCapacity =
|
private final CustomResourceMetricValue maxCapacity =
|
||||||
new QueueMetricsCustomResource();
|
new CustomResourceMetricValue();
|
||||||
|
|
||||||
public void setGuaranteedCapacity(Resource res) {
|
public void setGuaranteedCapacity(Resource res) {
|
||||||
guaranteedCapacity.set(res);
|
guaranteedCapacity.set(res);
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
||||||
|
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -26,20 +27,20 @@ import java.util.Map;
|
||||||
* It provides increase and decrease methods for all types of metrics.
|
* It provides increase and decrease methods for all types of metrics.
|
||||||
*/
|
*/
|
||||||
public class FSQueueMetricsForCustomResources {
|
public class FSQueueMetricsForCustomResources {
|
||||||
private final QueueMetricsCustomResource fairShare =
|
private final CustomResourceMetricValue
|
||||||
new QueueMetricsCustomResource();
|
fairShare = new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource steadyFairShare =
|
private final CustomResourceMetricValue steadyFairShare =
|
||||||
new QueueMetricsCustomResource();
|
new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource minShare =
|
private final CustomResourceMetricValue
|
||||||
new QueueMetricsCustomResource();
|
minShare = new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource maxShare =
|
private final CustomResourceMetricValue
|
||||||
new QueueMetricsCustomResource();
|
maxShare = new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource maxAMShare =
|
private final CustomResourceMetricValue
|
||||||
new QueueMetricsCustomResource();
|
maxAMShare = new CustomResourceMetricValue();
|
||||||
private final QueueMetricsCustomResource amResourceUsage =
|
private final CustomResourceMetricValue amResourceUsage =
|
||||||
new QueueMetricsCustomResource();
|
new CustomResourceMetricValue();
|
||||||
|
|
||||||
public QueueMetricsCustomResource getFairShare() {
|
public CustomResourceMetricValue getFairShare() {
|
||||||
return fairShare;
|
return fairShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ public class FSQueueMetricsForCustomResources {
|
||||||
return fairShare.getValues();
|
return fairShare.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getSteadyFairShare() {
|
public CustomResourceMetricValue getSteadyFairShare() {
|
||||||
return steadyFairShare;
|
return steadyFairShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +64,7 @@ public class FSQueueMetricsForCustomResources {
|
||||||
return steadyFairShare.getValues();
|
return steadyFairShare.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getMinShare() {
|
public CustomResourceMetricValue getMinShare() {
|
||||||
return minShare;
|
return minShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +76,7 @@ public class FSQueueMetricsForCustomResources {
|
||||||
return minShare.getValues();
|
return minShare.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getMaxShare() {
|
public CustomResourceMetricValue getMaxShare() {
|
||||||
return maxShare;
|
return maxShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +88,7 @@ public class FSQueueMetricsForCustomResources {
|
||||||
return maxShare.getValues();
|
return maxShare.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getMaxAMShare() {
|
public CustomResourceMetricValue getMaxAMShare() {
|
||||||
return maxAMShare;
|
return maxAMShare;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +100,7 @@ public class FSQueueMetricsForCustomResources {
|
||||||
return maxAMShare.getValues();
|
return maxAMShare.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getAMResourceUsage() {
|
public CustomResourceMetricValue getAMResourceUsage() {
|
||||||
return amResourceUsage;
|
return amResourceUsage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ import static org.apache.hadoop.metrics2.lib.Interns.info;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
|
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
import org.apache.hadoop.classification.InterfaceAudience.Private;
|
import org.apache.hadoop.classification.InterfaceAudience.Private;
|
||||||
|
@ -43,8 +42,8 @@ import org.apache.hadoop.metrics2.lib.MutableGaugeLong;
|
||||||
import org.apache.hadoop.metrics2.lib.MutableRate;
|
import org.apache.hadoop.metrics2.lib.MutableRate;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
import org.apache.hadoop.yarn.api.records.ApplicationId;
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
import org.apache.hadoop.yarn.api.records.ResourceInformation;
|
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMAppState;
|
||||||
import org.apache.hadoop.yarn.util.resource.ResourceUtils;
|
import org.apache.hadoop.yarn.util.resource.ResourceUtils;
|
||||||
|
@ -533,8 +532,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
availableVCores.set(limit.getVirtualCores());
|
availableVCores.set(limit.getVirtualCores());
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.setAvailable(limit);
|
queueMetricsForCustomResources.setAvailable(limit);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getAvailableValues(),
|
queueMetricsForCustomResources.getAvailableValues(), registry,
|
||||||
AVAILABLE_RESOURCE_METRIC_PREFIX, AVAILABLE_RESOURCE_METRIC_DESC);
|
AVAILABLE_RESOURCE_METRIC_PREFIX, AVAILABLE_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -616,16 +615,6 @@ public class QueueMetrics implements MetricsSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Map<String, Long> initAndGetCustomResources() {
|
|
||||||
Map<String, Long> customResources = new HashMap<String, Long>();
|
|
||||||
ResourceInformation[] resources = ResourceUtils.getResourceTypesArray();
|
|
||||||
|
|
||||||
for (int i = 2; i < resources.length; i++) {
|
|
||||||
ResourceInformation resource = resources[i];
|
|
||||||
customResources.put(resource.getName(), Long.valueOf(0));
|
|
||||||
}
|
|
||||||
return customResources;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void createQueueMetricsForCustomResources() {
|
protected void createQueueMetricsForCustomResources() {
|
||||||
if (ResourceUtils.getNumberOfKnownResourceTypes() > 2) {
|
if (ResourceUtils.getNumberOfKnownResourceTypes() > 2) {
|
||||||
|
@ -635,52 +624,31 @@ public class QueueMetrics implements MetricsSource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Register all custom resources metrics as part of initialization. As and
|
|
||||||
* when this metric object construction happens for any queue, all custom
|
|
||||||
* resource metrics value would be initialized with '0' like any other
|
|
||||||
* mandatory resources metrics
|
|
||||||
*/
|
|
||||||
protected void registerCustomResources() {
|
protected void registerCustomResources() {
|
||||||
Map<String, Long> customResources = initAndGetCustomResources();
|
Map<String, Long> customResources =
|
||||||
registerCustomResources(customResources, ALLOCATED_RESOURCE_METRIC_PREFIX,
|
queueMetricsForCustomResources.initAndGetCustomResources();
|
||||||
ALLOCATED_RESOURCE_METRIC_DESC);
|
queueMetricsForCustomResources
|
||||||
registerCustomResources(customResources, AVAILABLE_RESOURCE_METRIC_PREFIX,
|
.registerCustomResources(customResources, this.registry);
|
||||||
AVAILABLE_RESOURCE_METRIC_DESC);
|
queueMetricsForCustomResources
|
||||||
registerCustomResources(customResources, PENDING_RESOURCE_METRIC_PREFIX,
|
.registerCustomResources(customResources, this.registry,
|
||||||
PENDING_RESOURCE_METRIC_DESC);
|
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
||||||
registerCustomResources(customResources, RESERVED_RESOURCE_METRIC_PREFIX,
|
queueMetricsForCustomResources
|
||||||
RESERVED_RESOURCE_METRIC_DESC);
|
.registerCustomResources(customResources, this.registry,
|
||||||
registerCustomResources(customResources,
|
RESERVED_RESOURCE_METRIC_PREFIX, RESERVED_RESOURCE_METRIC_DESC);
|
||||||
|
queueMetricsForCustomResources
|
||||||
|
.registerCustomResources(customResources, this.registry,
|
||||||
AGGREGATE_PREEMPTED_SECONDS_METRIC_PREFIX,
|
AGGREGATE_PREEMPTED_SECONDS_METRIC_PREFIX,
|
||||||
AGGREGATE_PREEMPTED_SECONDS_METRIC_DESC);
|
AGGREGATE_PREEMPTED_SECONDS_METRIC_DESC);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void registerCustomResources(Map<String, Long> customResources,
|
|
||||||
String metricPrefix, String metricDesc) {
|
|
||||||
for (Entry<String, Long> entry : customResources.entrySet()) {
|
|
||||||
String resourceName = entry.getKey();
|
|
||||||
Long resourceValue = entry.getValue();
|
|
||||||
|
|
||||||
MutableGaugeLong resourceMetric =
|
|
||||||
(MutableGaugeLong) this.registry.get(metricPrefix + resourceName);
|
|
||||||
|
|
||||||
if (resourceMetric == null) {
|
|
||||||
resourceMetric =
|
|
||||||
this.registry.newGauge(metricPrefix + resourceName,
|
|
||||||
metricDesc.replace("NAME", resourceName), 0L);
|
|
||||||
}
|
|
||||||
resourceMetric.set(resourceValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void incrementPendingResources(int containers, Resource res) {
|
private void incrementPendingResources(int containers, Resource res) {
|
||||||
pendingContainers.incr(containers);
|
pendingContainers.incr(containers);
|
||||||
pendingMB.incr(res.getMemorySize() * containers);
|
pendingMB.incr(res.getMemorySize() * containers);
|
||||||
pendingVCores.incr(res.getVirtualCores() * containers);
|
pendingVCores.incr(res.getVirtualCores() * containers);
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.increasePending(res, containers);
|
queueMetricsForCustomResources.increasePending(res, containers);
|
||||||
registerCustomResources(queueMetricsForCustomResources.getPendingValues(),
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
|
queueMetricsForCustomResources.getPendingValues(), this.registry,
|
||||||
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -722,7 +690,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
pendingVCores.decr(res.getVirtualCores() * containers);
|
pendingVCores.decr(res.getVirtualCores() * containers);
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.decreasePending(res, containers);
|
queueMetricsForCustomResources.decreasePending(res, containers);
|
||||||
registerCustomResources(queueMetricsForCustomResources.getPendingValues(),
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
|
queueMetricsForCustomResources.getPendingValues(), this.registry,
|
||||||
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -793,8 +762,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
allocatedVCores.incr(res.getVirtualCores() * containers);
|
allocatedVCores.incr(res.getVirtualCores() * containers);
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.increaseAllocated(res, containers);
|
queueMetricsForCustomResources.increaseAllocated(res, containers);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getAllocatedValues(),
|
queueMetricsForCustomResources.getAllocatedValues(), this.registry,
|
||||||
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
if (decrPending) {
|
if (decrPending) {
|
||||||
|
@ -813,8 +782,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
allocatedVCores.incr(res.getVirtualCores());
|
allocatedVCores.incr(res.getVirtualCores());
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.increaseAllocated(res);
|
queueMetricsForCustomResources.increaseAllocated(res);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getAllocatedValues(),
|
queueMetricsForCustomResources.getAllocatedValues(), this.registry,
|
||||||
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -822,7 +791,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
pendingVCores.decr(res.getVirtualCores());
|
pendingVCores.decr(res.getVirtualCores());
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.decreasePending(res);
|
queueMetricsForCustomResources.decreasePending(res);
|
||||||
registerCustomResources(queueMetricsForCustomResources.getPendingValues(),
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
|
queueMetricsForCustomResources.getPendingValues(), this.registry,
|
||||||
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
PENDING_RESOURCE_METRIC_PREFIX, PENDING_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -879,8 +849,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
allocatedVCores.decr(res.getVirtualCores() * containers);
|
allocatedVCores.decr(res.getVirtualCores() * containers);
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.decreaseAllocated(res, containers);
|
queueMetricsForCustomResources.decreaseAllocated(res, containers);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getAllocatedValues(),
|
queueMetricsForCustomResources.getAllocatedValues(), this.registry,
|
||||||
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
ALLOCATED_RESOURCE_METRIC_PREFIX, ALLOCATED_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -928,9 +898,9 @@ public class QueueMetrics implements MetricsSource {
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources
|
queueMetricsForCustomResources
|
||||||
.increaseAggregatedPreemptedSeconds(res, seconds);
|
.increaseAggregatedPreemptedSeconds(res, seconds);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getAggregatePreemptedSeconds()
|
queueMetricsForCustomResources.getAggregatePreemptedSeconds()
|
||||||
.getValues(),
|
.getValues(), this.registry,
|
||||||
AGGREGATE_PREEMPTED_SECONDS_METRIC_PREFIX,
|
AGGREGATE_PREEMPTED_SECONDS_METRIC_PREFIX,
|
||||||
AGGREGATE_PREEMPTED_SECONDS_METRIC_DESC);
|
AGGREGATE_PREEMPTED_SECONDS_METRIC_DESC);
|
||||||
}
|
}
|
||||||
|
@ -971,8 +941,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
reservedVCores.incr(res.getVirtualCores());
|
reservedVCores.incr(res.getVirtualCores());
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.increaseReserved(res);
|
queueMetricsForCustomResources.increaseReserved(res);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getReservedValues(),
|
queueMetricsForCustomResources.getReservedValues(), this.registry,
|
||||||
RESERVED_RESOURCE_METRIC_PREFIX, RESERVED_RESOURCE_METRIC_DESC);
|
RESERVED_RESOURCE_METRIC_PREFIX, RESERVED_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1010,8 +980,8 @@ public class QueueMetrics implements MetricsSource {
|
||||||
reservedVCores.decr(res.getVirtualCores());
|
reservedVCores.decr(res.getVirtualCores());
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
queueMetricsForCustomResources.decreaseReserved(res);
|
queueMetricsForCustomResources.decreaseReserved(res);
|
||||||
registerCustomResources(
|
queueMetricsForCustomResources.registerCustomResources(
|
||||||
queueMetricsForCustomResources.getReservedValues(),
|
queueMetricsForCustomResources.getReservedValues(), this.registry,
|
||||||
RESERVED_RESOURCE_METRIC_PREFIX, RESERVED_RESOURCE_METRIC_DESC);
|
RESERVED_RESOURCE_METRIC_PREFIX, RESERVED_RESOURCE_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1114,7 +1084,7 @@ public class QueueMetrics implements MetricsSource {
|
||||||
* @return QueueMetricsCustomResource
|
* @return QueueMetricsCustomResource
|
||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public QueueMetricsCustomResource getAggregatedPreemptedSecondsResources() {
|
public CustomResourceMetricValue getAggregatedPreemptedSecondsResources() {
|
||||||
return queueMetricsForCustomResources.getAggregatePreemptedSeconds();
|
return queueMetricsForCustomResources.getAggregatePreemptedSeconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1232,7 +1202,7 @@ public class QueueMetrics implements MetricsSource {
|
||||||
public void fillInValuesFromAvailableResources(Resource fromResource,
|
public void fillInValuesFromAvailableResources(Resource fromResource,
|
||||||
Resource targetResource) {
|
Resource targetResource) {
|
||||||
if (queueMetricsForCustomResources != null) {
|
if (queueMetricsForCustomResources != null) {
|
||||||
QueueMetricsCustomResource availableResources =
|
CustomResourceMetricValue availableResources =
|
||||||
queueMetricsForCustomResources.getAvailable();
|
queueMetricsForCustomResources.getAvailable();
|
||||||
|
|
||||||
// We expect all custom resources contained in availableResources,
|
// We expect all custom resources contained in availableResources,
|
||||||
|
@ -1257,7 +1227,7 @@ public class QueueMetrics implements MetricsSource {
|
||||||
return this.queueMetricsForCustomResources;
|
return this.queueMetricsForCustomResources;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setQueueMetricsForCustomResources(
|
protected void setQueueMetricsForCustomResources(
|
||||||
QueueMetricsForCustomResources metrics) {
|
QueueMetricsForCustomResources metrics) {
|
||||||
this.queueMetricsForCustomResources = metrics;
|
this.queueMetricsForCustomResources = metrics;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*
|
/**
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
* or more contributor license agreements. See the NOTICE file
|
* or more contributor license agreements. See the NOTICE file
|
||||||
* distributed with this work for additional information
|
* distributed with this work for additional information
|
||||||
|
@ -6,7 +6,9 @@
|
||||||
* to you under the Apache License, Version 2.0 (the
|
* to you under the Apache License, Version 2.0 (the
|
||||||
* "License"); you may not use this file except in compliance
|
* "License"); you may not use this file except in compliance
|
||||||
* with the License. You may obtain a copy of the License at
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@ -17,28 +19,20 @@
|
||||||
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
package org.apache.hadoop.yarn.server.resourcemanager.scheduler;
|
||||||
|
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetrics;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
public class QueueMetricsForCustomResources extends CustomResourceMetrics {
|
||||||
* This class is a main entry-point for any kind of metrics for
|
private final CustomResourceMetricValue aggregatePreemptedSeconds =
|
||||||
* custom resources.
|
new CustomResourceMetricValue();
|
||||||
* It provides increase and decrease methods for all types of metrics.
|
private final CustomResourceMetricValue aggregatePreempted =
|
||||||
*/
|
new CustomResourceMetricValue();
|
||||||
public class QueueMetricsForCustomResources {
|
private final CustomResourceMetricValue pending =
|
||||||
private final QueueMetricsCustomResource aggregatePreemptedSeconds =
|
new CustomResourceMetricValue();
|
||||||
new QueueMetricsCustomResource();
|
private final CustomResourceMetricValue reserved =
|
||||||
private final QueueMetricsCustomResource aggregatePreempted =
|
new CustomResourceMetricValue();
|
||||||
new QueueMetricsCustomResource();
|
|
||||||
private final QueueMetricsCustomResource allocated =
|
|
||||||
new QueueMetricsCustomResource();
|
|
||||||
private final QueueMetricsCustomResource available =
|
|
||||||
new QueueMetricsCustomResource();
|
|
||||||
private final QueueMetricsCustomResource pending =
|
|
||||||
new QueueMetricsCustomResource();
|
|
||||||
|
|
||||||
private final QueueMetricsCustomResource reserved =
|
|
||||||
new QueueMetricsCustomResource();
|
|
||||||
|
|
||||||
public void increaseReserved(Resource res) {
|
public void increaseReserved(Resource res) {
|
||||||
reserved.increase(res);
|
reserved.increase(res);
|
||||||
|
@ -48,10 +42,6 @@ public class QueueMetricsForCustomResources {
|
||||||
reserved.decrease(res);
|
reserved.decrease(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAvailable(Resource res) {
|
|
||||||
available.set(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void increasePending(Resource res, int containers) {
|
public void increasePending(Resource res, int containers) {
|
||||||
pending.increaseWithMultiplier(res, containers);
|
pending.increaseWithMultiplier(res, containers);
|
||||||
}
|
}
|
||||||
|
@ -64,20 +54,12 @@ public class QueueMetricsForCustomResources {
|
||||||
pending.decreaseWithMultiplier(res, containers);
|
pending.decreaseWithMultiplier(res, containers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void increaseAllocated(Resource res) {
|
public Map<String, Long> getPendingValues() {
|
||||||
allocated.increase(res);
|
return pending.getValues();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void increaseAllocated(Resource res, int containers) {
|
public Map<String, Long> getReservedValues() {
|
||||||
allocated.increaseWithMultiplier(res, containers);
|
return reserved.getValues();
|
||||||
}
|
|
||||||
|
|
||||||
public void decreaseAllocated(Resource res) {
|
|
||||||
allocated.decrease(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void decreaseAllocated(Resource res, int containers) {
|
|
||||||
allocated.decreaseWithMultiplier(res, containers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void increaseAggregatedPreemptedSeconds(Resource res, long seconds) {
|
public void increaseAggregatedPreemptedSeconds(Resource res, long seconds) {
|
||||||
|
@ -88,27 +70,7 @@ public class QueueMetricsForCustomResources {
|
||||||
aggregatePreempted.increase(res);
|
aggregatePreempted.increase(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Long> getAllocatedValues() {
|
CustomResourceMetricValue getAggregatePreemptedSeconds() {
|
||||||
return allocated.getValues();
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Long> getAvailableValues() {
|
|
||||||
return available.getValues();
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Long> getPendingValues() {
|
|
||||||
return pending.getValues();
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, Long> getReservedValues() {
|
|
||||||
return reserved.getValues();
|
|
||||||
}
|
|
||||||
|
|
||||||
QueueMetricsCustomResource getAggregatePreemptedSeconds() {
|
|
||||||
return aggregatePreemptedSeconds;
|
return aggregatePreemptedSeconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
public QueueMetricsCustomResource getAvailable() {
|
|
||||||
return available;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,6 +78,8 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
private static final String MAX_CAPACITY_METRIC_DESC =
|
private static final String MAX_CAPACITY_METRIC_DESC =
|
||||||
"MaxCapacity of NAME";
|
"MaxCapacity of NAME";
|
||||||
|
|
||||||
|
private CSQueueMetricsForCustomResources csQueueMetricsForCustomResources;
|
||||||
|
|
||||||
CSQueueMetrics(MetricsSystem ms, String queueName, Queue parent,
|
CSQueueMetrics(MetricsSystem ms, String queueName, Queue parent,
|
||||||
boolean enableUserMetrics, Configuration conf) {
|
boolean enableUserMetrics, Configuration conf) {
|
||||||
super(ms, queueName, parent, enableUserMetrics, conf);
|
super(ms, queueName, parent, enableUserMetrics, conf);
|
||||||
|
@ -90,11 +92,14 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
* mandatory resources metrics
|
* mandatory resources metrics
|
||||||
*/
|
*/
|
||||||
protected void registerCustomResources() {
|
protected void registerCustomResources() {
|
||||||
Map<String, Long> customResources = initAndGetCustomResources();
|
Map<String, Long> customResources =
|
||||||
registerCustomResources(customResources, GUARANTEED_CAPACITY_METRIC_PREFIX,
|
csQueueMetricsForCustomResources.initAndGetCustomResources();
|
||||||
GUARANTEED_CAPACITY_METRIC_DESC);
|
csQueueMetricsForCustomResources
|
||||||
registerCustomResources(customResources, MAX_CAPACITY_METRIC_PREFIX,
|
.registerCustomResources(customResources, this.registry,
|
||||||
MAX_CAPACITY_METRIC_DESC);
|
GUARANTEED_CAPACITY_METRIC_PREFIX, GUARANTEED_CAPACITY_METRIC_DESC);
|
||||||
|
csQueueMetricsForCustomResources
|
||||||
|
.registerCustomResources(customResources, this.registry,
|
||||||
|
MAX_CAPACITY_METRIC_PREFIX, MAX_CAPACITY_METRIC_DESC);
|
||||||
super.registerCustomResources();
|
super.registerCustomResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,12 +189,10 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
||||||
guaranteedMB.set(res.getMemorySize());
|
guaranteedMB.set(res.getMemorySize());
|
||||||
guaranteedVCores.set(res.getVirtualCores());
|
guaranteedVCores.set(res.getVirtualCores());
|
||||||
if (getQueueMetricsForCustomResources() != null) {
|
if (csQueueMetricsForCustomResources != null) {
|
||||||
((CSQueueMetricsForCustomResources) getQueueMetricsForCustomResources())
|
csQueueMetricsForCustomResources.setGuaranteedCapacity(res);
|
||||||
.setGuaranteedCapacity(res);
|
csQueueMetricsForCustomResources.registerCustomResources(
|
||||||
registerCustomResources(
|
csQueueMetricsForCustomResources.getGuaranteedCapacity(), registry,
|
||||||
((CSQueueMetricsForCustomResources)
|
|
||||||
getQueueMetricsForCustomResources()).getGuaranteedCapacity(),
|
|
||||||
GUARANTEED_CAPACITY_METRIC_PREFIX, GUARANTEED_CAPACITY_METRIC_DESC);
|
GUARANTEED_CAPACITY_METRIC_PREFIX, GUARANTEED_CAPACITY_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,12 +210,10 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
if (partition == null || partition.equals(RMNodeLabelsManager.NO_LABEL)) {
|
||||||
maxCapacityMB.set(res.getMemorySize());
|
maxCapacityMB.set(res.getMemorySize());
|
||||||
maxCapacityVCores.set(res.getVirtualCores());
|
maxCapacityVCores.set(res.getVirtualCores());
|
||||||
if (getQueueMetricsForCustomResources() != null) {
|
if (csQueueMetricsForCustomResources != null) {
|
||||||
((CSQueueMetricsForCustomResources) getQueueMetricsForCustomResources())
|
csQueueMetricsForCustomResources.setMaxCapacity(res);
|
||||||
.setMaxCapacity(res);
|
csQueueMetricsForCustomResources.registerCustomResources(
|
||||||
registerCustomResources(
|
csQueueMetricsForCustomResources.getMaxCapacity(), registry,
|
||||||
((CSQueueMetricsForCustomResources)
|
|
||||||
getQueueMetricsForCustomResources()).getMaxCapacity(),
|
|
||||||
MAX_CAPACITY_METRIC_PREFIX, MAX_CAPACITY_METRIC_DESC);
|
MAX_CAPACITY_METRIC_PREFIX, MAX_CAPACITY_METRIC_DESC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -221,7 +222,9 @@ public class CSQueueMetrics extends QueueMetrics {
|
||||||
@Override
|
@Override
|
||||||
protected void createQueueMetricsForCustomResources() {
|
protected void createQueueMetricsForCustomResources() {
|
||||||
if (ResourceUtils.getNumberOfKnownResourceTypes() > 2) {
|
if (ResourceUtils.getNumberOfKnownResourceTypes() > 2) {
|
||||||
setQueueMetricsForCustomResources(new CSQueueMetricsForCustomResources());
|
this.csQueueMetricsForCustomResources =
|
||||||
|
new CSQueueMetricsForCustomResources();
|
||||||
|
setQueueMetricsForCustomResources(csQueueMetricsForCustomResources);
|
||||||
registerCustomResources();
|
registerCustomResources();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.apache.hadoop.metrics2.lib.MutableCounterLong;
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
import org.apache.hadoop.yarn.api.records.ResourceInformation;
|
import org.apache.hadoop.yarn.api.records.ResourceInformation;
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
import org.apache.hadoop.yarn.resourcetypes.ResourceTypesTestHelper;
|
import org.apache.hadoop.yarn.resourcetypes.ResourceTypesTestHelper;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
import org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager;
|
||||||
|
|
||||||
|
@ -293,7 +294,7 @@ public class TestQueueMetricsForCustomResources {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Resource convertPreemptedSecondsToResource(QueueMetrics qm) {
|
private Resource convertPreemptedSecondsToResource(QueueMetrics qm) {
|
||||||
QueueMetricsCustomResource customValues = qm
|
CustomResourceMetricValue customValues = qm
|
||||||
.getAggregatedPreemptedSecondsResources();
|
.getAggregatedPreemptedSecondsResources();
|
||||||
MutableCounterLong vcoreSeconds = qm
|
MutableCounterLong vcoreSeconds = qm
|
||||||
.getAggregateVcoreSecondsPreempted();
|
.getAggregateVcoreSecondsPreempted();
|
||||||
|
|
|
@ -38,11 +38,11 @@ import org.apache.hadoop.util.concurrent.HadoopExecutors;
|
||||||
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
|
||||||
import org.apache.hadoop.yarn.api.records.Resource;
|
import org.apache.hadoop.yarn.api.records.Resource;
|
||||||
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
import org.apache.hadoop.yarn.conf.YarnConfiguration;
|
||||||
|
import org.apache.hadoop.yarn.metrics.CustomResourceMetricValue;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
|
import org.apache.hadoop.yarn.server.resourcemanager.MockNodes;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
|
import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
|
import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
|
import org.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNode;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.QueueMetricsCustomResource;
|
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.NodeAddedSchedulerEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.NodeAddedSchedulerEvent;
|
||||||
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.NodeUpdateSchedulerEvent;
|
import org.apache.hadoop.yarn.server.resourcemanager.scheduler.event.NodeUpdateSchedulerEvent;
|
||||||
|
@ -344,7 +344,7 @@ public class TestFSLeafQueue extends FairSchedulerTestBase {
|
||||||
|
|
||||||
private Map<String, Long> verifyQueueMetricsForCustomResources(
|
private Map<String, Long> verifyQueueMetricsForCustomResources(
|
||||||
FSLeafQueue schedulable) {
|
FSLeafQueue schedulable) {
|
||||||
QueueMetricsCustomResource maxAMShareCustomResources =
|
CustomResourceMetricValue maxAMShareCustomResources =
|
||||||
schedulable.getMetrics().getCustomResources().getMaxAMShare();
|
schedulable.getMetrics().getCustomResources().getMaxAMShare();
|
||||||
Map<String, Long> customResourceValues = maxAMShareCustomResources
|
Map<String, Long> customResourceValues = maxAMShareCustomResources
|
||||||
.getValues();
|
.getValues();
|
||||||
|
|
Loading…
Reference in New Issue