public class YarnClusterResourceManager
extends org.apache.samza.clustermanager.ClusterResourceManager
implements org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandler, org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandler
YarnClusterResourceManager implements a ClusterResourceManager using Yarn as the underlying
resource manager. This class is as an adaptor between Yarn and translates Yarn callbacks into
Samza specific callback methods as specified in Callback.
Thread-safety:
1.Start and stop methods should NOT be called from multiple threads.
2.ALL callbacks from the YarnContainerManager are invoked from a single Callback thread of the AMRMClient.
3.Stop should not be called more than once.| Constructor and Description |
|---|
YarnClusterResourceManager(org.apache.samza.config.Config config,
org.apache.samza.coordinator.JobModelManager jobModelManager,
org.apache.samza.clustermanager.ClusterResourceManager.Callback callback,
org.apache.samza.clustermanager.SamzaApplicationState samzaAppState)
Creates an YarnClusterResourceManager from config, a jobModelReader and a callback.
|
| Modifier and Type | Method and Description |
|---|---|
void |
cancelResourceRequest(org.apache.samza.clustermanager.SamzaResourceRequest request)
Remove a previously submitted resource request.
|
float |
getProgress() |
void |
launchStreamProcessor(org.apache.samza.clustermanager.SamzaResource resource,
org.apache.samza.job.CommandBuilder builder)
Requests the launch of a StreamProcessor with the specified ID on the resource
|
void |
onContainersAllocated(java.util.List<org.apache.hadoop.yarn.api.records.Container> containers)
Callback invoked from Yarn when containers are allocated.
|
void |
onContainersCompleted(java.util.List<org.apache.hadoop.yarn.api.records.ContainerStatus> statuses)
Callback invoked from Yarn when containers complete.
|
void |
onContainerStarted(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.util.Map<java.lang.String,java.nio.ByteBuffer> allServiceResponse) |
void |
onContainerStatusReceived(org.apache.hadoop.yarn.api.records.ContainerId containerId,
org.apache.hadoop.yarn.api.records.ContainerStatus containerStatus) |
void |
onContainerStopped(org.apache.hadoop.yarn.api.records.ContainerId containerId) |
void |
onError(java.lang.Throwable e)
Callback invoked when there is an error in the Yarn client.
|
void |
onGetContainerStatusError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t) |
void |
onNodesUpdated(java.util.List<org.apache.hadoop.yarn.api.records.NodeReport> updatedNodes) |
void |
onShutdownRequest() |
void |
onStartContainerError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t) |
void |
onStopContainerError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t) |
void |
releaseResources(org.apache.samza.clustermanager.SamzaResource resource)
Requests the YarnContainerManager to release a resource.
|
void |
requestResources(org.apache.samza.clustermanager.SamzaResourceRequest resourceRequest)
Request resources for running container processes.
|
void |
runProcessor(java.lang.String processorId,
org.apache.hadoop.yarn.api.records.Container container,
org.apache.samza.job.CommandBuilder cmdBuilder)
Runs a process as specified by the command builder on the container.
|
void |
start()
Starts the YarnClusterResourceManager and initialize all its sub-systems.
|
void |
stop(org.apache.samza.clustermanager.SamzaApplicationState.SamzaAppStatus status)
Stops the YarnContainerManager and all its sub-components.
|
void |
stopStreamProcessor(org.apache.samza.clustermanager.SamzaResource resource) |
public YarnClusterResourceManager(org.apache.samza.config.Config config,
org.apache.samza.coordinator.JobModelManager jobModelManager,
org.apache.samza.clustermanager.ClusterResourceManager.Callback callback,
org.apache.samza.clustermanager.SamzaApplicationState samzaAppState)
config - to instantiate the cluster manager withjobModelManager - the jobModel manager to get the job model (mostly for the UI)callback - the callback to receive events from Yarn.samzaAppState - samza app state for display in the UIpublic void start()
start in class org.apache.samza.clustermanager.ClusterResourceManagerpublic void requestResources(org.apache.samza.clustermanager.SamzaResourceRequest resourceRequest)
requestResources in class org.apache.samza.clustermanager.ClusterResourceManagerpublic void releaseResources(org.apache.samza.clustermanager.SamzaResource resource)
releaseResources in class org.apache.samza.clustermanager.ClusterResourceManagerresource - to be releasedpublic void launchStreamProcessor(org.apache.samza.clustermanager.SamzaResource resource,
org.apache.samza.job.CommandBuilder builder)
launchStreamProcessor in class org.apache.samza.clustermanager.ClusterResourceManagerresource - the SamzaResource on which to launch the StreamProcessorbuilder - the builder to build the resource launch command from
TODO: Support non-builder methods to launch resources. Maybe, refactor into a ContainerLaunchStrategy interfacepublic void stopStreamProcessor(org.apache.samza.clustermanager.SamzaResource resource)
stopStreamProcessor in class org.apache.samza.clustermanager.ClusterResourceManagerpublic void cancelResourceRequest(org.apache.samza.clustermanager.SamzaResourceRequest request)
cancelResourceRequest in class org.apache.samza.clustermanager.ClusterResourceManagerrequest - the request to be cancelledpublic void stop(org.apache.samza.clustermanager.SamzaApplicationState.SamzaAppStatus status)
stop in class org.apache.samza.clustermanager.ClusterResourceManagerpublic void onContainersCompleted(java.util.List<org.apache.hadoop.yarn.api.records.ContainerStatus> statuses)
onContainersCompleted in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlerstatuses - the YarnContainerStatus callbacks from Yarn.public void onContainersAllocated(java.util.List<org.apache.hadoop.yarn.api.records.Container> containers)
onContainersAllocated in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlercontainers - the list of Container returned by Yarn.public void onShutdownRequest()
onShutdownRequest in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlerpublic void onNodesUpdated(java.util.List<org.apache.hadoop.yarn.api.records.NodeReport> updatedNodes)
onNodesUpdated in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlerpublic float getProgress()
getProgress in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlerpublic void onError(java.lang.Throwable e)
ClusterResourceManager.Callback instance.onError in interface org.apache.hadoop.yarn.client.api.async.AMRMClientAsync.CallbackHandlerpublic void onContainerStarted(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.util.Map<java.lang.String,java.nio.ByteBuffer> allServiceResponse)
onContainerStarted in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void onContainerStatusReceived(org.apache.hadoop.yarn.api.records.ContainerId containerId,
org.apache.hadoop.yarn.api.records.ContainerStatus containerStatus)
onContainerStatusReceived in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void onContainerStopped(org.apache.hadoop.yarn.api.records.ContainerId containerId)
onContainerStopped in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void onStartContainerError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t)
onStartContainerError in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void onGetContainerStatusError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t)
onGetContainerStatusError in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void onStopContainerError(org.apache.hadoop.yarn.api.records.ContainerId containerId,
java.lang.Throwable t)
onStopContainerError in interface org.apache.hadoop.yarn.client.api.async.NMClientAsync.CallbackHandlerpublic void runProcessor(java.lang.String processorId,
org.apache.hadoop.yarn.api.records.Container container,
org.apache.samza.job.CommandBuilder cmdBuilder)
throws java.io.IOException
processorId - id of the samza processor to run (passed as a command line parameter to the process)container - the yarn container to run the processor on.cmdBuilder - the command builder that encapsulates the command, and the contextjava.io.IOException - on IO exceptions running the container