org.apache.hadoop.yarn.api.protocolrecords.AllocateRequest Maven / Gradle / Ivy
/**
* 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.protocolrecords;
import java.util.Collections;
import java.util.List;
import org.apache.hadoop.classification.InterfaceAudience.Public;
import org.apache.hadoop.classification.InterfaceStability.Stable;
import org.apache.hadoop.classification.InterfaceStability.Unstable;
import org.apache.hadoop.yarn.api.ApplicationMasterProtocol;
import org.apache.hadoop.yarn.api.records.Container;
import org.apache.hadoop.yarn.api.records.ContainerId;
import org.apache.hadoop.yarn.api.records.ResourceBlacklistRequest;
import org.apache.hadoop.yarn.api.records.ResourceRequest;
import org.apache.hadoop.yarn.api.records.SchedulingRequest;
import org.apache.hadoop.yarn.api.records.UpdateContainerRequest;
import org.apache.hadoop.yarn.util.Records;
/**
* The core request sent by the ApplicationMaster
to the
* ResourceManager
to obtain resources in the cluster.
*
* The request includes:
*
* - A response id to track duplicate responses.
* - Progress information.
* -
* A list of {@link ResourceRequest} to inform the
*
ResourceManager
about the application's
* resource requirements.
*
* -
* A list of unused {@link Container} which are being returned.
*
* -
* A list of {@link UpdateContainerRequest} to inform
* the
ResourceManager
about the change in
* requirements of running containers.
*
*
*
* @see ApplicationMasterProtocol#allocate(AllocateRequest)
*/
@Public
@Stable
public abstract class AllocateRequest {
@Public
@Stable
public static AllocateRequest newInstance(int responseID, float appProgress,
List resourceAsk,
List containersToBeReleased,
ResourceBlacklistRequest resourceBlacklistRequest) {
return AllocateRequest.newBuilder().responseId(responseID)
.progress(appProgress).askList(resourceAsk)
.releaseList(containersToBeReleased)
.resourceBlacklistRequest(resourceBlacklistRequest).build();
}
@Public
@Unstable
public static AllocateRequest newInstance(int responseID, float appProgress,
List resourceAsk,
List containersToBeReleased,
ResourceBlacklistRequest resourceBlacklistRequest,
String trackingUrl) {
return AllocateRequest.newBuilder().responseId(responseID)
.progress(appProgress).askList(resourceAsk)
.releaseList(containersToBeReleased)
.resourceBlacklistRequest(resourceBlacklistRequest)
.trackingUrl(trackingUrl).build();
}
@Public
@Unstable
public static AllocateRequest newInstance(int responseID, float appProgress,
List resourceAsk,
List containersToBeReleased,
List updateRequests,
ResourceBlacklistRequest resourceBlacklistRequest) {
return AllocateRequest.newBuilder().responseId(responseID)
.progress(appProgress).askList(resourceAsk)
.releaseList(containersToBeReleased)
.resourceBlacklistRequest(resourceBlacklistRequest)
.updateRequests(updateRequests)
.build();
}
/**
* Get the response id used to track duplicate responses.
* @return response id
*/
@Public
@Stable
public abstract int getResponseId();
/**
* Set the response id used to track duplicate responses.
* @param id response id
*/
@Public
@Stable
public abstract void setResponseId(int id);
/**
* Get the current progress of application.
* @return current progress of application
*/
@Public
@Stable
public abstract float getProgress();
/**
* Set the current progress of application
* @param progress current progress of application
*/
@Public
@Stable
public abstract void setProgress(float progress);
/**
* Get the list of ResourceRequest
to update the
* ResourceManager
about the application's resource requirements.
* @return the list of ResourceRequest
* @see ResourceRequest
*/
@Public
@Stable
public abstract List getAskList();
/**
* Set list of ResourceRequest
to update the
* ResourceManager
about the application's resource requirements.
* @param resourceRequests list of ResourceRequest
to update the
* ResourceManager
about the application's
* resource requirements
* @see ResourceRequest
*/
@Public
@Stable
public abstract void setAskList(List resourceRequests);
/**
* Get the list of ContainerId
of containers being
* released by the ApplicationMaster
.
* @return list of ContainerId
of containers being
* released by the ApplicationMaster
*/
@Public
@Stable
public abstract List getReleaseList();
/**
* Set the list of ContainerId
of containers being
* released by the ApplicationMaster
* @param releaseContainers list of ContainerId
of
* containers being released by the
* ApplicationMaster
*/
@Public
@Stable
public abstract void setReleaseList(List releaseContainers);
/**
* Get the ResourceBlacklistRequest
being sent by the
* ApplicationMaster
.
* @return the ResourceBlacklistRequest
being sent by the
* ApplicationMaster
* @see ResourceBlacklistRequest
*/
@Public
@Stable
public abstract ResourceBlacklistRequest getResourceBlacklistRequest();
/**
* Set the ResourceBlacklistRequest
to inform the
* ResourceManager
about the blacklist additions and removals
* per the ApplicationMaster
.
*
* @param resourceBlacklistRequest the ResourceBlacklistRequest
* to inform the ResourceManager
about
* the blacklist additions and removals
* per the ApplicationMaster
* @see ResourceBlacklistRequest
*/
@Public
@Stable
public abstract void setResourceBlacklistRequest(
ResourceBlacklistRequest resourceBlacklistRequest);
/**
* Get the list of container update requests being sent by the
* ApplicationMaster
.
* @return list of {@link UpdateContainerRequest}
* being sent by the
* ApplicationMaster
.
*/
@Public
@Unstable
public abstract List getUpdateRequests();
/**
* Set the list of container update requests to inform the
* ResourceManager
about the containers that need to be
* updated.
* @param updateRequests list of UpdateContainerRequest
for
* containers to be updated
*/
@Public
@Unstable
public abstract void setUpdateRequests(
List updateRequests);
/**
* Get the list of Scheduling requests being sent by the
* ApplicationMaster
.
* @return list of {@link SchedulingRequest} being sent by the
* ApplicationMaster
.
*/
@Public
@Unstable
public List getSchedulingRequests() {
return Collections.emptyList();
}
/**
* Set the list of Scheduling requests to inform the
* ResourceManager
about the application's resource requirements
* (potentially including allocation tags and placement constraints).
* @param schedulingRequests list of {@link SchedulingRequest} to update
* the ResourceManager
about the application's resource
* requirements.
*/
@Public
@Unstable
public void setSchedulingRequests(
List schedulingRequests) {
}
/**
* Get the tracking url update for this heartbeat.
* @return tracking url to update this application with
*/
@Public
@Unstable
public abstract String getTrackingUrl();
/**
* Set the new tracking url for this application.
* @param trackingUrl the new tracking url
*/
@Public
@Unstable
public abstract void setTrackingUrl(String trackingUrl);
@Public
@Unstable
public static AllocateRequestBuilder newBuilder() {
return new AllocateRequestBuilder();
}
/**
* Class to construct instances of {@link AllocateRequest} with specific
* options.
*/
@Public
@Stable
public static final class AllocateRequestBuilder {
private AllocateRequest allocateRequest =
Records.newRecord(AllocateRequest.class);
private AllocateRequestBuilder() {
}
/**
* Set the responseId
of the request.
* @see AllocateRequest#setResponseId(int)
* @param responseId responseId
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Stable
public AllocateRequestBuilder responseId(int responseId) {
allocateRequest.setResponseId(responseId);
return this;
}
/**
* Set the progress
of the request.
* @see AllocateRequest#setProgress(float)
* @param progress progress
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Stable
public AllocateRequestBuilder progress(float progress) {
allocateRequest.setProgress(progress);
return this;
}
/**
* Set the askList
of the request.
* @see AllocateRequest#setAskList(List)
* @param askList askList
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Stable
public AllocateRequestBuilder askList(List askList) {
allocateRequest.setAskList(askList);
return this;
}
/**
* Set the releaseList
of the request.
* @see AllocateRequest#setReleaseList(List)
* @param releaseList releaseList
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Stable
public AllocateRequestBuilder releaseList(List releaseList) {
allocateRequest.setReleaseList(releaseList);
return this;
}
/**
* Set the resourceBlacklistRequest
of the request.
* @see AllocateRequest#setResourceBlacklistRequest(
* ResourceBlacklistRequest)
* @param resourceBlacklistRequest
* resourceBlacklistRequest
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Stable
public AllocateRequestBuilder resourceBlacklistRequest(
ResourceBlacklistRequest resourceBlacklistRequest) {
allocateRequest.setResourceBlacklistRequest(resourceBlacklistRequest);
return this;
}
/**
* Set the updateRequests
of the request.
* @see AllocateRequest#setUpdateRequests(List)
* @param updateRequests updateRequests
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Unstable
public AllocateRequestBuilder updateRequests(
List updateRequests) {
allocateRequest.setUpdateRequests(updateRequests);
return this;
}
/**
* Set the schedulingRequests
of the request.
* @see AllocateRequest#setSchedulingRequests(List)
* @param schedulingRequests SchedulingRequest
of the request
* @return {@link AllocateRequestBuilder}
*/
@Public
@Unstable
public AllocateRequestBuilder schedulingRequests(
List schedulingRequests) {
allocateRequest.setSchedulingRequests(schedulingRequests);
return this;
}
/**
* Set the trackingUrl
of the request.
* @see AllocateRequest#setTrackingUrl(String)
* @param trackingUrl new tracking url
* @return {@link AllocateRequestBuilder}
*/
@Public
@Unstable
public AllocateRequestBuilder trackingUrl(String trackingUrl) {
allocateRequest.setTrackingUrl(trackingUrl);
return this;
}
/**
* Return generated {@link AllocateRequest} object.
* @return {@link AllocateRequest}
*/
@Public
@Stable
public AllocateRequest build() {
return allocateRequest;
}
}
}