
# YARN Java API接口介绍
关于YARN的详细API可以直接参考官方网站上的描述：
<https://hadoop.apache.org/docs/r3.1.1/api/index.html>
#### 常用接口
YARN常用的Java类有如下几个。
- **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开发指南中的[MapReduce访问多组件样例代码](https://support.huaweicloud.com/devg3-mrs/mrs_07_360015.html)，实现建立一个MapReduce job，并提交MapReduce作业到Hadoop集群。
