1 /** 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 package org.apache.hadoop.yarn.util.resource; 19 20 import org.apache.hadoop.classification.InterfaceAudience.Private; 21 import org.apache.hadoop.classification.InterfaceStability.Unstable; 22 import org.apache.hadoop.yarn.api.records.Resource; 23 24 @Private 25 @Unstable 26 public class DefaultResourceCalculator extends ResourceCalculator { 27 28 @Override compare(Resource unused, Resource lhs, Resource rhs)29 public int compare(Resource unused, Resource lhs, Resource rhs) { 30 // Only consider memory 31 return lhs.getMemory() - rhs.getMemory(); 32 } 33 34 @Override computeAvailableContainers(Resource available, Resource required)35 public int computeAvailableContainers(Resource available, Resource required) { 36 // Only consider memory 37 return available.getMemory() / required.getMemory(); 38 } 39 40 @Override divide(Resource unused, Resource numerator, Resource denominator)41 public float divide(Resource unused, 42 Resource numerator, Resource denominator) { 43 return ratio(numerator, denominator); 44 } 45 isInvalidDivisor(Resource r)46 public boolean isInvalidDivisor(Resource r) { 47 if (r.getMemory() == 0.0f) { 48 return true; 49 } 50 return false; 51 } 52 53 @Override ratio(Resource a, Resource b)54 public float ratio(Resource a, Resource b) { 55 return (float)a.getMemory() / b.getMemory(); 56 } 57 58 @Override divideAndCeil(Resource numerator, int denominator)59 public Resource divideAndCeil(Resource numerator, int denominator) { 60 return Resources.createResource( 61 divideAndCeil(numerator.getMemory(), denominator)); 62 } 63 64 @Override normalize(Resource r, Resource minimumResource, Resource maximumResource, Resource stepFactor)65 public Resource normalize(Resource r, Resource minimumResource, 66 Resource maximumResource, Resource stepFactor) { 67 int normalizedMemory = Math.min( 68 roundUp( 69 Math.max(r.getMemory(), minimumResource.getMemory()), 70 stepFactor.getMemory()), 71 maximumResource.getMemory()); 72 return Resources.createResource(normalizedMemory); 73 } 74 75 @Override normalize(Resource r, Resource minimumResource, Resource maximumResource)76 public Resource normalize(Resource r, Resource minimumResource, 77 Resource maximumResource) { 78 return normalize(r, minimumResource, maximumResource, minimumResource); 79 } 80 81 @Override roundUp(Resource r, Resource stepFactor)82 public Resource roundUp(Resource r, Resource stepFactor) { 83 return Resources.createResource( 84 roundUp(r.getMemory(), stepFactor.getMemory()) 85 ); 86 } 87 88 @Override roundDown(Resource r, Resource stepFactor)89 public Resource roundDown(Resource r, Resource stepFactor) { 90 return Resources.createResource( 91 roundDown(r.getMemory(), stepFactor.getMemory())); 92 } 93 94 @Override multiplyAndNormalizeUp(Resource r, double by, Resource stepFactor)95 public Resource multiplyAndNormalizeUp(Resource r, double by, 96 Resource stepFactor) { 97 return Resources.createResource( 98 roundUp((int)(r.getMemory() * by + 0.5), stepFactor.getMemory()) 99 ); 100 } 101 102 @Override multiplyAndNormalizeDown(Resource r, double by, Resource stepFactor)103 public Resource multiplyAndNormalizeDown(Resource r, double by, 104 Resource stepFactor) { 105 return Resources.createResource( 106 roundDown( 107 (int)(r.getMemory() * by), 108 stepFactor.getMemory() 109 ) 110 ); 111 } 112 113 } 114