blob: a4bc69f3584d7e8a0f148a0f008818cb73ac50a3 [file] [log] [blame]
/*
*
* 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.resourceestimator.common.api;
import org.apache.hadoop.yarn.api.records.Resource;
import org.apache.hadoop.yarn.server.resourcemanager.reservation.RLESparseResourceAllocation;
/**
* ResourceSkyline records the job identification information as well as job's
* requested {@code
* container}s information during its lifespan.
*/
public class ResourceSkyline {
/**
* The auto-generated {@code ApplicationId} in job's one run.
* <p>
* <p>
* For a pipeline job, we assume the {@code jobId} changes each time we run
* the pipeline job.
*/
private String jobId;
/**
* The input data size of the job.
*/
private double jobInputDataSize;
/**
* Job submission time. Different logs could have different time format, so we
* store the original string directly extracted from logs.
*/
private long jobSubmissionTime;
/**
* Job finish time. Different logs could have different time format, so we
* store the original string directly extracted from logs.
*/
private long jobFinishTime;
/**
* The resource spec of containers allocated to the job.
*/
private Resource containerSpec;
/**
* The list of {@link Resource} allocated to the job in its lifespan.
*/
private RLESparseResourceAllocation skylineList;
// TODO
// We plan to record pipeline job's actual resource consumptions in one run
// here.
// TODO
// We might need to addHistory more features to the ResourceSkyline, such as
// users, VC, etc.
/**
* Constructor.
*
* @param jobIdConfig the id of the job.
* @param jobInputDataSizeConfig the input data size of the job.
* @param jobSubmissionTimeConfig the submission time of the job.
* @param jobFinishTimeConfig the finish time of the job.
* @param containerSpecConfig the resource spec of containers allocated
* to the job.
* @param skylineListConfig the list of {@link Resource} allocated in
* one run.
*/
public ResourceSkyline(final String jobIdConfig,
final double jobInputDataSizeConfig, final long jobSubmissionTimeConfig,
final long jobFinishTimeConfig, final Resource containerSpecConfig,
final RLESparseResourceAllocation skylineListConfig) {
this.jobId = jobIdConfig;
this.jobInputDataSize = jobInputDataSizeConfig;
this.jobSubmissionTime = jobSubmissionTimeConfig;
this.jobFinishTime = jobFinishTimeConfig;
this.containerSpec = containerSpecConfig;
this.skylineList = skylineListConfig;
}
/**
* Empty constructor.
*/
public ResourceSkyline() {
}
/**
* Get the id of the job.
*
* @return the id of this job.
*/
public final String getJobId() {
return jobId;
}
/**
* Set jobId.
*
* @param jobIdConfig jobId.
*/
public final void setJobId(final String jobIdConfig) {
this.jobId = jobIdConfig;
}
/**
* Get the job's input data size.
*
* @return job's input data size.
*/
public final double getJobInputDataSize() {
return jobInputDataSize;
}
/**
* Set jobInputDataSize.
*
* @param jobInputDataSizeConfig jobInputDataSize.
*/
public final void setJobInputDataSize(final double jobInputDataSizeConfig) {
this.jobInputDataSize = jobInputDataSizeConfig;
}
/**
* Get the job's submission time.
*
* @return job's submission time.
*/
public final long getJobSubmissionTime() {
return jobSubmissionTime;
}
/**
* Set jobSubmissionTime.
*
* @param jobSubmissionTimeConfig jobSubmissionTime.
*/
public final void setJobSubmissionTime(final long jobSubmissionTimeConfig) {
this.jobSubmissionTime = jobSubmissionTimeConfig;
}
/**
* Get the job's finish time.
*
* @return job's finish time.
*/
public final long getJobFinishTime() {
return jobFinishTime;
}
/**
* Set jobFinishTime.
*
* @param jobFinishTimeConfig jobFinishTime.
*/
public final void setJobFinishTime(final long jobFinishTimeConfig) {
this.jobFinishTime = jobFinishTimeConfig;
}
/**
* Get the resource spec of the job's allocated {@code container}s.
* <p> Key assumption: during job's lifespan, its allocated {@code container}s
* have the same {@link Resource} spec.
*
* @return the {@link Resource} spec of the job's allocated
* {@code container}s.
*/
public final Resource getContainerSpec() {
return containerSpec;
}
/**
* Set containerSpec.
*
* @param containerSpecConfig containerSpec.
*/
public final void setContainerSpec(final Resource containerSpecConfig) {
this.containerSpec = containerSpecConfig;
}
/**
* Get the list of {@link Resource}s allocated to the job.
*
* @return the {@link RLESparseResourceAllocation} which contains the list of
* {@link Resource}s allocated to the job.
*/
public final RLESparseResourceAllocation getSkylineList() {
return skylineList;
}
/**
* Set skylineList.
*
* @param skylineListConfig skylineList.
*/
public final void setSkylineList(
final RLESparseResourceAllocation skylineListConfig) {
this.skylineList = skylineListConfig;
}
}