/** * 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.server.resourcemanager.webapp.dao; import java.util.ArrayList; import java.util.Collection; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlTransient; import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSLeafQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FSQueue; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler; import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.QueueManager; import org.apache.hadoop.yarn.util.resource.Resources; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @XmlSeeAlso({FairSchedulerLeafQueueInfo.class}) public class FairSchedulerQueueInfo { private int maxApps; @XmlTransient private float fractionMemUsed; @XmlTransient private float fractionMemFairShare; @XmlTransient private float fractionMemMinShare; @XmlTransient private float fractionMemMaxShare; private ResourceInfo minResources; private ResourceInfo maxResources; private ResourceInfo usedResources; private ResourceInfo fairResources; private ResourceInfo clusterResources; private String queueName; private String schedulingPolicy; private Collection<FairSchedulerQueueInfo> childQueues; public FairSchedulerQueueInfo() { } public FairSchedulerQueueInfo(FSQueue queue, FairScheduler scheduler) { QueueManager manager = scheduler.getQueueManager(); queueName = queue.getName(); schedulingPolicy = queue.getPolicy().getName(); clusterResources = new ResourceInfo(scheduler.getClusterCapacity()); usedResources = new ResourceInfo(queue.getResourceUsage()); fractionMemUsed = (float)usedResources.getMemory() / clusterResources.getMemory(); fairResources = new ResourceInfo(queue.getFairShare()); minResources = new ResourceInfo(queue.getMinShare()); maxResources = new ResourceInfo(queue.getMaxShare()); maxResources = new ResourceInfo( Resources.componentwiseMin(queue.getMaxShare(), scheduler.getClusterCapacity())); fractionMemFairShare = (float)fairResources.getMemory() / clusterResources.getMemory(); fractionMemMinShare = (float)minResources.getMemory() / clusterResources.getMemory(); fractionMemMaxShare = (float)maxResources.getMemory() / clusterResources.getMemory(); maxApps = manager.getQueueMaxApps(queueName); Collection<FSQueue> children = queue.getChildQueues(); childQueues = new ArrayList<FairSchedulerQueueInfo>(); for (FSQueue child : children) { if (child instanceof FSLeafQueue) { childQueues.add(new FairSchedulerLeafQueueInfo((FSLeafQueue)child, scheduler)); } else { childQueues.add(new FairSchedulerQueueInfo(child, scheduler)); } } } /** * Returns the fair share as a fraction of the entire cluster capacity. */ public float getFairShareMemoryFraction() { return fractionMemFairShare; } /** * Returns the fair share of this queue in megabytes. */ public ResourceInfo getFairShare() { return fairResources; } public ResourceInfo getMinResources() { return minResources; } public ResourceInfo getMaxResources() { return maxResources; } public int getMaxApplications() { return maxApps; } public String getQueueName() { return queueName; } public ResourceInfo getUsedResources() { return usedResources; } /** * Returns the queue's min share in as a fraction of the entire * cluster capacity. */ public float getMinShareMemoryFraction() { return fractionMemMinShare; } /** * Returns the memory used by this queue as a fraction of the entire * cluster capacity. */ public float getUsedMemoryFraction() { return fractionMemUsed; } /** * Returns the capacity of this queue as a fraction of the entire cluster * capacity. */ public float getMaxResourcesFraction() { return fractionMemMaxShare; } /** * Returns the name of the scheduling policy used by this queue. */ public String getSchedulingPolicy() { return schedulingPolicy; } public Collection<FairSchedulerQueueInfo> getChildQueues() { return childQueues; } }