
# YARN Java API接口介绍
#### 常用接口
YARN常用的Java类如下所示，更多关于YARN的详细API可以参考官方网站描述：<https://hadoop.apache.org/docs/r3.3.1/api/index.html>。
- **ApplicationClientProtocol**
  用于Client与ResourceManager之间，Client通过该协议可实现将应用程序提交到ResourceManager上，查询应用程序的运行状态或者中止应用程序等功能。
  表1ApplicationClientProtocol常用方法 
  | **方法**                                                                  | **说明**                                                |
  |:---|:---|
  | forceKillApplication(KillApplicationRequest request)                    | Client通过此接口请求RM中止一个已提交的任务。                            |
  | getApplicationAttemptReport(GetApplicationAttemptReportRequest request) | Client通过此接口从RM获取指定ApplicationAttempt的报告信息。            |
  | getApplicationAttempts(GetApplicationAttemptsRequest request)           | Client通过此接口从RM获取所有ApplicationAttempt的报告信息。            |
  | getApplicationReport(GetApplicationReportRequest request)               | Client通过此接口从RM获取某个应用的报告信息。                            |
  | getApplications(GetApplicationsRequest request)                         | Client通过此接口从RM获取满足一定过滤条件的应用的报告信息。                     |
  | getClusterMetrics(GetClusterMetricsRequest request)                     | Client通过此接口从RM获取集群的Metrics。                           |
  | getClusterNodes(GetClusterNodesRequest request)                         | Client通过此接口从RM获取集群中的所有节点信息。                           |
  | getContainerReport(GetContainerReportRequest request)                   | Client通过此接口从RM获取某个Container的报告信息。                     |
  | getContainers(GetContainersRequest request)                             | Client通过此接口从RM获取某个ApplicationAttemp的所有Container的报告信息。 |
  | getDelegationToken(GetDelegationTokenRequest request)                   | Client通过此接口获取授权票据，用于container访问相应的service。            |
  | getNewApplication(GetNewApplicationRequest request)                     | Client通过此接口获取一个新的应用ID号，用于提交新的应用。                      |
  | getQueueInfo(GetQueueInfoRequest request)                               | Client通过此接口从RM中获取队列的相关信息。                             |
  | getQueueUserAcls(GetQueueUserAclsInfoRequest request)                   | Client通过此接口从RM中获取当前用户的队列访问权限信息。                       |
  | moveApplicationAcrossQueues(MoveApplicationAcrossQueuesRequest request) | 移动一个应用到新的队列。                                          |
  | submitApplication(SubmitApplicationRequest request)                     | Client通过此接口提交一个新的应用到RM。                               |
     
  

- ApplicationMasterProtocol 用于ApplicationMaster与ResourceManager之间，ApplicationMaster使用该协议向ResourceManager注册、申请资源、获取各个任务的运行情况等。
  表2ApplicationMasterProtocol常用方法 
  | **方法**                                                              | **说明**                |
  |:---|:---|
  | allocate(AllocateRequest request)                                   | AM通过此接口提交资源分配申请。      |
  | finishApplicationMaster(FinishApplicationMasterRequest request)     | AM通过此接口通知RM其运行成功或者失败。 |
  | registerApplicationMaster(RegisterApplicationMasterRequest request) | AM通过此接口向RM进行注册。       |
     
  

- ContainerManagementProtocol 用于ApplicationMaster与NodeManager之间，ApplicationMaster使用该协议要求NodeManager启动/中止Container或者查询Container的运行状态。
  表3ContainerManagementProtocol常用方法 
  | **方法**                                                    | **说明**                            |
  |:---|:---|
  | getContainerStatuses(GetContainerStatusesRequest request) | AM通过此接口向NM请求Containers的当前状态信息。    |
  | startContainers(StartContainersRequest request)           | AM通过此接口向NM提供需要启动的containers列表的请求。 |
  | stopContainers(StopContainersRequest request)             | AM通过此接口请求NM停止一系列已分配的Containers。   |
     
  
 
#### 样例代码
YARN作业提交的样例代码详细可以参考[MapReduce访问多组件样例程序](https://support.huaweicloud.com/devg3-mrs/mrs_07_150014.html)，实现建立一个MapReduce job，并提交MapReduce作业到Hadoop集群。
