Class AMRMClient<T extends org.apache.hadoop.yarn.client.api.AMRMClient.ContainerRequest>
java.lang.Object
org.apache.hadoop.service.AbstractService
org.apache.hadoop.yarn.client.api.AMRMClient<T>
- All Implemented Interfaces:
Closeable,AutoCloseable,Service
@Public
@Stable
public abstract class AMRMClient<T extends org.apache.hadoop.yarn.client.api.AMRMClient.ContainerRequest>
extends AbstractService
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classorg.apache.hadoop.yarn.client.api.AMRMClient.ContainerRequestObject to represent a single container request for resources.Nested classes/interfaces inherited from interface org.apache.hadoop.service.Service
Service.STATE -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract voidaddContainerRequest(T req) Request containers for resources before callingallocatevoidaddSchedulingRequests(Collection<SchedulingRequest> schedulingRequests) Add a Collection of SchedulingRequests.abstract AllocateResponseallocate(float progressIndicator) Request additional containers and receive new container allocations.static <T extends org.apache.hadoop.yarn.client.api.AMRMClient.ContainerRequest>
AMRMClient<T>Create a new instance of AMRMClient.abstract ResourceGet the currently available resources in the cluster.abstract intGet the current number of nodes in the cluster.abstract Collection<T>getMatchingRequests(long allocationRequestId) Get outstandingContainerRequests matching the given allocationRequestId.List<? extends Collection<T>>getMatchingRequests(Priority priority, String resourceName, ExecutionType executionType, Resource capability) Get outstandingContainerRequests matching the given parameters.List<? extends Collection<T>>getMatchingRequests(Priority priority, String resourceName, ExecutionType executionType, Resource capability, String profile) abstract List<? extends Collection<T>>getMatchingRequests(Priority priority, String resourceName, Resource capability) Get outstandingContainerRequests matching the given parameters.Get the NM token cache of theAMRMClient.org.apache.hadoop.yarn.client.api.TimelineV2ClientGet registered timeline v2 client.abstract RegisterApplicationMasterResponseregisterApplicationMaster(String appHostName, int appHostPort, String appTrackingUrl) Register the application master.registerApplicationMaster(String appHostName, int appHostPort, String appTrackingUrl, Map<Set<String>, PlacementConstraint> placementConstraints) Register the application master.voidregisterTimelineV2Client(org.apache.hadoop.yarn.client.api.TimelineV2Client client) Register TimelineV2Client to AMRMClient.abstract voidreleaseAssignedContainer(ContainerId containerId) Release containers assigned by the Resource Manager.abstract voidremoveContainerRequest(T req) Remove previous container request.voidrequestContainerResourceChange(Container container, Resource capability) Deprecated.abstract voidrequestContainerUpdate(Container container, UpdateContainerRequest updateContainerRequest) Request a container update before callingallocate.voidsetNMTokenCache(NMTokenCache nmTokenCache) Set the NM token cache for theAMRMClient.abstract voidunregisterApplicationMaster(FinalApplicationStatus appStatus, String appMessage, String appTrackingUrl) Unregister the application master.abstract voidupdateBlacklist(List<String> blacklistAdditions, List<String> blacklistRemovals) Update application's blacklist with addition or removal resources.voidupdateTrackingUrl(String trackingUrl) Update application's tracking url on next heartbeat.voidWait forcheckto return true for each 1000 ms.voidWait forcheckto return true for eachcheckEveryMillisms.voidWait forcheckto return true for eachcheckEveryMillisms.Methods inherited from class org.apache.hadoop.service.AbstractService
close, getBlockers, getConfig, getFailureCause, getFailureState, getLifecycleHistory, getName, getServiceState, getStartTime, init, isInState, noteFailure, putBlocker, registerGlobalListener, registerServiceListener, removeBlocker, serviceInit, serviceStart, serviceStop, setConfig, start, stop, toString, unregisterGlobalListener, unregisterServiceListener, waitForServiceToStop
-
Constructor Details
-
AMRMClient
-
-
Method Details
-
createAMRMClient
@Public public static <T extends org.apache.hadoop.yarn.client.api.AMRMClient.ContainerRequest> AMRMClient<T> createAMRMClient()Create a new instance of AMRMClient. For usage:AMRMClient.<T>createAMRMClientContainerRequest()- Returns:
- the newly create AMRMClient instance.
-
addSchedulingRequests
@Public @Unstable public void addSchedulingRequests(Collection<SchedulingRequest> schedulingRequests) Add a Collection of SchedulingRequests. The AMRMClient will ensure that all requests in the same batch are sent in the same allocate call.- Parameters:
schedulingRequests- Collection of Scheduling Requests.
-
registerApplicationMaster
public abstract RegisterApplicationMasterResponse registerApplicationMaster(String appHostName, int appHostPort, String appTrackingUrl) throws YarnException, IOException Register the application master. This must be called before any other interaction- Parameters:
appHostName- Name of the host on which master is runningappHostPort- Port master is listening onappTrackingUrl- URL at which the master info can be seen- Returns:
RegisterApplicationMasterResponse- Throws:
YarnExceptionIOException
-
registerApplicationMaster
@Public @Unstable public RegisterApplicationMasterResponse registerApplicationMaster(String appHostName, int appHostPort, String appTrackingUrl, Map<Set<String>, PlacementConstraint> placementConstraints) throws YarnException, IOExceptionRegister the application master. This must be called before any other interaction- Parameters:
appHostName- Name of the host on which master is runningappHostPort- Port master is listening onappTrackingUrl- URL at which the master info can be seenplacementConstraints- Placement Constraints mappings.- Returns:
RegisterApplicationMasterResponse- Throws:
YarnExceptionIOException
-
allocate
public abstract AllocateResponse allocate(float progressIndicator) throws YarnException, IOException Request additional containers and receive new container allocations. Requests made viaaddContainerRequestare sent to theResourceManager. New containers assigned to the master are retrieved. Status of completed containers and node health updates are also retrieved. This also doubles up as a heartbeat to the ResourceManager and must be made periodically. The call may not always return any new allocations of containers. App should not make concurrent allocate requests. May cause request loss.Note : If the user has not removed container requests that have already been satisfied, then the re-register may end up sending the entire container requests to the RM (including matched requests). Which would mean the RM could end up giving it a lot of new allocated containers.
- Parameters:
progressIndicator- Indicates progress made by the master- Returns:
- the response of the allocate request
- Throws:
YarnExceptionIOException
-
unregisterApplicationMaster
public abstract void unregisterApplicationMaster(FinalApplicationStatus appStatus, String appMessage, String appTrackingUrl) throws YarnException, IOException Unregister the application master. This must be called in the end.- Parameters:
appStatus- Success/Failure status of the masterappMessage- Diagnostics message on failureappTrackingUrl- New URL to get master info- Throws:
YarnExceptionIOException
-
addContainerRequest
Request containers for resources before callingallocate- Parameters:
req- Resource request
-
removeContainerRequest
Remove previous container request. The previous container request may have already been sent to the ResourceManager. So even after the remove request the app must be prepared to receive an allocation for the previous request even after the remove request- Parameters:
req- Resource request
-
requestContainerResourceChange
Deprecated.Request container resource change before callingallocate. Any previous pending resource change request of the same container will be removed. Application that calls this method is expected to maintain theContainers that are returned from previous successful allocations or resource changes. By passing in the existing container and a target resource capability to this method, the application requests the ResourceManager to change the existing resource allocation to the target resource allocation.- Parameters:
container- The container returned from the last successful resource allocation or resource changecapability- The target resource capability of the container
-
requestContainerUpdate
public abstract void requestContainerUpdate(Container container, UpdateContainerRequest updateContainerRequest) Request a container update before callingallocate. Any previous pending update request of the same container will be removed.- Parameters:
container- The container returned from the last successful resource allocation or updateupdateContainerRequest- TheUpdateContainerRequest.
-
releaseAssignedContainer
Release containers assigned by the Resource Manager. If the app cannot use the container or wants to give up the container then it can release them. The app needs to make new requests for the released resource capability if it still needs it. eg. it released non-local resources- Parameters:
containerId-
-
getAvailableResources
Get the currently available resources in the cluster. A valid value is available after a call to allocate has been made- Returns:
- Currently available resources
-
getClusterNodeCount
public abstract int getClusterNodeCount()Get the current number of nodes in the cluster. A valid values is available after a call to allocate has been made- Returns:
- Current number of nodes in the cluster
-
getMatchingRequests
@Evolving public abstract List<? extends Collection<T>> getMatchingRequests(Priority priority, String resourceName, Resource capability) Get outstandingContainerRequests matching the given parameters. These ContainerRequests should have been added viaaddContainerRequestearlier in the lifecycle. For performance, the AMRMClient may return its internal collection directly without creating a copy. Users should not perform mutable operations on the return value. Each collection in the list contains requests with identicalResourcesize that fit in the given capability. In a collection, requests will be returned in the same order as they were added. NOTE: This API only matches Container requests that were created by the client WITHOUT the allocationRequestId being set.- Returns:
- Collection of request matching the parameters
-
getMatchingRequests
@Evolving public List<? extends Collection<T>> getMatchingRequests(Priority priority, String resourceName, ExecutionType executionType, Resource capability) Get outstandingContainerRequests matching the given parameters. These ContainerRequests should have been added viaaddContainerRequestearlier in the lifecycle. For performance, the AMRMClient may return its internal collection directly without creating a copy. Users should not perform mutable operations on the return value. Each collection in the list contains requests with identicalResourcesize that fit in the given capability. In a collection, requests will be returned in the same order as they were added. specify anExecutionType. NOTE: This API only matches Container requests that were created by the client WITHOUT the allocationRequestId being set.- Parameters:
priority- PriorityresourceName- LocationexecutionType- ExecutionTypecapability- Capability- Returns:
- Collection of request matching the parameters
-
getMatchingRequests
@Evolving public List<? extends Collection<T>> getMatchingRequests(Priority priority, String resourceName, ExecutionType executionType, Resource capability, String profile) -
getMatchingRequests
Get outstandingContainerRequests matching the given allocationRequestId. These ContainerRequests should have been added viaaddContainerRequestearlier in the lifecycle. For performance, the AMRMClient may return its internal collection directly without creating a copy. Users should not perform mutable operations on the return value. NOTE: This API only matches Container requests that were created by the client WITH the allocationRequestId being set to a non-default value.- Parameters:
allocationRequestId- Allocation Request Id- Returns:
- Collection of request matching the parameters
-
updateBlacklist
public abstract void updateBlacklist(List<String> blacklistAdditions, List<String> blacklistRemovals) Update application's blacklist with addition or removal resources.- Parameters:
blacklistAdditions- list of resources which should be added to the application blacklistblacklistRemovals- list of resources which should be removed from the application blacklist
-
setNMTokenCache
Set the NM token cache for theAMRMClient. This cache must be shared with theNMClientused to manage containers for theAMRMClientIf a NM token cache is not set, the
NMTokenCache.getSingleton()singleton instance will be used.- Parameters:
nmTokenCache- the NM token cache to use.
-
getNMTokenCache
Get the NM token cache of theAMRMClient. This cache must be shared with theNMClientused to manage containers for theAMRMClient.If a NM token cache is not set, the
NMTokenCache.getSingleton()singleton instance will be used.- Returns:
- the NM token cache.
-
registerTimelineV2Client
public void registerTimelineV2Client(org.apache.hadoop.yarn.client.api.TimelineV2Client client) Register TimelineV2Client to AMRMClient. Writer's address for the timeline V2 client will be updated dynamically if registered.- Parameters:
client- the timeline v2 client to register
-
getRegisteredTimelineV2Client
public org.apache.hadoop.yarn.client.api.TimelineV2Client getRegisteredTimelineV2Client()Get registered timeline v2 client.- Returns:
- the registered timeline v2 client
-
updateTrackingUrl
Update application's tracking url on next heartbeat.- Parameters:
trackingUrl- new tracking url for this application
-
waitFor
Wait forcheckto return true for each 1000 ms. See alsowaitFor(java.util.function.Supplier, int)andwaitFor(java.util.function.Supplier, int, int)- Parameters:
check- the condition for which it should wait- Throws:
InterruptedException
-
waitFor
Wait forcheckto return true for eachcheckEveryMillisms. See alsowaitFor(java.util.function.Supplier, int, int)- Parameters:
check- user defined checkercheckEveryMillis- interval to callcheck- Throws:
InterruptedException
-
waitFor
public void waitFor(Supplier<Boolean> check, int checkEveryMillis, int logInterval) throws InterruptedException Wait forcheckto return true for eachcheckEveryMillisms. In the main loop, this method will log the message "waiting in main loop" for eachlogIntervaltimes iteration to confirm the thread is alive.- Parameters:
check- user defined checkercheckEveryMillis- interval to callchecklogInterval- interval to log for each- Throws:
InterruptedException
-
requestContainerUpdate(Container, UpdateContainerRequest)