hadoop TaskContainerDefinition 源码

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

haddop TaskContainerDefinition 代码

文件路径:/hadoop-tools/hadoop-sls/src/main/java/org/apache/hadoop/yarn/sls/TaskContainerDefinition.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.sls;

import org.apache.hadoop.yarn.api.records.ExecutionType;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.exceptions.YarnException;
import java.util.Map;

import static org.apache.hadoop.yarn.sls.AMDefinitionRumen.DEFAULT_MAPPER_PRIORITY;

public class TaskContainerDefinition {
  private long duration;
  private Resource resource;
  private int priority;
  private String type;
  private int count;
  private ExecutionType executionType;
  private long allocationId = -1;
  private long requestDelay = 0;
  private String hostname;

  public long getDuration() {
    return duration;
  }

  public Resource getResource() {
    return resource;
  }

  public int getPriority() {
    return priority;
  }

  public String getType() {
    return type;
  }

  public int getCount() {
    return count;
  }

  public ExecutionType getExecutionType() {
    return executionType;
  }

  public long getAllocationId() {
    return allocationId;
  }

  public long getRequestDelay() {
    return requestDelay;
  }

  public String getHostname() {
    return hostname;
  }

  public static final class Builder {
    private long duration = -1;
    private long durationLegacy = -1;
    private long taskStart = -1;
    private long taskFinish = -1;
    private Resource resource;
    private int priority = DEFAULT_MAPPER_PRIORITY;
    private String type = "map";
    private int count = 1;
    private ExecutionType executionType = ExecutionType.GUARANTEED;
    private long allocationId = -1;
    private long requestDelay = 0;
    private String hostname;

    public static Builder create() {
      return new Builder();
    }

    public Builder withDuration(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.duration = Integer.parseInt(jsonTask.get(key));
      }
      return this;
    }

    public Builder withDuration(long duration) {
      this.duration = duration;
      return this;
    }

    /**
     * Also support "duration.ms" for backward compatibility.
     * @param jsonTask the json representation of the task.
     * @param key The json key.
     * @return the builder
     */
    public Builder withDurationLegacy(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.durationLegacy = Integer.parseInt(jsonTask.get(key));
      }
      return this;
    }

    public Builder withTaskStart(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.taskStart = Long.parseLong(jsonTask.get(key));
      }
      return this;
    }

    public Builder withTaskFinish(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.taskFinish = Long.parseLong(jsonTask.get(key));
      }
      return this;
    }

    public Builder withResource(Resource resource) {
      this.resource = resource;
      return this;
    }

    public Builder withPriority(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.priority = Integer.parseInt(jsonTask.get(key));
      }
      return this;
    }

    public Builder withPriority(int priority) {
      this.priority = priority;
      return this;
    }

    public Builder withType(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.type = jsonTask.get(key);
      }
      return this;
    }

    public Builder withType(String type) {
      this.type = type;
      return this;
    }

    public Builder withCount(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        count = Integer.parseInt(jsonTask.get(key));
        count = Math.max(count, 1);
      }
      return this;
    }

    public Builder withCount(int count) {
      this.count = count;
      return this;
    }

    public Builder withExecutionType(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.executionType = ExecutionType.valueOf(jsonTask.get(key));
      }
      return this;
    }

    public Builder withExecutionType(ExecutionType executionType) {
      this.executionType = executionType;
      return this;
    }

    public Builder withAllocationId(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        this.allocationId = Long.parseLong(jsonTask.get(key));
      }
      return this;
    }

    public Builder withAllocationId(long allocationId) {
      this.allocationId = allocationId;
      return this;
    }

    public Builder withRequestDelay(Map<String, String> jsonTask, String key) {
      if (jsonTask.containsKey(key)) {
        requestDelay = Long.parseLong(jsonTask.get(key));
        requestDelay = Math.max(requestDelay, 0);
      }
      return this;
    }

    public Builder withRequestDelay(long requestDelay) {
      this.requestDelay = requestDelay;
      return this;
    }

    public Builder withHostname(String hostname) {
      this.hostname = hostname;
      return this;
    }

    public TaskContainerDefinition build() throws YarnException {
      TaskContainerDefinition taskContainerDef =
          new TaskContainerDefinition();
      taskContainerDef.duration = validateAndGetDuration(this);
      taskContainerDef.resource = this.resource;
      taskContainerDef.type = this.type;
      taskContainerDef.requestDelay = this.requestDelay;
      taskContainerDef.priority = this.priority;
      taskContainerDef.count = this.count;
      taskContainerDef.allocationId = this.allocationId;
      taskContainerDef.executionType = this.executionType;
      taskContainerDef.hostname = this.hostname;
      return taskContainerDef;
    }

    private long validateAndGetDuration(Builder builder) throws YarnException {
      long duration = 0;

      if (builder.duration != -1) {
        duration = builder.duration;
      } else if (builder.durationLegacy != -1) {
        duration = builder.durationLegacy;
      } else if (builder.taskStart != -1 && builder.taskFinish != -1) {
        duration = builder.taskFinish - builder.taskStart;
      }

      if (duration <= 0) {
        throw new YarnException("Duration of a task shouldn't be less or equal"
            + " to 0!");
      }
      return duration;
    }
  }
}

相关信息

hadoop 源码目录

相关文章

hadoop AMDefinition 源码

hadoop AMDefinitionFactory 源码

hadoop AMDefinitionRumen 源码

hadoop AMDefinitionSLS 源码

hadoop AMDefinitionSynth 源码

hadoop AMRunner 源码

hadoop JobDefinition 源码

hadoop NMRunner 源码

hadoop RMRunner 源码

hadoop ReservationClientUtil 源码

0  赞