
# YARN REST API接口介绍
#### 功能简介
通过HTTP REST API来查看更多Yarn任务的信息，目前Yarn的REST接口只能进行一些资源或者任务的查询。
更多完整和详细的接口描述请参考官网<https://hadoop.apache.org/docs/r3.3.1/hadoop-yarn/hadoop-yarn-site/WebServicesIntro.html>。
#### 准备运行环境
1. 在集群节点上安装客户端，例如安装到"/opt/client"目录。
2. 进入客户端安装目录"/opt/client"，执行下列命令初始化环境变量。
   ```
   source bigdata_env
   ```
   ```
   kinit 组件业务用户
   ```
   kinit一次票据时效24小时。24小时后再次运行应用时，需要重新执行kinit命令。
   
3. 与HTTP服务访问相比，以HTTPS方式访问Yarn时，由于使用了SSL安全加密，需要确保Curl命令所支持的SSL协议在集群中已添加支持。若不支持，可对应修改集群中SSL协议。 若Curl仅支持TLSv1协议，修改方法如下：
   1. [登录FusionInsight Manager页面](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0129.html)，选择"集群 \> 服务 \> Yarn \> 配置 \> 全部配置"。
   
   2. 在"搜索"框里搜索"hadoop.ssl.enabled.protocols"，查看参数值是否包含"TLSv1"，若不包含，则在配置项"hadoop.ssl.enabled.protocols"中追加",TLSv1"。
      ![](https://support.huaweicloud.com/devg3-mrs/public_sys-resources/note_3.0-zh-cn.png)
      TLSv1协议存在安全漏洞，请谨慎使用。
      
   
   3. 清空"ssl.server.exclude.cipher.list"配置项的值，否则以HTTPS无法访问Yarn。
   
   4. 单击"保存"，单击"确定"，保存完成后重启服务。
    
 
#### 操作步骤
1. 获取运行在Yarn上的任务的具体信息。
   - 命令：
     ```
     curl -k -i --negotiate -u : "https://10-120-85-2:8090/ws/v1/cluster/apps/"
     ```
     其中10-120-85-2为ResourceManager主节点的主机名，8090为ResourceManager的HTTPS访问端口，可通过查看服务端配置参数"yarn.resourcemanager.webapp.https.port"获取。
     
   
   - 用户能看到哪个队列的任务，要看这个用户是否具有这个队列的管理权限，如果当前组件使用了Ranger进行权限控制，需基于Ranger配置相关策略进行权限管理。
   
   - 运行结果：
     ```
     {
         "apps": {
             "app": [
                 {
                     "id": "application_1461743120947_0001",
                     "user": "spark",
                     "name": "Spark-JDBCServer",
                     "queue": "default",
                     "state": "RUNNING",
                     "finalStatus": "UNDEFINED",
                     "progress": 10,
                     "trackingUI": "ApplicationMaster",
                     "trackingUrl": "https://10-120-85-2:8090/proxy/application_1461743120947_0001/",
                     "diagnostics": "AM is launched. ",
                     "clusterId": 1461743120947,
                     "applicationType": "SPARK",
                     "applicationTags": "",
                     "startedTime": 1461804906260,
                     "finishedTime": 0,
                     "elapsedTime": 6888848,
                     "amContainerLogs": "https://10-120-85-2:8044/node/containerlogs/container_e12_1461743120947_0001_01_000001/spark",
                     "amHostHttpAddress": "10-120-85-2:8044",
                     "allocatedMB": 1024,
                     "allocatedVCores": 1,
                     "runningContainers": 1,
                     "memorySeconds": 7053309,
                     "vcoreSeconds": 6887,
                     "preemptedResourceMB": 0,
                     "preemptedResourceVCores": 0,
                     "numNonAMContainerPreempted": 0,
                     "numAMContainerPreempted": 0,
                     "resourceRequests": [
                         {
                             "capability": {
                                 "memory": 1024,
                                 "virtualCores": 1
                             },
                             "nodeLabelExpression": "",
                             "numContainers": 0,
                             "priority": {
                                 "priority": 0
                             },
                             "relaxLocality": true,
                             "resourceName": "*"
                         }
                     ],
                     "logAggregationStatus": "NOT_START",
                     "amNodeLabelExpression": ""
                 },
                 {
                     "id": "application_1461722876897_0002",
                     "user": "admin",
                     "name": "QuasiMonteCarlo",
                     "queue": "default",
                     "state": "FINISHED",
                     "finalStatus": "SUCCEEDED",
                     "progress": 100,
                     "trackingUI": "History",
                     "trackingUrl": "https://10-120-85-2:8090/proxy/application_1461722876897_0002/",
                     "diagnostics": "Attempt recovered after RM restart",
                     "clusterId": 1461743120947,
                     "applicationType": "MAPREDUCE",
                     "applicationTags": "",
                     "startedTime": 1461741052993,
                     "finishedTime": 1461741079483,
                     "elapsedTime": 26490,
                     "amContainerLogs": "https://10-120-85-2:8044/node/containerlogs/container_e11_1461722876897_0002_01_000001/admin",
                     "amHostHttpAddress": "10-120-85-2:8044",
                     "allocatedMB": -1,
                     "allocatedVCores": -1,
                     "runningContainers": -1,
                     "memorySeconds": 158664,
                     "vcoreSeconds": 52,
                     "preemptedResourceMB": 0,
                     "preemptedResourceVCores": 0,
                     "numNonAMContainerPreempted": 0,
                     "numAMContainerPreempted": 0,
                     "amNodeLabelExpression": ""
                 }
             ]
         }
     }
     ```
     
   
   - 结果分析：
     通过这个接口，可以查询当前集群中Yarn上的任务，并且可以得到如下[表1]。
      表1常用信息 
     | 参数              | 参数描述                      |
     |:---|:---|
     | user            | 运行这个任务的用户。                |
     | applicationType | 任务类型，例如MAPREDUCE或者SPARK等。 |
     | finalStatus     | 任务最终运行状态为成功还是失败。          |
     | elapsedTime     | 任务运行的时间。                  |
        
     
    
2. 获取Yarn资源的总体信息。
   - 命令：
     ```
     curl -k -i --negotiate -u : "https://10-120-85-102:8090/ws/v1/cluster/metrics"
     ```
     
   
   - 运行结果：
     ```
     {
         "clusterMetrics": {
             "appsSubmitted": 2,
             "appsCompleted": 1,
             "appsPending": 0,
             "appsRunning": 1,
             "appsFailed": 0,
             "appsKilled": 0,
             "reservedMB": 0,
             "availableMB": 23552,
             "allocatedMB": 1024,
             "reservedVirtualCores": 0,
             "availableVirtualCores": 23,
             "allocatedVirtualCores": 1,
             "containersAllocated": 1,
             "containersReserved": 0,
             "containersPending": 0,
             "totalMB": 24576,
             "totalVirtualCores": 24,
             "totalNodes": 3,
             "lostNodes": 0,
             "unhealthyNodes": 0,
             "decommissionedNodes": 0,
             "rebootedNodes": 0,
             "activeNodes": 3,
             "rmMainQueueSize": 0,
             "schedulerQueueSize": 0,
             "stateStoreQueueSize": 0
         }
     }
     ```
     
   
   - 结果分析： 通过这个接口，可以查询当前集群中相关资源信息。
     
   
   
   表2常用信息 
   | 参数                | 参数描述            |
   |:---|:---|
   | appsSubmitted     | 已经提交的任务数。       |
   | appsCompleted     | 已经完成的任务数。       |
   | appsPending       | 正在挂起的任务数。       |
   | appsRunning       | 正在运行的任务数。       |
   | appsFailed        | 已经失败的任务数。       |
   | appsKilled        | 已经被kill的任务数。    |
   | totalMB           | Yarn资源总的内存。     |
   | totalVirtualCores | Yarn资源总的VCore数。 |
      
   
 
