The main interface between an ApplicationMaster and the ResourceManager.
The ApplicationMaster uses this interface to provide a list of {@link ResourceRequest} and returns unused {@link Container} allocated to it via {@link AllocateRequest}.
This also doubles up as a heartbeat to let the ResourceManager know that the ApplicationMaster is alive. Thus, applications should periodically make this call to be kept alive. The frequency depends on ??
The ResourceManager responds with list of allocated {@link Container}, status of completed containers and headroom information for the application.
The ApplicationMaster can use the available headroom (resources) to decide how to utilized allocated resources and make informed decisions about future resource requests.
@param request allocation request
@return allocation response
@throws YarnRemoteException