hadoop ResourceUtilization 源码

  • 2022-10-20
  • 浏览 (196)

haddop ResourceUtilization 代码

文件路径:/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/api/records/ResourceUtilization.java

/**
 * 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.api.records;

import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.util.Records;

import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * <code>ResourceUtilization</code> models the utilization of a set of computer
 * resources in the cluster.
 * </p>
 */
@Public
@Unstable
public abstract class ResourceUtilization implements
    Comparable<ResourceUtilization> {

  private Map<String, Float> customResources
      = new HashMap<>();

  @Public
  @Unstable
  public static ResourceUtilization newInstance(int pmem, int vmem,
      float cpu) {
    return newInstance(pmem, vmem, cpu, null);
  }

  @Public
  @Unstable
  public static ResourceUtilization newInstance(int pmem, int vmem,
      float cpu, Map<String, Float> customResources) {
    ResourceUtilization utilization =
        Records.newRecord(ResourceUtilization.class);
    utilization.setPhysicalMemory(pmem);
    utilization.setVirtualMemory(vmem);
    utilization.setCPU(cpu);
    utilization.setCustomResources(customResources);
    return utilization;
  }

  @Public
  @Unstable
  public static ResourceUtilization newInstance(
      ResourceUtilization resourceUtil) {
    return newInstance(resourceUtil.getPhysicalMemory(),
        resourceUtil.getVirtualMemory(),
        resourceUtil.getCPU(),
        resourceUtil.getCustomResources());
  }

  /**
   * Get used <em>virtual memory</em>.
   *
   * @return <em>virtual memory</em> in MB
   */
  @Public
  @Unstable
  public abstract int getVirtualMemory();

  /**
   * Set used <em>virtual memory</em>.
   *
   * @param vmem <em>virtual memory</em> in MB
   */
  @Public
  @Unstable
  public abstract void setVirtualMemory(int vmem);

  /**
   * Get <em>physical memory</em>.
   *
   * @return <em>physical memory</em> in MB
   */
  @Public
  @Unstable
  public abstract int getPhysicalMemory();

  /**
   * Set <em>physical memory</em>.
   *
   * @param pmem <em>physical memory</em> in MB
   */
  @Public
  @Unstable
  public abstract void setPhysicalMemory(int pmem);

  /**
   * Get <em>CPU</em> utilization (The amount of vcores used).
   *
   * @return <em>CPU utilization</em>
   */
  @Public
  @Unstable
  public abstract float getCPU();

  /**
   * Set <em>CPU</em> utilization (The amount of vcores used).
   *
   * @param cpu <em>CPU utilization</em>
   */
  @Public
  @Unstable
  public abstract void setCPU(float cpu);

  /**
   * Get <em>custom resource</em> utilization
   * (The amount of custom resource used).
   *
   * @param resourceName <em>resourceName of custom resource</em>
   * @return <em>resourceName utilization</em>
   */
  @Public
  @Unstable
  public float getCustomResource(String resourceName) {
    if (customResources != null && resourceName != null) {
      return customResources.get(resourceName);
    }
    return 0f;
  }

  @Public
  @Unstable
  public Map<String, Float> getCustomResources() {
    return customResources;
  }

  @Public
  @Unstable
  public void setCustomResources(Map<String, Float> customResources) {
    if (customResources != null) {
      this.customResources = customResources;
    }
  }

  /**
   * Set <em>custom resource</em> utilization
   * (The amount of custom resource used).
   * @param resourceName <em>resourceName</em>
   * @param utilization <em>utilization of custom resource</em>
   *
   */
  @Public
  @Unstable
  public void setCustomResource(String resourceName, float utilization) {
    if (resourceName != null && !resourceName.isEmpty()) {
      customResources.put(resourceName, utilization);
    }
  }

  @Override
  public int hashCode() {
    final int prime = 263167;
    int result = 3571;
    result = prime * result + getVirtualMemory();
    result = prime * result + getPhysicalMemory();
    result = 31 * result + Float.valueOf(getCPU()).hashCode();
    if (customResources != null && !customResources.isEmpty()) {
      for (Map.Entry<String, Float> entry : customResources.entrySet()) {
        result = 31 * result +
            customResources.get(entry.getKey()).hashCode();
      }
    }
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (!(obj instanceof ResourceUtilization)) {
      return false;
    }
    ResourceUtilization other = (ResourceUtilization) obj;
    if (getVirtualMemory() != other.getVirtualMemory()
        || getPhysicalMemory() != other.getPhysicalMemory()
        || getCPU() != other.getCPU()
        || !customResources.equals(other.customResources)) {
      return false;
    }
    return true;
  }

  @Override
  public String toString() {
    StringBuilder utilizationString = new StringBuilder();
    utilizationString.append(
        "<pmem:" + getPhysicalMemory() + ", vmem:" + getVirtualMemory()
        + ", vCores:" + getCPU());
    if (getCustomResources() != null && !getCustomResources().isEmpty()) {
      for (Map.Entry<String, Float> entry : getCustomResources().entrySet()) {
        utilizationString.append(", "
            + entry.getKey() + ":" + entry.getValue());
      }
    }

    utilizationString.append(">");
    return utilizationString.toString();
  }

  /**
   * Add utilization to the current one.
   * @param pmem Physical memory used to add.
   * @param vmem Virtual memory used to add.
   * @param cpu CPU utilization to add.
   */
  @Public
  @Unstable
  public void addTo(int pmem, int vmem, float cpu) {
    addTo(pmem, vmem, cpu, null, 0f);
  }

  /**
   * Add utilization to the current one.
   * @param pmem Physical memory used to add.
   * @param vmem Virtual memory used to add.
   * @param cpu CPU utilization to add.
   * @param resourceName of custom resource to add.
   * @param utilization of custom resource to add.
   */
  @Public
  @Unstable
  public void addTo(int pmem, int vmem, float cpu,
      String resourceName, float utilization) {
    this.setPhysicalMemory(this.getPhysicalMemory() + pmem);
    this.setVirtualMemory(this.getVirtualMemory() + vmem);
    this.setCPU(this.getCPU() + cpu);
    if (resourceName != null) {
      this.setCustomResource(resourceName,
          getCustomResource(resourceName) + utilization);
    }
  }

  /**
   * Subtract utilization from the current one.
   * @param pmem Physical memory to be subtracted.
   * @param vmem Virtual memory to be subtracted.
   * @param cpu CPU utilization to be subtracted.
   */
  @Public
  @Unstable
  public void subtractFrom(int pmem, int vmem, float cpu) {
    subtractFrom(pmem, vmem, cpu, null, 0f);
  }

  /**
   * Subtract utilization from the current one.
   * @param pmem Physical memory to be subtracted.
   * @param vmem Virtual memory to be subtracted.
   * @param cpu CPU utilization to be subtracted.
   * @param resourceName of custom resource to be subtracted.
   * @param utilization of custom resource to be subtracted.
   */
  @Public
  @Unstable
  public void subtractFrom(int pmem, int vmem, float cpu,
      String resourceName, float utilization) {
    this.setPhysicalMemory(this.getPhysicalMemory() - pmem);
    this.setVirtualMemory(this.getVirtualMemory() - vmem);
    this.setCPU(this.getCPU() - cpu);
    if (resourceName != null) {
      this.setCustomResource(resourceName,
          getCustomResource(resourceName) - utilization);
    }
  }
}

相关信息

hadoop 源码目录

相关文章

hadoop AMCommand 源码

hadoop AllocationTagNamespaceType 源码

hadoop ApplicationAccessType 源码

hadoop ApplicationAttemptId 源码

hadoop ApplicationAttemptReport 源码

hadoop ApplicationId 源码

hadoop ApplicationReport 源码

hadoop ApplicationResourceUsageReport 源码

hadoop ApplicationSubmissionContext 源码

hadoop ApplicationTimeout 源码

0  赞