ResourceManager REST API。

概述

ResourceManager REST API 允许用户获取有关集群的信息 - 集群状态、集群指标、调度程序信息、集群中节点的信息以及集群中应用程序的信息。

启用 CORS 支持

要仅为 RM 启用跨源支持 (CORS)(不为 NM 启用),请设置以下配置参数

在 core-site.xml 中,将 org.apache.hadoop.security.HttpCrossOriginFilterInitializer 添加到 hadoop.http.filter.initializers。在 yarn-site.xml 中,将 yarn.resourcemanager.webapp.cross-origin.enabled 设置为 true。

集群信息 API

集群信息资源提供有关集群的整体信息。

URI

以下两个 URI 均可提供集群信息。

支持的 HTTP 操作

  • GET

支持的查询参数

  None

clusterInfo 对象的元素

项目 数据类型 描述
id long 集群 ID
startedOn long 集群启动时间(自纪元以来的毫秒数)
state string ResourceManager 状态 - 有效值:NOTINITED、INITED、STARTED、STOPPED
haState string ResourceManager HA 状态 - 有效值:INITIALIZING、ACTIVE、STANDBY、STOPPED
rmStateStoreName string 实现 ResourceManager 状态存储的类的完全限定名
resourceManagerVersion string ResourceManager 版本
resourceManagerBuildVersion string 包含构建版本、用户和校验和的 ResourceManager 构建字符串
resourceManagerVersionBuiltOn string ResourceManager 构建时间(自纪元以来的毫秒数)
hadoopVersion string hadoop common 版本
hadoopBuildVersion string 包含构建版本、用户和校验和的 Hadoop common 构建字符串
hadoopVersionBuiltOn string hadoop common 构建时间(自纪元以来的毫秒数)
haZooKeeperConnectionState string 高可用性服务 ZooKeeper 连接状态

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/info

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "clusterInfo":
  {
    "id":1324053971963,
    "startedOn":1324053971963,
    "state":"STARTED",
    "haState":"ACTIVE",
    "rmStateStoreName":"org.apache.hadoop.yarn.server.resourcemanager.recovery.NullRMStateStore",
    "resourceManagerVersion":"3.0.0-SNAPSHOT",
    "resourceManagerBuildVersion":"3.0.0-SNAPSHOT from unknown by user1 source checksum 11111111111111111111111111111111",
    "resourceManagerVersionBuiltOn":"2016-01-01T01:00Z",
    "hadoopVersion":"3.0.0-SNAPSHOT",
    "hadoopBuildVersion":"3.0.0-SNAPSHOT from unknown by user1 source checksum 11111111111111111111111111111111",
    "hadoopVersionBuiltOn":"2016-01-01T01:00Z",
    "haZooKeeperConnectionState": "ResourceManager HA is not enabled."  }
}

XML 响应

HTTP 请求

  Accept: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/info

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 712
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<clusterInfo>
  <id>1476912658570</id>
  <startedOn>1476912658570</startedOn>
  <state>STARTED</state>
  <haState>ACTIVE</haState>
  <rmStateStoreName>org.apache.hadoop.yarn.server.resourcemanager.recovery.NullRMStateStore</rmStateStoreName>
  <resourceManagerVersion>3.0.0-SNAPSHOT</resourceManagerVersion>
  <resourceManagerBuildVersion>3.0.0-SNAPSHOT from unknown by user1 source checksum 11111111111111111111111111111111</resourceManagerBuildVersion>
  <resourceManagerVersionBuiltOn>2016-01-01T01:00Z</resourceManagerVersionBuiltOn>
  <hadoopVersion>3.0.0-SNAPSHOT</hadoopVersion>
  <hadoopBuildVersion>3.0.0-SNAPSHOT from unknown by user1 source checksum 11111111111111111111111111111111</hadoopBuildVersion>
  <hadoopVersionBuiltOn>2016-01-01T01:00Z</hadoopVersionBuiltOn>
  <haZooKeeperConnectionState>ResourceManager HA is not enabled.</haZooKeeperConnectionState>
</clusterInfo>

集群指标 API

集群指标资源提供有关集群的一些总体指标。更详细的指标应从 jmx 接口检索。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  None

clusterMetrics 对象的元素

项目 数据类型 描述
appsSubmitted int 提交的应用程序数
appsCompleted int 已完成的应用程序数
appsPending int 挂起的应用程序数
appsRunning int 正在运行的应用程序数
appsFailed int 失败的应用程序数
appsKilled int 已终止的应用程序数
reservedMB long 预留的内存量(MB)
availableMB long 可用的内存量(MB)
allocatedMB long 已分配的内存量(MB)
totalMB long 总内存量(MB)
reservedVirtualCores long 预留的虚拟内核数
availableVirtualCores long 可用的虚拟内核数
allocatedVirtualCores long 已分配的虚拟内核数
totalVirtualCores long 总虚拟内核数
containersAllocated int 已分配的容器数
containersReserved int 已预留的容器数
containersPending int 挂起的容器数
totalNodes int 总节点数
activeNodes int 活动节点数
lostNodes int 丢失节点数
unhealthyNodes int 不健康节点数
decommissioningNodes int 正在退役的节点数
decommissionedNodes int 已退役的节点数
rebootedNodes int 已重启的节点数
shutdownNodes int 已关闭的节点数

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/metrics

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "clusterMetrics":
  {
    "appsSubmitted":0,
    "appsCompleted":0,
    "appsPending":0,
    "appsRunning":0,
    "appsFailed":0,
    "appsKilled":0,
    "reservedMB":0,
    "availableMB":17408,
    "allocatedMB":0,
    "reservedVirtualCores":0,
    "availableVirtualCores":7,
    "allocatedVirtualCores":1,
    "containersAllocated":0,
    "containersReserved":0,
    "containersPending":0,
    "totalMB":17408,
    "totalVirtualCores":8,
    "totalNodes":1,
    "lostNodes":0,
    "unhealthyNodes":0,
    "decommissioningNodes":0,
    "decommissionedNodes":0,
    "rebootedNodes":0,
    "activeNodes":1,
    "shutdownNodes":0
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/metrics
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 432
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<clusterMetrics>
  <appsSubmitted>0</appsSubmitted>
  <appsCompleted>0</appsCompleted>
  <appsPending>0</appsPending>
  <appsRunning>0</appsRunning>
  <appsFailed>0</appsFailed>
  <appsKilled>0</appsKilled>
  <reservedMB>0</reservedMB>
  <availableMB>17408</availableMB>
  <allocatedMB>0</allocatedMB>
  <reservedVirtualCores>0</reservedVirtualCores>
  <availableVirtualCores>7</availableVirtualCores>
  <allocatedVirtualCores>1</allocatedVirtualCores>
  <containersAllocated>0</containersAllocated>
  <containersReserved>0</containersReserved>
  <containersPending>0</containersPending>
  <totalMB>17408</totalMB>
  <totalVirtualCores>8</totalVirtualCores>
  <totalNodes>1</totalNodes>
  <lostNodes>0</lostNodes>
  <unhealthyNodes>0</unhealthyNodes>
  <decommissioningNodes>0</decommissioningNodes>
  <decommissionedNodes>0</decommissionedNodes>
  <rebootedNodes>0</rebootedNodes>
  <activeNodes>1</activeNodes>
  <shutdownNodes>0</shutdownNodes>
</clusterMetrics>

集群调度程序 API

调度程序资源包含有关群集中配置的当前调度程序的信息。它目前支持 Fifo、容量和公平调度程序。根据配置的调度程序,您将获得不同的信息,因此请务必查看类型信息。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  None

容量调度程序 API

容量调度程序支持分层队列。此请求将打印有关所有队列及其拥有的任何子队列的信息。实际上可以向其提交作业的队列称为叶队列。这些队列具有与之关联的其他数据。

schedulerInfo 对象的元素

项目 数据类型 描述
type string 调度程序类型 - capacityScheduler
capacity 浮点数 相对于其父队列的配置队列容量(百分比)
usedCapacity 浮点数 已使用的队列容量(百分比)
maxCapacity 浮点数 相对于其父队列的配置最大队列容量(百分比)
queueName string 队列名称
queues 队列数组(JSON)/零个或更多队列对象(XML) 队列资源集合
health 单个健康对象 容量调度程序的健康指标。此指标自 2.8.0 起存在,但输出格式不佳。因此,用户无法干净地使用此字段,此字段从 3.2.0 起进行了优化。

父队列的队列对象元素

项目 数据类型 描述
capacity 浮点数 相对于其父队列的配置队列容量(百分比)
usedCapacity 浮点数 已使用的队列容量(百分比)
maxCapacity 浮点数 相对于其父队列的配置最大队列容量(百分比)
absoluteCapacity 浮点数 此队列可使用的整个群集的绝对容量百分比
absoluteMaxCapacity 浮点数 此队列可使用的整个群集的绝对最大容量百分比
absoluteUsedCapacity 浮点数 此队列正在使用的整个群集的绝对已用容量百分比
numApplications int 当前在队列中的应用程序数
usedResources string 描述队列当前使用的资源的字符串
queueName string 队列名称
state QueueState 字符串 队列状态
queues 队列数组(JSON)/零个或更多队列对象(XML) 子队列信息的集合。如果队列没有子队列,则省略。
resourcesUsed 单个资源对象 此队列使用的总资源量

叶队列的队列对象元素 - 包含父元素中的所有元素,但除了‘queues’之外,还包括以下元素:

项目 数据类型 描述
type 字符串 队列类型 - capacitySchedulerLeafQueueInfo
numActiveApplications int 此队列中的活动应用程序数
numPendingApplications int 此队列中的挂起应用程序数
numContainers int 正在使用的容器数
allocatedContainers int 此队列中的已分配容器数
reservedContainers int 此队列中的已预留容器数
pendingContainers int 此队列中的挂起容器数
maxApplications int 此队列可容纳的最大应用程序数
maxApplicationsPerUser int 此队列中每个用户可容纳的最大应用程序数
maxActiveApplications int 此队列可容纳的最大活动应用程序数
maxActiveApplicationsPerUser int 此队列中每个用户可容纳的最大活动应用程序数
userLimit int 配置中设置的最小用户限制百分比
userLimitFactor 浮点数 配置中设置的用户限制因子
users 用户数组 (JSON)/零个或多个用户对象 (XML) 包含已用资源的用户对象集合

users 用户对象的元素

项目 数据类型 描述
username 字符串 使用资源的用户的用户名
resourcesUsed 单个资源对象 此队列中用户使用的资源量
numActiveApplications int 此队列中此用户的活动应用程序数
numPendingApplications int 此队列中此用户的挂起应用程序数

user 和 queues 中 resourcesUsed 的资源对象元素

项目 数据类型 描述
memory int 已用内存量 (以 MB 为单位)
vCores int 虚拟内核数

schedulerInfo 中 health 对象的元素

项目 数据类型 描述
lastrun long 应用程序启动时间(自纪元以来的毫秒数)
operationsInfo 操作数组 (JSON)/操作对象 (XML) 操作对象集合
lastRunDetails lastRunDetails 数组 (JSON)/lastRunDetail 对象 (XML) lastRunDetail 对象集合

health 中 operation 对象的元素

项目 数据类型 描述
operation string 操作类型
nodeId string 操作涉及的节点 ID
containerId string 操作涉及的容器 ID
queue string 操作涉及的队列名称

health 中 lastRunDetail 对象的元素

项目 数据类型 描述
operation string 操作类型
count long 操作涉及的节点 ID
resources 单个资源对象 操作涉及的资源

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/scheduler

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
    "scheduler": {
        "schedulerInfo": {
            "capacity": 100.0,
            "maxCapacity": 100.0,
            "queueName": "root",
            "queues": {
                "queue": [
                    {
                        "absoluteCapacity": 10.5,
                        "absoluteMaxCapacity": 50.0,
                        "absoluteUsedCapacity": 0.0,
                        "capacity": 10.5,
                        "maxCapacity": 50.0,
                        "numApplications": 0,
                        "queueName": "a",
                        "queues": {
                            "queue": [
                                {
                                    "absoluteCapacity": 3.15,
                                    "absoluteMaxCapacity": 25.0,
                                    "absoluteUsedCapacity": 0.0,
                                    "capacity": 30.000002,
                                    "maxCapacity": 50.0,
                                    "numApplications": 0,
                                    "queueName": "a1",
                                    "queues": {
                                        "queue": [
                                            {
                                                "absoluteCapacity": 2.6775,
                                                "absoluteMaxCapacity": 25.0,
                                                "absoluteUsedCapacity": 0.0,
                                                "capacity": 85.0,
                                                "maxActiveApplications": 1,
                                                "maxActiveApplicationsPerUser": 1,
                                                "maxApplications": 267,
                                                "maxApplicationsPerUser": 267,
                                                "maxCapacity": 100.0,
                                                "numActiveApplications": 0,
                                                "numApplications": 0,
                                                "numContainers": 0,
                                                "numPendingApplications": 0,
                                                "queueName": "a1a",
                                                "resourcesUsed": {
                                                    "memory": 0,
                                                    "vCores": 0
                                                },
                                                "state": "RUNNING",
                                                "type": "capacitySchedulerLeafQueueInfo",
                                                "usedCapacity": 0.0,
                                                "usedResources": "<memory:0, vCores:0>",
                                                "userLimit": 100,
                                                "userLimitFactor": 1.0,
                                                "users": null
                                            },
                                            {
                                                "absoluteCapacity": 0.47250003,
                                                "absoluteMaxCapacity": 25.0,
                                                "absoluteUsedCapacity": 0.0,
                                                "capacity": 15.000001,
                                                "maxActiveApplications": 1,
                                                "maxActiveApplicationsPerUser": 1,
                                                "maxApplications": 47,
                                                "maxApplicationsPerUser": 47,
                                                "maxCapacity": 100.0,
                                                "numActiveApplications": 0,
                                                "numApplications": 0,
                                                "numContainers": 0,
                                                "numPendingApplications": 0,
                                                "queueName": "a1b",
                                                "resourcesUsed": {
                                                    "memory": 0,
                                                    "vCores": 0
                                                },
                                                "state": "RUNNING",
                                                "type": "capacitySchedulerLeafQueueInfo",
                                                "usedCapacity": 0.0,
                                                "usedResources": "<memory:0, vCores:0>",
                                                "userLimit": 100,
                                                "userLimitFactor": 1.0,
                                                "users": null
                                            }
                                        ]
                                    },
                                    "resourcesUsed": {
                                        "memory": 0,
                                        "vCores": 0
                                    },
                                    "state": "RUNNING",
                                    "usedCapacity": 0.0,
                                    "usedResources": "<memory:0, vCores:0>"
                                },
                                {
                                    "absoluteCapacity": 7.35,
                                    "absoluteMaxCapacity": 50.0,
                                    "absoluteUsedCapacity": 0.0,
                                    "capacity": 70.0,
                                    "maxActiveApplications": 1,
                                    "maxActiveApplicationsPerUser": 100,
                                    "maxApplications": 735,
                                    "maxApplicationsPerUser": 73500,
                                    "maxCapacity": 100.0,
                                    "numActiveApplications": 0,
                                    "numApplications": 0,
                                    "numContainers": 0,
                                    "numPendingApplications": 0,
                                    "queueName": "a2",
                                    "resourcesUsed": {
                                        "memory": 0,
                                        "vCores": 0
                                    },
                                    "state": "RUNNING",
                                    "type": "capacitySchedulerLeafQueueInfo",
                                    "usedCapacity": 0.0,
                                    "usedResources": "<memory:0, vCores:0>",
                                    "userLimit": 100,
                                    "userLimitFactor": 100.0,
                                    "users": null
                                }
                            ]
                        },
                        "resourcesUsed": {
                            "memory": 0,
                            "vCores": 0
                        },
                        "state": "RUNNING",
                        "usedCapacity": 0.0,
                        "usedResources": "<memory:0, vCores:0>"
                    },
                    {
                        "absoluteCapacity": 89.5,
                        "absoluteMaxCapacity": 100.0,
                        "absoluteUsedCapacity": 0.0,
                        "capacity": 89.5,
                        "maxCapacity": 100.0,
                        "numApplications": 2,
                        "queueName": "b",
                        "queues": {
                            "queue": [
                                {
                                    "absoluteCapacity": 53.7,
                                    "absoluteMaxCapacity": 100.0,
                                    "absoluteUsedCapacity": 0.0,
                                    "capacity": 60.000004,
                                    "maxActiveApplications": 1,
                                    "maxActiveApplicationsPerUser": 100,
                                    "maxApplications": 5370,
                                    "maxApplicationsPerUser": 537000,
                                    "maxCapacity": 100.0,
                                    "numActiveApplications": 1,
                                    "numApplications": 2,
                                    "numContainers": 0,
                                    "numPendingApplications": 1,
                                    "queueName": "b1",
                                    "resourcesUsed": {
                                        "memory": 0,
                                        "vCores": 0
                                    },
                                    "state": "RUNNING",
                                    "type": "capacitySchedulerLeafQueueInfo",
                                    "usedCapacity": 0.0,
                                    "usedResources": "<memory:0, vCores:0>",
                                    "userLimit": 100,
                                    "userLimitFactor": 100.0,
                                    "users": {
                                        "user": [
                                            {
                                                "numActiveApplications": 0,
                                                "numPendingApplications": 1,
                                                "resourcesUsed": {
                                                    "memory": 0,
                                                    "vCores": 0
                                                },
                                                "username": "user2"
                                            },
                                            {
                                                "numActiveApplications": 1,
                                                "numPendingApplications": 0,
                                                "resourcesUsed": {
                                                    "memory": 0,
                                                    "vCores": 0
                                                },
                                                "username": "user1"
                                            }
                                        ]
                                    }
                                },
                                {
                                    "absoluteCapacity": 35.3525,
                                    "absoluteMaxCapacity": 100.0,
                                    "absoluteUsedCapacity": 0.0,
                                    "capacity": 39.5,
                                    "maxActiveApplications": 1,
                                    "maxActiveApplicationsPerUser": 100,
                                    "maxApplications": 3535,
                                    "maxApplicationsPerUser": 353500,
                                    "maxCapacity": 100.0,
                                    "numActiveApplications": 0,
                                    "numApplications": 0,
                                    "numContainers": 0,
                                    "numPendingApplications": 0,
                                    "queueName": "b2",
                                    "resourcesUsed": {
                                        "memory": 0,
                                        "vCores": 0
                                    },
                                    "state": "RUNNING",
                                    "type": "capacitySchedulerLeafQueueInfo",
                                    "usedCapacity": 0.0,
                                    "usedResources": "<memory:0, vCores:0>",
                                    "userLimit": 100,
                                    "userLimitFactor": 100.0,
                                    "users": null
                                },
                                {
                                    "absoluteCapacity": 0.4475,
                                    "absoluteMaxCapacity": 100.0,
                                    "absoluteUsedCapacity": 0.0,
                                    "capacity": 0.5,
                                    "maxActiveApplications": 1,
                                    "maxActiveApplicationsPerUser": 100,
                                    "maxApplications": 44,
                                    "maxApplicationsPerUser": 4400,
                                    "maxCapacity": 100.0,
                                    "numActiveApplications": 0,
                                    "numApplications": 0,
                                    "numContainers": 0,
                                    "numPendingApplications": 0,
                                    "queueName": "b3",
                                    "resourcesUsed": {
                                        "memory": 0,
                                        "vCores": 0
                                    },
                                    "state": "RUNNING",
                                    "type": "capacitySchedulerLeafQueueInfo",
                                    "usedCapacity": 0.0,
                                    "usedResources": "<memory:0, vCores:0>",
                                    "userLimit": 100,
                                    "userLimitFactor": 100.0,
                                    "users": null
                                }
                            ]
                        },
                        "resourcesUsed": {
                            "memory": 0,
                            "vCores": 0
                        },
                        "state": "RUNNING",
                        "usedCapacity": 0.0,
                        "usedResources": "<memory:0, vCores:0>"
                    }
                ]
            },
            "health": {
                "lastrun": 1326381444693,
                "operationsInfo": [
                    {
                        "operation": "last-allocation",
                        "nodeId": "N/A",
                        "containerId": "N/A",
                        "queue": "N/A"
                    },
                    {
                        "operation": "last-release",
                        "nodeId": "host.domain.com:8041",
                        "containerId": "container_1326821518301_0005_01_000001",
                        "queue": "root.default"
                    },
                    {
                        "operation": "last-preemption",
                        "nodeId": "N/A",
                        "containerId": "N/A",
                        "queue": "N/A"
                    },
                    {
                        "operation": "last-reservation",
                        "nodeId": "N/A",
                        "containerId": "N/A",
                        "queue": "N/A"
                    }
                ],
                "lastRunDetails": [
                    {
                        "operation": "releases",
                        "count": 0,
                        "resources": {
                            "memory": 0,
                            "vCores": 0
                        }
                    },
                    {
                        "operation": "allocations",
                        "count": 0,
                        "resources": {
                            "memory": 0,
                            "vCores": 0
                        }
                    },
                    {
                        "operation": "reservations",
                        "count": 0,
                        "resources": {
                            "memory": 0,
                            "vCores": 0
                        }
                    }
                ]
            },
            "type": "capacityScheduler",
            "usedCapacity": 0.0
        }
    }
}
```json

**XML response**

HTTP Request:

      Accept: application/xml
      GET http://rm-http-address:port/ws/v1/cluster/scheduler

Response Header:

      HTTP/1.1 200 OK
      Content-Type: application/xml
      Content-Length: 5778
      Server: Jetty(6.1.26)

Response Body:

```xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<scheduler>
  <schedulerInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="capacityScheduler">
    <capacity>100.0</capacity>
    <usedCapacity>0.0</usedCapacity>
    <maxCapacity>100.0</maxCapacity>
    <queueName>root</queueName>
    <queues>
      <queue>
        <capacity>10.5</capacity>
        <usedCapacity>0.0</usedCapacity>
        <maxCapacity>50.0</maxCapacity>
        <absoluteCapacity>10.5</absoluteCapacity>
        <absoluteMaxCapacity>50.0</absoluteMaxCapacity>
        <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
        <numApplications>0</numApplications>
        <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
        <queueName>a</queueName>
        <state>RUNNING</state>
        <queues>
          <queue>
            <capacity>30.000002</capacity>
            <usedCapacity>0.0</usedCapacity>
            <maxCapacity>50.0</maxCapacity>
            <absoluteCapacity>3.15</absoluteCapacity>
            <absoluteMaxCapacity>25.0</absoluteMaxCapacity>
            <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
            <numApplications>0</numApplications>
            <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
            <queueName>a1</queueName>
            <state>RUNNING</state>
            <queues>
              <queue xsi:type="capacitySchedulerLeafQueueInfo">
                <capacity>85.0</capacity>
                <usedCapacity>0.0</usedCapacity>
                <maxCapacity>100.0</maxCapacity>
                <absoluteCapacity>2.6775</absoluteCapacity>
                <absoluteMaxCapacity>25.0</absoluteMaxCapacity>
                <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
                <numApplications>0</numApplications>
                <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
                <queueName>a1a</queueName>
                <state>RUNNING</state>
                <resourcesUsed>
                  <memory>0</memory>
                  <vCores>0</vCores>
                </resourcesUsed>
                <numActiveApplications>0</numActiveApplications>
                <numPendingApplications>0</numPendingApplications>
                <numContainers>0</numContainers>
                <maxApplications>267</maxApplications>
                <maxApplicationsPerUser>267</maxApplicationsPerUser>
                <maxActiveApplications>1</maxActiveApplications>
                <maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
                <userLimit>100</userLimit>
                <users/>
                <userLimitFactor>1.0</userLimitFactor>
              </queue>
              <queue xsi:type="capacitySchedulerLeafQueueInfo">
                <capacity>15.000001</capacity>
                <usedCapacity>0.0</usedCapacity>
                <maxCapacity>100.0</maxCapacity>
                <absoluteCapacity>0.47250003</absoluteCapacity>
                <absoluteMaxCapacity>25.0</absoluteMaxCapacity>
                <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
                <numApplications>0</numApplications>
                <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
                <queueName>a1b</queueName>
                <state>RUNNING</state>
                <resourcesUsed>
                  <memory>0</memory>
                  <vCores>0</vCores>
                </resourcesUsed>
                <numActiveApplications>0</numActiveApplications>
                <numPendingApplications>0</numPendingApplications>
                <numContainers>0</numContainers>
                <maxApplications>47</maxApplications>
                <maxApplicationsPerUser>47</maxApplicationsPerUser>
                <maxActiveApplications>1</maxActiveApplications>
                <maxActiveApplicationsPerUser>1</maxActiveApplicationsPerUser>
                <userLimit>100</userLimit>
                <users/>
                <userLimitFactor>1.0</userLimitFactor>
              </queue>
            </queues>
            <resourcesUsed>
              <memory>0</memory>
              <vCores>0</vCores>
            </resourcesUsed>
          </queue>
          <queue xsi:type="capacitySchedulerLeafQueueInfo">
            <capacity>70.0</capacity>
            <usedCapacity>0.0</usedCapacity>
            <maxCapacity>100.0</maxCapacity>
            <absoluteCapacity>7.35</absoluteCapacity>
            <absoluteMaxCapacity>50.0</absoluteMaxCapacity>
            <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
            <numApplications>0</numApplications>
            <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
            <queueName>a2</queueName>
            <state>RUNNING</state>
            <resourcesUsed>
              <memory>0</memory>
              <vCores>0</vCores>
            </resourcesUsed>
            <numActiveApplications>0</numActiveApplications>
            <numPendingApplications>0</numPendingApplications>
            <numContainers>0</numContainers>
            <maxApplications>735</maxApplications>
            <maxApplicationsPerUser>73500</maxApplicationsPerUser>
            <maxActiveApplications>1</maxActiveApplications>
            <maxActiveApplicationsPerUser>100</maxActiveApplicationsPerUser>
            <userLimit>100</userLimit>
            <users/>
            <userLimitFactor>100.0</userLimitFactor>
          </queue>
        </queues>
        <resourcesUsed>
          <memory>0</memory>
          <vCores>0</vCores>
        </resourcesUsed>
      </queue>
      <queue>
        <capacity>89.5</capacity>
        <usedCapacity>0.0</usedCapacity>
        <maxCapacity>100.0</maxCapacity>
        <absoluteCapacity>89.5</absoluteCapacity>
        <absoluteMaxCapacity>100.0</absoluteMaxCapacity>
        <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
        <numApplications>2</numApplications>
        <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
        <queueName>b</queueName>
        <state>RUNNING</state>
        <queues>
          <queue xsi:type="capacitySchedulerLeafQueueInfo">
            <capacity>60.000004</capacity>
            <usedCapacity>0.0</usedCapacity>
            <maxCapacity>100.0</maxCapacity>
            <absoluteCapacity>53.7</absoluteCapacity>
            <absoluteMaxCapacity>100.0</absoluteMaxCapacity>
            <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
            <numApplications>2</numApplications>
            <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
            <queueName>b1</queueName>
            <state>RUNNING</state>
            <resourcesUsed>
              <memory>0</memory>
              <vCores>0</vCores>
            </resourcesUsed>
            <numActiveApplications>1</numActiveApplications>
            <numPendingApplications>1</numPendingApplications>
            <numContainers>0</numContainers>
            <maxApplications>5370</maxApplications>
            <maxApplicationsPerUser>537000</maxApplicationsPerUser>
            <maxActiveApplications>1</maxActiveApplications>
            <maxActiveApplicationsPerUser>100</maxActiveApplicationsPerUser>
            <userLimit>100</userLimit>
            <users>
              <user>
                <username>user2</username>
                <resourcesUsed>
                  <memory>0</memory>
                  <vCores>0</vCores>
                </resourcesUsed>
                <numPendingApplications>1</numPendingApplications>
                <numActiveApplications>0</numActiveApplications>
              </user>
              <user>
                <username>user1</username>
                <resourcesUsed>
                  <memory>0</memory>
                  <vCores>0</vCores>
                </resourcesUsed>
                <numPendingApplications>0</numPendingApplications>
                <numActiveApplications>1</numActiveApplications>
              </user>
            </users>
            <userLimitFactor>100.0</userLimitFactor>
          </queue>
          <queue xsi:type="capacitySchedulerLeafQueueInfo">
            <capacity>39.5</capacity>
            <usedCapacity>0.0</usedCapacity>
            <maxCapacity>100.0</maxCapacity>
            <absoluteCapacity>35.3525</absoluteCapacity>
            <absoluteMaxCapacity>100.0</absoluteMaxCapacity>
            <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
            <numApplications>0</numApplications>
            <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
            <queueName>b2</queueName>
            <state>RUNNING</state>
            <resourcesUsed>
              <memory>0</memory>
              <vCores>0</vCores>
            </resourcesUsed>
            <numActiveApplications>0</numActiveApplications>
            <numPendingApplications>0</numPendingApplications>
            <numContainers>0</numContainers>
            <maxApplications>3535</maxApplications>
            <maxApplicationsPerUser>353500</maxApplicationsPerUser>
            <maxActiveApplications>1</maxActiveApplications>
            <maxActiveApplicationsPerUser>100</maxActiveApplicationsPerUser>
            <userLimit>100</userLimit>
            <users/>
            <userLimitFactor>100.0</userLimitFactor>
          </queue>
          <queue xsi:type="capacitySchedulerLeafQueueInfo">
            <capacity>0.5</capacity>
            <usedCapacity>0.0</usedCapacity>
            <maxCapacity>100.0</maxCapacity>
            <absoluteCapacity>0.4475</absoluteCapacity>
            <absoluteMaxCapacity>100.0</absoluteMaxCapacity>
            <absoluteUsedCapacity>0.0</absoluteUsedCapacity>
            <numApplications>0</numApplications>
            <usedResources>&lt;memory:0, vCores:0&gt;</usedResources>
            <queueName>b3</queueName>
            <state>RUNNING</state>
            <resourcesUsed>
              <memory>0</memory>
              <vCores>0</vCores>
            </resourcesUsed>
            <numActiveApplications>0</numActiveApplications>
            <numPendingApplications>0</numPendingApplications>
            <numContainers>0</numContainers>
            <maxApplications>44</maxApplications>
            <maxApplicationsPerUser>4400</maxApplicationsPerUser>
            <maxActiveApplications>1</maxActiveApplications>
            <maxActiveApplicationsPerUser>100</maxActiveApplicationsPerUser>
            <userLimit>100</userLimit>
            <users/>
            <userLimitFactor>100.0</userLimitFactor>
          </queue>
        </queues>
        <resourcesUsed>
          <memory>0</memory>
          <vCores>0</vCores>
        </resourcesUsed>
      </queue>
    </queues>
    <health>
      <lastrun>1326381444693</lastrun>
      <operationsInfo>
        <operation>last-allocation</operation>
        <nodeId>N/A</nodeId>
        <containerId>N/A</containerId>
        <queue>N/A</queue>
      </operationsInfo>
      <operationsInfo>
        <operation>last-release</operation>
        <nodeId>host.domain.com:8041</nodeId>
        <containerId>container_1326821518301_0005_01_000001</containerId>
        <queue>root.default</queue>
      </operationsInfo>
      <operationsInfo>
        <operation>last-preemption</operation>
        <nodeId>N/A</nodeId>
        <containerId>N/A</containerId>
        <queue>N/A</queue>
      </operationsInfo>
      <operationsInfo>
        <operation>last-reservation</operation>
        <nodeId>N/A</nodeId>
        <containerId>N/A</containerId>
        <queue>N/A</queue>
      </operationsInfo>
      <lastRunDetails>
        <operation>releases</operation>
        <count>0</count>
        <resources>
          <memory>0</memory>
          <vCores>0</vCores>
        </resources>
      </lastRunDetails>
      <lastRunDetails>
        <operation>allocations</operation>
        <count>0</count>
        <resources>
          <memory>0</memory>
          <vCores>0</vCores>
        </resources>
      </lastRunDetails>
      <lastRunDetails>
        <operation>reservations</operation>
        <count>0</count>
        <resources>
          <memory>0</memory>
          <vCores>0</vCores>
        </resources>
      </lastRunDetails>
    </health>
  </schedulerInfo>
</scheduler>

Fifo 调度器 API

schedulerInfo 对象的元素

项目 数据类型 描述
type string 调度程序类型 - fifoScheduler
capacity 浮点数 队列容量(百分比)
usedCapacity 浮点数 已使用的队列容量(百分比)
qstate string 队列状态 - 有效值包括:已停止、正在运行
minQueueMemoryCapacity int 最小队列内存容量
maxQueueMemoryCapacity int 最大队列内存容量
numNodes int 总节点数
usedNodeCapacity int 已使用的节点容量
availNodeCapacity int 可用节点容量
totalNodeCapacity int 总节点容量
numContainers int 容器数量

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/scheduler

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "scheduler":
  {
    "schedulerInfo":
    {
      "type":"fifoScheduler",
      "capacity":1,
      "usedCapacity":"NaN",
      "qstate":"RUNNING",
      "minQueueMemoryCapacity":1024,
      "maxQueueMemoryCapacity":10240,
      "numNodes":0,
      "usedNodeCapacity":0,
      "availNodeCapacity":0,
      "totalNodeCapacity":0,
      "numContainers":0
    }
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/scheduler
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 432
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<scheduler>
  <schedulerInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="fifoScheduler">
    <capacity>1.0</capacity>
    <usedCapacity>NaN</usedCapacity>
    <qstate>RUNNING</qstate>
    <minQueueMemoryCapacity>1024</minQueueMemoryCapacity>
    <maxQueueMemoryCapacity>10240</maxQueueMemoryCapacity>
    <numNodes>0</numNodes>
    <usedNodeCapacity>0</usedNodeCapacity>
    <availNodeCapacity>0</availNodeCapacity>
    <totalNodeCapacity>0</totalNodeCapacity>
    <numContainers>0</numContainers>
  </schedulerInfo>
</scheduler>

公平调度程序 API

schedulerInfo 对象的元素

项目 数据类型 描述
type string 调度程序类型 - fairScheduler
rootQueue 根队列对象 根队列资源集合

所有队列对象的元素

项目 数据类型 描述
maxApps int 队列可拥有的最大应用程序数量
minResources 单个资源对象 队列保证的已配置最小资源
maxResources 单个资源对象 队列允许的已配置最大资源
usedResources 单个资源对象 队列内分配给容器的资源总和
fairResources 单个资源对象 队列的公平资源份额
clusterResources 单个资源对象 集群容量
queueName string 队列名称
schedulingPolicy string 队列使用的调度策略名称
childQueues 队列数组(JSON)/队列对象(XML) 子队列信息集合。如果队列没有子队列或为叶队列,则省略。
allocatedContainers int 已分配容器数量
demandResources 单个资源对象 此队列中容器请求但调度程序尚未满足的资源
pendingContainers int 挂起容器数量
preemptable 布尔值 如果此队列中的容器可以被抢占,则为 true
reservedContainers int 已保留容器数量
steadyFairResources 单个资源对象 队列的稳定公平份额

叶队列对象的附加元素(“childQueues”属性除外)

项目 数据类型 描述
type string 队列类型 - fairSchedulerLeafQueueInfo
numActiveApps int 此队列中的活动应用程序数
numPendingApps int 此队列中的挂起应用程序数

(群集/需求/公平/最大/最小/已用/*)队列中资源对象的元素

项目 数据类型 描述
memory int 已用内存量 (以 MB 为单位)
vCores int 虚拟内核数

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/scheduler

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
    "scheduler": {
        "schedulerInfo": {
            "rootQueue": {
                "allocatedContainers": 0,
                "childQueues": {
                    "queue": [
                        {
                            "allocatedContainers": 0,
                            "clusterResources": {
                                "memory": 8192,
                                "vCores": 8
                            },
                            "demandResources": {
                                "memory": 0,
                                "vCores": 0
                            },
                            "fairResources": {
                                "memory": 0,
                                "vCores": 0
                            },
                            "maxApps": 2147483647,
                            "maxResources": {
                                "memory": 8192,
                                "vCores": 8
                            },
                            "minResources": {
                                "memory": 0,
                                "vCores": 0
                            },
                            "numActiveApps": 0,
                            "numPendingApps": 0,
                            "pendingContainers": 0,
                            "preemptable": true,
                            "queueName": "root.default",
                            "reservedContainers": 0,
                            "schedulingPolicy": "fair",
                            "steadyFairResources": {
                                "memory": 4096,
                                "vCores": 0
                            },
                            "type": "fairSchedulerLeafQueueInfo",
                            "usedResources": {
                                "memory": 0,
                                "vCores": 0
                            }
                        },
                        {
                            "allocatedContainers": 0,
                            "childQueues": {
                                "queue": [
                                    {
                                        "allocatedContainers": 0,
                                        "clusterResources": {
                                            "memory": 8192,
                                            "vCores": 8
                                        },
                                        "demandResources": {
                                            "memory": 0,
                                            "vCores": 0
                                        },
                                        "fairResources": {
                                            "memory": 10000,
                                            "vCores": 0
                                        },
                                        "maxApps": 2147483647,
                                        "maxResources": {
                                            "memory": 8192,
                                            "vCores": 8
                                        },
                                        "minResources": {
                                            "memory": 5000,
                                            "vCores": 0
                                        },
                                        "numActiveApps": 0,
                                        "numPendingApps": 0,
                                        "pendingContainers": 0,
                                        "preemptable": true,
                                        "queueName": "root.sample_queue.sample_sub_queue",
                                        "reservedContainers": 0,
                                        "schedulingPolicy": "fair",
                                        "steadyFairResources": {
                                            "memory": 4096,
                                            "vCores": 0
                                        },
                                        "type": "fairSchedulerLeafQueueInfo",
                                        "usedResources": {
                                            "memory": 0,
                                            "vCores": 0
                                        }
                                    }
                                ]
                            },
                            "clusterResources": {
                                "memory": 8192,
                                "vCores": 8
                            },
                            "demandResources": {
                                "memory": 0,
                                "vCores": 0
                            },
                            "fairResources": {
                                "memory": 10000,
                                "vCores": 0
                            },
                            "maxApps": 50,
                            "maxResources": {
                                "memory": 8192,
                                "vCores": 0
                            },
                            "minResources": {
                                "memory": 10000,
                                "vCores": 0
                            },
                            "pendingContainers": 0,
                            "preemptable": true,
                            "queueName": "root.sample_queue",
                            "reservedContainers": 0,
                            "schedulingPolicy": "fair",
                            "steadyFairResources": {
                                "memory": 4096,
                                "vCores": 0
                            },
                            "usedResources": {
                                "memory": 0,
                                "vCores": 0
                            }
                        }
                    ]
                },
                "clusterResources": {
                    "memory": 8192,
                    "vCores": 8
                },
                "demandResources": {
                    "memory": 0,
                    "vCores": 0
                },
                "fairResources": {
                    "memory": 8192,
                    "vCores": 8
                },
                "maxApps": 2147483647,
                "maxResources": {
                    "memory": 8192,
                    "vCores": 8
                },
                "minResources": {
                    "memory": 0,
                    "vCores": 0
                },
                "pendingContainers": 0,
                "preemptable": true,
                "queueName": "root",
                "reservedContainers": 0,
                "schedulingPolicy": "fair",
                "steadyFairResources": {
                    "memory": 8192,
                    "vCores": 8
                },
                "usedResources": {
                    "memory": 0,
                    "vCores": 0
                }
            },
            "type": "fairScheduler"
        }
    }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/scheduler
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 2321
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<scheduler>
  <schedulerInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="fairScheduler">
    <rootQueue>
      <maxApps>2147483647</maxApps>
      <minResources>
        <memory>0</memory>
        <vCores>0</vCores>
      </minResources>
      <maxResources>
        <memory>8192</memory>
        <vCores>8</vCores>
      </maxResources>
      <usedResources>
        <memory>0</memory>
        <vCores>0</vCores>
      </usedResources>
      <demandResources>
        <memory>0</memory>
        <vCores>0</vCores>
      </demandResources>
      <steadyFairResources>
        <memory>8192</memory>
        <vCores>8</vCores>
      </steadyFairResources>
      <fairResources>
        <memory>8192</memory>
        <vCores>8</vCores>
      </fairResources>
      <clusterResources>
        <memory>8192</memory>
        <vCores>8</vCores>
      </clusterResources>
      <pendingContainers>0</pendingContainers>
      <allocatedContainers>0</allocatedContainers>
      <reservedContainers>0</reservedContainers>
      <queueName>root</queueName>
      <schedulingPolicy>fair</schedulingPolicy>
      <preemptable>true</preemptable>
      <childQueues>
        <queue xsi:type="fairSchedulerLeafQueueInfo">
          <maxApps>2147483647</maxApps>
          <minResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </minResources>
          <maxResources>
            <memory>8192</memory>
            <vCores>8</vCores>
          </maxResources>
          <usedResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </usedResources>
          <demandResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </demandResources>
          <steadyFairResources>
            <memory>4096</memory>
            <vCores>0</vCores>
          </steadyFairResources>
          <fairResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </fairResources>
          <clusterResources>
            <memory>8192</memory>
            <vCores>8</vCores>
          </clusterResources>
          <pendingContainers>0</pendingContainers>
          <allocatedContainers>0</allocatedContainers>
          <reservedContainers>0</reservedContainers>
          <queueName>root.default</queueName>
          <schedulingPolicy>fair</schedulingPolicy>
          <preemptable>true</preemptable>
          <numPendingApps>0</numPendingApps>
          <numActiveApps>0</numActiveApps>
        </queue>
        <queue>
          <maxApps>50</maxApps>
          <minResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </minResources>
          <maxResources>
            <memory>8192</memory>
            <vCores>0</vCores>
          </maxResources>
          <usedResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </usedResources>
          <demandResources>
            <memory>0</memory>
            <vCores>0</vCores>
          </demandResources>
          <steadyFairResources>
            <memory>4096</memory>
            <vCores>0</vCores>
          </steadyFairResources>
          <fairResources>
            <memory>10000</memory>
            <vCores>0</vCores>
          </fairResources>
          <clusterResources>
            <memory>8192</memory>
            <vCores>8</vCores>
          </clusterResources>
          <pendingContainers>0</pendingContainers>
          <allocatedContainers>0</allocatedContainers>
          <reservedContainers>0</reservedContainers>
          <queueName>root.sample_queue</queueName>
          <schedulingPolicy>fair</schedulingPolicy>
          <preemptable>true</preemptable>
          <childQueues>
            <queue xsi:type="fairSchedulerLeafQueueInfo">
              <maxApps>2147483647</maxApps>
              <minResources>
                <memory>5000</memory>
                <vCores>0</vCores>
              </minResources>
              <maxResources>
                <memory>8192</memory>
                <vCores>8</vCores>
              </maxResources>
              <usedResources>
                <memory>0</memory>
                <vCores>0</vCores>
              </usedResources>
              <demandResources>
                <memory>0</memory>
                <vCores>0</vCores>
              </demandResources>
              <steadyFairResources>
                <memory>4096</memory>
                <vCores>0</vCores>
              </steadyFairResources>
              <fairResources>
                <memory>10000</memory>
                <vCores>0</vCores>
              </fairResources>
              <clusterResources>
                <memory>8192</memory>
                <vCores>8</vCores>
              </clusterResources>
              <pendingContainers>0</pendingContainers>
              <allocatedContainers>0</allocatedContainers>
              <reservedContainers>0</reservedContainers>
              <queueName>root.sample_queue.sample_sub_queue</queueName>
              <schedulingPolicy>fair</schedulingPolicy>
              <preemptable>true</preemptable>
              <numPendingApps>0</numPendingApps>
              <numActiveApps>0</numActiveApps>
            </queue>
          </childQueues>
        </queue>
      </childQueues>
    </rootQueue>
  </schedulerInfo>
</scheduler>

群集应用程序 API

使用应用程序 API,您可以获取资源集合,其中每个资源都代表一个应用程序。当您对该资源运行 GET 操作时,您会获取应用程序对象集合。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

可以为 GET 操作指定多个参数。开始和结束时间具有开始和结束参数,允许您指定范围。例如,可以请求在 2011 年 12 月 19 日上午 1:00 到下午 2:00 之间启动的所有应用程序,其中 startedTimeBegin=1324256400&startedTimeEnd=1324303200。如果未指定开始参数,则默认为 0,如果未指定结束参数,则默认为无穷大。此 API 的所有查询参数都将筛选所有应用程序。但是,queue 查询参数只会隐式筛选当前在给定队列中的未完成应用程序。

  • state [已弃用] - 应用程序状态
    • states - 匹配给定应用程序状态的应用程序,指定为逗号分隔列表。
    • finalStatus - 应用程序的最终状态 - 由应用程序本身报告
    • user - 用户名
    • queue - 当前在此队列中的未完成应用程序
    • limit - 要返回的应用程序对象总数
    • startedTimeBegin - 开始时间以此时间开始的应用程序,以自纪元以来的毫秒数指定
    • startedTimeEnd - 开始时间以此时间结束的应用程序,以自纪元以来的毫秒数指定
    • finishedTimeBegin - 完成时间以此时间开始的应用程序,以自纪元以来的毫秒数指定
    • finishedTimeEnd - 完成时间以此时间结束的应用程序,以自纪元以来的毫秒数指定
    • applicationTypes - 匹配给定应用程序类型的应用程序,指定为逗号分隔列表。
    • applicationTags - 匹配给定应用程序标签中任何一个标签的应用程序,指定为逗号分隔列表。
    • name - 应用程序名称
    • deSelects - 将在结果中跳过的通用字段。

apps (应用程序) 对象的元素

当您请求应用程序列表时,信息将作为应用程序对象集合返回。另请参阅 应用程序 API 了解应用程序对象的语法。

项目 数据类型 描述
app 应用程序对象数组 (JSON)/零个或多个应用程序对象 (XML) 应用程序对象集合

deSelects 参数的元素

帮助不需要某些信息的请求者减少开销。

当前支持的项目

项目 数据类型 描述
resouceRequests 逗号分隔的字符串 在返回中跳过应用程序的资源请求

例如

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "apps":
  {
    "app":
    [
      {
        "id": "application_1476912658570_0002",
        "user": "user2",
        "name": "word count",
        "queue": "default",
        "state": "FINISHED",
        "finalStatus": "SUCCEEDED",
        "progress": 100,
        "trackingUI": "History",
        "trackingUrl": "http://host.domain.com:8088/cluster/app/application_1476912658570_0002",
        "diagnostics": "...",
        "clusterId": 1476912658570,
        "applicationType": "MAPREDUCE",
        "applicationTags": "",
        "priority": -1,
        "startedTime": 1476913457320,
        "finishedTime": 1476913761898,
        "elapsedTime": 304578,
        "amContainerLogs": "http://host.domain.com:8042/node/containerlogs/container_1476912658570_0002_02_000001/user2",
        "amHostHttpAddress": "host.domain.com:8042",
        "allocatedMB": 0,
        "allocatedVCores": 0,
        "runningContainers": 0,
        "memorySeconds": 206464,
        "vcoreSeconds": 201,
        "queueUsagePercentage": 0,
        "clusterUsagePercentage": 0,
        "preemptedResourceMB": 0,
        "preemptedResourceVCores": 0,
        "numNonAMContainerPreempted": 0,
        "numAMContainerPreempted": 0,
        "logAggregationStatus": "DISABLED",
        "unmanagedApplication": false,
        "appNodeLabelExpression": "",
        "amNodeLabelExpression": "",
        "resourceRequests": [
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 0
            },
            "relaxLocality": true,
            "resourceName": "*"
        },
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 20
            },
            "relaxLocality": true,
            "resourceName": "host1.domain.com"
        },
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 20
            },
            "relaxLocality": true,
            "resourceName": "host2.domain.com"
        }]
      },
      {
        "id": "application_1476912658570_0001",
        "user": "user1",
        "name": "Sleep job",
        "queue": "default",
        "state": "FINISHED",
        "finalStatus": "SUCCEEDED",
        "progress": 100,
        "trackingUI": "History",
        "trackingUrl": "http://host.domain.com:8088/cluster/app/application_1476912658570_0001",
        "diagnostics": "...",
        "clusterId": 1476912658570,
        "applicationType": "YARN",
        "applicationTags": "",
        "priority": -1,
        "startedTime": 1476913464750,
        "finishedTime": 1476913863175,
        "elapsedTime": 398425,
        "amContainerLogs": "http://host.domain.com:8042/node/containerlogs/container_1476912658570_0001_02_000001/user1",
        "amHostHttpAddress": "host.domain.com:8042",
        "allocatedMB": 0,
        "allocatedVCores": 0,
        "runningContainers": 0,
        "memorySeconds": 205410,
        "vcoreSeconds": 200,
        "queueUsagePercentage": 0,
        "clusterUsagePercentage": 0,
        "preemptedResourceMB": 0,
        "preemptedResourceVCores": 0,
        "numNonAMContainerPreempted": 0,
        "numAMContainerPreempted": 0,
        "logAggregationStatus": "DISABLED",
        "unmanagedApplication": false,
        "appNodeLabelExpression": "",
        "amNodeLabelExpression": "",
        "resourceRequests": [
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 0
            },
            "relaxLocality": true,
            "resourceName": "*"
        },
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 20
            },
            "relaxLocality": true,
            "resourceName": "host3.domain.com"
        },
        {
            "capability": {
                "memory": 4096,
                "virtualCores": 1
            },
            "nodeLabelExpression": "",
            "numContainers": 0,
            "priority": {
                "priority": 20
            },
            "relaxLocality": true,
            "resourceName": "host4.domain.com"
        }]
      }
    ]
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 2459
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<apps>
    <app>
        <id>application_1476912658570_0002</id>
        <user>user2</user>
        <name>word count</name>
        <queue>default</queue>
        <state>FINISHED</state>
        <finalStatus>SUCCEEDED</finalStatus>
        <progress>100.0</progress>
        <trackingUI>History</trackingUI>
        <trackingUrl>http://host.domain.com:8088/cluster/app/application_1476912658570_0002</trackingUrl>
        <diagnostics>...</diagnostics>
        <clusterId>1476912658570</clusterId>
        <applicationType>YARN</applicationType>
        <applicationTags></applicationTags>
        <priority>-1</priority>
        <startedTime>1476913457320</startedTime>
        <finishedTime>1476913761898</finishedTime>
        <elapsedTime>304578</elapsedTime>
        <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1476912658570_0002_02_000001/user2</amContainerLogs>
        <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
        <allocatedMB>-1</allocatedMB>
        <allocatedVCores>-1</allocatedVCores>
        <runningContainers>-1</runningContainers>
        <memorySeconds>206464</memorySeconds>
        <vcoreSeconds>201</vcoreSeconds>
        <queueUsagePercentage>0.0</queueUsagePercentage>
        <clusterUsagePercentage>0.0</clusterUsagePercentage>
        <preemptedResourceMB>0</preemptedResourceMB>
        <preemptedResourceVCores>0</preemptedResourceVCores>
        <numNonAMContainerPreempted>0</numNonAMContainerPreempted>
        <numAMContainerPreempted>0</numAMContainerPreempted>
        <logAggregationStatus>DISABLED</logAggregationStatus>
        <unmanagedApplication>false</unmanagedApplication>
        <appNodeLabelExpression></appNodeLabelExpression>
        <amNodeLabelExpression></amNodeLabelExpression>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>0</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>*</resourceName>
        </resourceRequests>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>20</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>host1.domain.com</resourceName>
        </resourceRequests>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>20</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>host2.domain.com</resourceName>
        </resourceRequests>
    </app>
    <app>
        <id>application_1476912658570_0001</id>
        <user>user1</user>
        <name>Sleep job</name>
        <queue>default</queue>
        <state>FINISHED</state>
        <finalStatus>SUCCEEDED</finalStatus>
        <progress>100.0</progress>
        <trackingUI>History</trackingUI>
        <trackingUrl>http://host.domain.com:8088/cluster/app/application_1476912658570_0001</trackingUrl>
        <diagnostics>...</diagnostics>
        <clusterId>1476912658570</clusterId>
        <applicationType>YARN</applicationType>
        <applicationTags></applicationTags>
        <priority>-1</priority>
        <startedTime>1476913464750</startedTime>
        <finishedTime>1476913863175</finishedTime>
        <elapsedTime>398425</elapsedTime>
        <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1476912658570_0001_02_000001/user1</amContainerLogs>
        <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
        <allocatedMB>-1</allocatedMB>
        <allocatedVCores>-1</allocatedVCores>
        <runningContainers>-1</runningContainers>
        <memorySeconds>205410</memorySeconds>
        <vcoreSeconds>200</vcoreSeconds>
        <queueUsagePercentage>0.0</queueUsagePercentage>
        <clusterUsagePercentage>0.0</clusterUsagePercentage>
        <preemptedResourceMB>0</preemptedResourceMB>
        <preemptedResourceVCores>0</preemptedResourceVCores>
        <numNonAMContainerPreempted>0</numNonAMContainerPreempted>
        <numAMContainerPreempted>0</numAMContainerPreempted>
        <logAggregationStatus>DISABLED</logAggregationStatus>
        <unmanagedApplication>false</unmanagedApplication>
        <appNodeLabelExpression></appNodeLabelExpression>
        <amNodeLabelExpression></amNodeLabelExpression>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>0</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>*</resourceName>
        </resourceRequests>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>20</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>host1.domain.com</resourceName>
        </resourceRequests>
        <resourceRequests>
          <capability>
            <memory>4096</memory>
            <virtualCores>1</virtualCores>
          </capability>
          <nodeLabelExpression/>
          <numContainers>0</numContainers>
          <priority>
            <priority>20</priority>
          </priority>
          <relaxLocality>true</relaxLocality>
          <resourceName>host2.domain.com</resourceName>
        </resourceRequests>
    </app>
</apps>

群集应用程序统计信息 API

使用应用程序统计信息 API,您可以获取一个三元组集合,其中每个三元组包含应用程序类型、应用程序状态以及 ResourceManager 上下文中此类型和此状态的应用程序数。请注意,出于性能考虑,我们目前每个查询仅支持最多一种 applicationType。我们可能会在未来支持每个查询的多个 applicationType 以及更多统计信息。当您对此资源运行 GET 操作时,您会获取一个 statItem 对象集合。

URI

支持的 HTTP 操作

  • GET

必需的查询参数

可以指定两个参数。参数不区分大小写。

  • states - 应用程序状态,指定为逗号分隔的列表。如果未提供状态,API 将枚举所有应用程序状态并返回其计数。
    • applicationTypes - 应用程序类型,指定为逗号分隔的列表。如果未提供 applicationTypes,API 将计算任何应用程序类型的应用程序。在这种情况下,响应显示 * 以指示任何应用程序类型。请注意,我们暂时只支持最多一种 applicationType。否则,用户将收到 BadRequestException。

appStatInfo (statItems) 对象的元素

当您请求统计项列表时,信息将作为 statItem 对象的集合返回

项目 数据类型 描述
statItem statItem 对象数组 (JSON)/零个或多个 statItem 对象 (XML) statItem 对象的集合

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/appstatistics?states=accepted,running,finished&applicationTypes=mapreduce

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "appStatInfo":
  {
    "statItem":
    [
       {
          "state" : "accepted",
          "type" : "mapreduce",
          "count" : 4
       },
       {
          "state" : "running",
          "type" : "mapreduce",
          "count" : 1
       },
       {
          "state" : "finished",
          "type" : "mapreduce",
          "count" : 7
       }
    ]
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/appstatistics?states=accepted,running,finished&applicationTypes=mapreduce
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 2459
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appStatInfo>
  <statItem>
    <state>accepted</state>
    <type>mapreduce</type>
    <count>4</count>
  </statItem>
  <statItem>
    <state>running</state>
    <type>mapreduce</type>
    <count>1</count>
  </statItem>
  <statItem>
    <state>finished</state>
    <type>mapreduce</type>
    <count>7</count>
  </statItem>
</appStatInfo>

群集应用程序 API

应用程序资源包含有关提交到群集的特定应用程序的信息。

URI

使用以下 URI 从由 appid 值标识的应用程序获取 app 对象。

支持的 HTTP 操作

  • GET

支持的查询参数

  None

app (应用程序) 对象的元素

请注意,根据安全设置,用户可能无法看到所有字段。

项目 数据类型 描述
id string 应用程序 ID
user string 启动应用程序的用户
name string 应用程序名称
queue string 应用程序提交到的队列
state string 根据 ResourceManager 的应用程序状态 - 有效值是 YarnApplicationState 枚举的成员:NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED
finalStatus string 如果已完成,则应用程序的最终状态 - 由应用程序本身报告 - 有效值是 FinalApplicationStatus 枚举的成员:UNDEFINED、SUCCEEDED、FAILED、KILLED
progress 浮点数 应用程序的进度(以百分比表示)
trackingUI string 跟踪 URL 当前指向的位置 - 历史记录(对于历史记录服务器)或 ApplicationMaster
trackingUrl string 可用于跟踪应用程序的 Web URL
diagnostics string 详细的诊断信息
clusterId long 集群 ID
applicationType string 应用程序类型
applicationTags string 应用程序的逗号分隔标记
priority string 已提交应用程序的优先级
startedTime long 应用程序启动时间(自纪元以来的毫秒数)
finishedTime long 应用程序完成的时间(自纪元以来的毫秒数)
elapsedTime long 自应用程序启动以来的经过时间(以毫秒为单位)
amContainerLogs string 应用程序主容器日志的 URL
amHostHttpAddress string 应用程序主节点的 HTTP 地址
amRPCAddress string 应用程序主 RPC 地址
allocatedMB int 分配给应用程序正在运行的容器的内存总和(以 MB 为单位)
allocatedVCores int 分配给应用程序正在运行的容器的虚拟内核总和
runningContainers int 当前为应用程序运行的容器数
memorySeconds long 应用程序已分配的内存量(兆字节秒)
vcoreSeconds long 应用程序已分配的 CPU 资源量(虚拟内核秒)
queueUsagePercentage 浮点数 应用程序正在使用的队列资源百分比
clusterUsagePercentage 浮点数 应用程序正在使用的集群资源百分比。
preemptedResourceMB long 被抢占容器使用的内存
preemptedResourceVCores long 被抢占容器使用的虚拟核心数
numNonAMContainerPreempted int 被抢占的标准容器数
numAMContainerPreempted int 被抢占的应用程序主容器数
logAggregationStatus string 日志聚合状态 - 有效值是 LogAggregationStatus 枚举的成员:DISABLED、NOT_START、RUNNING、RUNNING_WITH_FAILURE、SUCCEEDED、FAILED、TIME_OUT
unmanagedApplication 布尔值 应用程序是否为非托管。
appNodeLabelExpression string 节点标签表达式,用于识别应用程序容器默认情况下应在哪些节点上运行。
amNodeLabelExpression string 节点标签表达式,用于识别应用程序 AM 容器应在哪个节点上运行。

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1476912658570_0002

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "app": {
    "id": "application_1476912658570_0002",
    "user": "user2",
    "name": "word count",
    "queue": "default",
    "state": "FINISHED",
    "finalStatus": "SUCCEEDED",
    "progress": 100,
    "trackingUI": "History",
    "trackingUrl": "http://host.domain.com:8088/cluster/app/application_1476912658570_0002",
    "diagnostics": "...",
    "clusterId": 1476912658570,
    "applicationType": "YARN",
    "applicationTags": "",
    "priority": -1,
    "startedTime": 1476913457320,
    "finishedTime": 1476913761898,
    "elapsedTime": 304578,
    "amContainerLogs": "http://host.domain.com:8042/node/containerlogs/container_1476912658570_0002_02_000001/dr.who",
    "amHostHttpAddress": "host.domain.com:8042",
    "allocatedMB": -1,
    "allocatedVCores": -1,
    "runningContainers": -1,
    "memorySeconds": 206464,
    "vcoreSeconds": 201,
    "queueUsagePercentage": 0,
    "clusterUsagePercentage": 0,
    "preemptedResourceMB": 0,
    "preemptedResourceVCores": 0,
    "numNonAMContainerPreempted": 0,
    "numAMContainerPreempted": 0,
    "logAggregationStatus": "DISABLED",
    "unmanagedApplication": false,
    "appNodeLabelExpression": "",
    "amNodeLabelExpression": ""
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1326821518301_0005
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 847
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<app>
    <id>application_1476912658570_0002</id>
    <user>user2</user>
    <name>word count</name>
    <queue>default</queue>
    <state>FINISHED</state>
    <finalStatus>SUCCEEDED</finalStatus>
    <progress>100.0</progress>
    <trackingUI>History</trackingUI>
    <trackingUrl>http://host.domain.com:8088/cluster/app/application_1476912658570_0002</trackingUrl>
    <diagnostics>...</diagnostics>
    <clusterId>1476912658570</clusterId>
    <applicationType>YARN</applicationType>
    <applicationTags></applicationTags>
    <priority>-1</priority>
    <startedTime>1476913457320</startedTime>
    <finishedTime>1476913761898</finishedTime>
    <elapsedTime>304578</elapsedTime>
    <amContainerLogs>http://host.domain.com:8042/node/containerlogs/container_1476912658570_0002_02_000001/dr.who</amContainerLogs>
    <amHostHttpAddress>host.domain.com:8042</amHostHttpAddress>
    <allocatedMB>-1</allocatedMB>
    <allocatedVCores>-1</allocatedVCores>
    <runningContainers>-1</runningContainers>
    <memorySeconds>206464</memorySeconds>
    <vcoreSeconds>201</vcoreSeconds>
    <queueUsagePercentage>0.0</queueUsagePercentage>
    <clusterUsagePercentage>0.0</clusterUsagePercentage>
    <preemptedResourceMB>0</preemptedResourceMB>
    <preemptedResourceVCores>0</preemptedResourceVCores>
    <numNonAMContainerPreempted>0</numNonAMContainerPreempted>
    <numAMContainerPreempted>0</numAMContainerPreempted>
    <logAggregationStatus>DISABLED</logAggregationStatus>
    <unmanagedApplication>false</unmanagedApplication>
    <appNodeLabelExpression></appNodeLabelExpression>
    <amNodeLabelExpression></amNodeLabelExpression>
</app>

集群应用程序尝试 API

使用应用程序尝试 API,您可以获取表示应用程序尝试的资源集合。当您对该资源运行 GET 操作时,您将获得应用程序尝试对象集合。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  None

appAttempts 对象的元素

当您请求应用程序尝试列表时,信息将作为应用程序尝试对象数组返回。

appAttempts

项目 数据类型 描述
appAttempt 应用程序尝试对象数组(JSON)/零个或多个应用程序尝试对象(XML) 应用程序尝试对象集合

appAttempt 对象的元素

项目 数据类型 描述
id string 应用程序尝试 ID
nodeId string 尝试运行所在的节点的节点 ID
nodeHttpAddress string 尝试运行所在的节点的节点 HTTP 地址
logsLink string 应用程序尝试日志的 HTTP 链接
containerId string 应用程序尝试的容器 ID
startTime long 尝试的开始时间(自纪元以来的毫秒数)

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1326821518301_0005/appattempts

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
   "appAttempts" : {
      "appAttempt" : [
         {
            "nodeId" : "host.domain.com:8041",
            "nodeHttpAddress" : "host.domain.com:8042",
            "startTime" : 1326381444693,
            "id" : 1,
            "logsLink" : "http://host.domain.com:8042/node/containerlogs/container_1326821518301_0005_01_000001/user1",
            "containerId" : "container_1326821518301_0005_01_000001"
         }
      ]
   }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1326821518301_0005/appattempts
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 575
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appAttempts>
  <appttempt>
    <nodeHttpAddress>host.domain.com:8042</nodeHttpAddress>
    <nodeId>host.domain.com:8041</nodeId>
    <id>1</id>
    <startTime>1326381444693</startTime>
    <containerId>container_1326821518301_0005_01_000001</containerId>
    <logsLink>http://host.domain.com:8042/node/containerlogs/container_1326821518301_0005_01_000001/user1</logsLink>
  </appAttempt>
</appAttempts>

应用程序尝试容器 API

使用容器获取应用程序尝试 API,您可以获取属于应用程序尝试的容器列表。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  None

容器对象的元素

当您请求容器列表时,信息将作为容器对象数组返回。

容器

项目 数据类型 描述
容器 应用程序容器对象数组 (JSON)/零个或多个容器对象 (XML) 应用程序容器对象的集合

容器对象的元素

项目 数据类型 描述
containerId string 容器 ID
allocatedMB long 分配给容器的内存量(单位:MB)
allocatedVCores int 分配给容器的虚拟内核数
assignedNodeId string 尝试运行所在的节点的节点 ID
priority int 容器的分配优先级
startedTime long 尝试的开始时间(自纪元以来的毫秒数)
finishedTime long 尝试完成时间(自纪元以来的毫秒数),如果未完成,则为 0
elapsedTime long 自 startedTime 以来经过的毫秒数
logUrl string 可用于检查容器日志的 Web URL
containerExitStatus int 容器的最终退出状态
containerState string 容器状态,可以是 NEW、RUNNING 或 COMPLETE
nodeHttpAddress string 尝试运行所在的节点的节点 HTTP 地址
nodeId string 尝试运行所在的节点的节点 ID
allocatedResources 资源数组 (JSON)/零个或多个资源对象 (XML) 分配给容器的资源

资源对象的元素

项目 数据类型 描述
memory int 容器的最大内存
vCores int 容器的最大 vcore 数

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/appattempts/{appAttemptId}/containers

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "containers" : {
    "container": [
      {
      "containerId": "container_1531404209605_0008_01_000001",
      "allocatedMB": "1536",
      "allocatedVCores": "1",
      "assignedNodeId": "host.domain.com:37814",
      "priority": "0",
      "startedTime": "1531405909444",
      "finishedTime": "0",
      "elapsedTime": "4112",
      "logUrl": "http://host.domain.com:8042/node/containerlogs/container_1531404209605_0008_01_000001/systest",
      "containerExitStatus": "0",
      "containerState": "RUNNING",
      "nodeHttpAddress": "http://host.domain.com:8042",
      "nodeId": "host.domain.com:37814",
      "allocatedResources": [
         {
            "key": "memory-mb",
            "value": "1536"
         },
         {
            "key": "vcores",
            "value": "1"
         }
       ]
      }
    ]
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/appattempts/{appAttemptId}/containers
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 1104
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<containers>
  <container>
    <containerId>container_1531404209605_0008_01_000001</containerId>
    <allocatedMB>1536</allocatedMB>
    <allocatedVCores>1</allocatedVCores>
    <assignedNodeId>host.domain.com:37814</assignedNodeId>
    <priority>0</priority>
    <startedTime>1531405909444</startedTime>
    <finishedTime>0</finishedTime>
    <elapsedTime>4112</elapsedTime>
    <logUrl>
    http://host.domain.com:8042/node/containerlogs/container_1531404209605_0008_01_000001/systest
    </logUrl>
    <containerExitStatus>0</containerExitStatus>
    <containerState>RUNNING</containerState>
    <nodeHttpAddress>http://host.domain.com:8042</nodeHttpAddress>
    <nodeId>host.domain.com:37814</nodeId>
    <allocatedResources>
      <entry>
        <key>memory-mb</key>
        <value>1536</value>
      </entry>
      <entry>
        <key>vcores</key>
        <value>1</value>
      </entry>
    </allocatedResources>
  </container>
</containers>

应用程序尝试 API 的特定容器

使用应用程序尝试 API 的特定容器,您可以获取有关特定容器的信息,该容器属于应用程序尝试并由容器 ID 选择。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  None

容器对象的元素

项目 数据类型 描述
containerId string 容器 ID
allocatedMB long 分配给容器的内存量(单位:MB)
allocatedVCores int 分配给容器的虚拟内核数
assignedNodeId string 尝试运行所在的节点的节点 ID
priority int 容器的分配优先级
startedTime long 尝试的开始时间(自纪元以来的毫秒数)
finishedTime long 尝试完成时间(自纪元以来的毫秒数),如果未完成,则为 0
elapsedTime long 自 startedTime 以来经过的毫秒数
logUrl string 可用于检查容器日志的 Web URL
containerExitStatus int 容器的最终退出状态
containerState string 容器状态,可以是 NEW、RUNNING 或 COMPLETE
nodeHttpAddress string 尝试运行所在的节点的节点 HTTP 地址
nodeId string 尝试运行所在的节点的节点 ID
allocatedResources 资源数组 (JSON)/零个或多个资源对象 (XML) 分配给容器的资源

资源对象的元素

项目 数据类型 描述
memory int 容器的最大内存
vCores int 容器的最大 vcore 数

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/appattempts/{appAttemptId}/containers/{containerId}

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "container": {
    "containerId": "container_1531404209605_0008_01_000001",
    "allocatedMB": "1536",
    "allocatedVCores": "1",
    "assignedNodeId": "host.domain.com:37814",
    "priority": "0",
    "startedTime": "1531405909444",
    "finishedTime": "0",
    "elapsedTime": "4112",
    "logUrl": "http://host.domain.com:8042/node/containerlogs/container_1531404209605_0008_01_000001/systest",
    "containerExitStatus": "0",
    "containerState": "RUNNING",
    "nodeHttpAddress": "http://host.domain.com:8042",
    "nodeId": "host.domain.com:37814",
    "allocatedResources": [
       {
          "key": "memory-mb",
          "value": "1536"
       },
       {
          "key": "vcores",
          "value": "1"
       }
    ]
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/appattempts/{appAttemptId}/containers/{containerId}
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 1104
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<container>
  <containerId>container_1531404209605_0008_01_000001</containerId>
  <allocatedMB>1536</allocatedMB>
  <allocatedVCores>1</allocatedVCores>
  <assignedNodeId>host.domain.com:37814</assignedNodeId>
  <priority>0</priority>
  <startedTime>1531405909444</startedTime>
  <finishedTime>0</finishedTime>
  <elapsedTime>4112</elapsedTime>
  <logUrl>
  http://host.domain.com:8042/node/containerlogs/container_1531404209605_0008_01_000001/systest
  </logUrl>
  <containerExitStatus>0</containerExitStatus>
  <containerState>RUNNING</containerState>
  <nodeHttpAddress>http://host.domain.com:8042</nodeHttpAddress>
  <nodeId>host.domain.com:37814</nodeId>
  <allocatedResources>
    <entry>
      <key>memory-mb</key>
      <value>1536</value>
    </entry>
    <entry>
      <key>vcores</key>
      <value>1</value>
    </entry>
  </allocatedResources>
</container>

集群节点 API

使用节点 API,您可以获取资源集合,其中每个资源都表示一个节点。当您对此资源运行 GET 操作时,您将获得节点对象集合。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  • 状态 - 节点的状态,以逗号分隔的列表形式指定,有效值包括:NEW、RUNNING、UNHEALTHY、DECOMMISSIONING、DECOMMISSIONED、LOST、REBOOTED、SHUTDOWN

nodes 对象的元素

当您请求节点列表时,信息将以节点对象集合的形式返回。另请参阅 Node API 了解节点对象的语法。

项目 数据类型 描述
node 节点对象数组 (JSON)/零个或多个节点对象 (XML) 节点对象集合

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/nodes

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "nodes":
  {
    "node":
    [
      {
        "rack":"\/default-rack",
        "state":"RUNNING",
        "id":"host.domain.com:54158",
        "nodeHostName":"host.domain.com",
        "nodeHTTPAddress":"host.domain.com:8042",
        "lastHealthUpdate": 1476995346399,
        "version": "3.0.0-alpha2-SNAPSHOT",
        "healthReport":"",
        "numContainers":0,
        "usedMemoryMB":0,
        "availMemoryMB":8192,
        "usedVirtualCores":0,
        "availableVirtualCores":8,
        "resourceUtilization":
        {
          "nodePhysicalMemoryMB":1027,
          "nodeVirtualMemoryMB":1027,
          "nodeCPUUsage":0.016661113128066063,
          "aggregatedContainersPhysicalMemoryMB":0,
          "aggregatedContainersVirtualMemoryMB":0,
          "containersCPUUsage":0
        }
      },
      {
        "rack":"\/default-rack",
        "state":"RUNNING",
        "id":"host.domain.com:54158",
        "nodeHostName":"host.domain.com",
        "nodeHTTPAddress":"host.domain.com:8042",
        "lastHealthUpdate":1476995346399,
        "version":"3.0.0-alpha2-SNAPSHOT",
        "healthReport":"",
        "numContainers":0,
        "usedMemoryMB":0,
        "availMemoryMB":8192,
        "usedVirtualCores":0,
        "availableVirtualCores":8,
        "resourceUtilization":
        {
          "nodePhysicalMemoryMB":1027,
          "nodeVirtualMemoryMB":1027,
          "nodeCPUUsage":0.016661113128066063,
          "aggregatedContainersPhysicalMemoryMB":0,
          "aggregatedContainersVirtualMemoryMB":0,
          "containersCPUUsage":0
        }
      }
    ]
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/nodes
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 1104
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<nodes>
  <node>
    <rack>/default-rack</rack>
    <state>RUNNING</state>
    <id>host1.domain.com:54158</id>
    <nodeHostName>host1.domain.com</nodeHostName>
    <nodeHTTPAddress>host1.domain.com:8042</nodeHTTPAddress>
    <lastHealthUpdate>1476995346399</lastHealthUpdate>
    <version>3.0.0-SNAPSHOT</version>
    <healthReport></healthReport>
    <numContainers>0</numContainers>
    <usedMemoryMB>0</usedMemoryMB>
    <availMemoryMB>8192</availMemoryMB>
    <usedVirtualCores>0</usedVirtualCores>
    <availableVirtualCores>8</availableVirtualCores>
    <resourceUtilization>
        <nodePhysicalMemoryMB>1027</nodePhysicalMemoryMB>
        <nodeVirtualMemoryMB>1027</nodeVirtualMemoryMB>
        <nodeCPUUsage>0.006664445623755455</nodeCPUUsage>
        <aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
        <aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
        <containersCPUUsage>0.0</containersCPUUsage>
    </resourceUtilization>
  </node>
  <node>
    <rack>/default-rack</rack>
    <state>RUNNING</state>
    <id>host2.domain.com:54158</id>
    <nodeHostName>host2.domain.com</nodeHostName>
    <nodeHTTPAddress>host2.domain.com:8042</nodeHTTPAddress>
    <lastHealthUpdate>1476995346399</lastHealthUpdate>
    <version>3.0.0-SNAPSHOT</version>
    <healthReport></healthReport>
    <numContainers>0</numContainers>
    <usedMemoryMB>0</usedMemoryMB>
    <availMemoryMB>8192</availMemoryMB>
    <usedVirtualCores>0</usedVirtualCores>
    <availableVirtualCores>8</availableVirtualCores>
    <resourceUtilization>
        <nodePhysicalMemoryMB>1027</nodePhysicalMemoryMB>
        <nodeVirtualMemoryMB>1027</nodeVirtualMemoryMB>
        <nodeCPUUsage>0.006664445623755455</nodeCPUUsage>
        <aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
        <aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
        <containersCPUUsage>0.0</containersCPUUsage>
    </resourceUtilization>
  </node>
</nodes>

群集节点 API

节点资源包含群集中某个节点的信息。

URI

使用以下 URI 从由 nodeid 值标识的节点获取节点对象。

支持的 HTTP 操作

  • GET

支持的查询参数

  None

node 对象的元素

项目 数据类型 描述
rack string 此节点的机架位置
state string 节点状态 - 有效值包括:NEW、RUNNING、UNHEALTHY、DECOMMISSIONING、DECOMMISSIONED、LOST、REBOOTED、SHUTDOWN
id string 节点 ID
nodeHostName string 节点的主机名
nodeHTTPAddress string 节点的 HTTP 地址
lastHealthUpdate long 节点上次报告其运行状况的时间(自纪元以来的毫秒数)
version string 在节点上运行的 Hadoop 版本
healthReport string 详细运行状况报告
numContainers int 当前在节点上运行的容器总数
usedMemoryMB long 当前在节点上使用的内存总量(以 MB 为单位)
availMemoryMB long 当前在节点上可用的内存总量(以 MB 为单位)
usedVirtualCores long 当前在节点上使用的 vCore 总数
availableVirtualCores long 节点上可用的 vCore 总数
resourceUtilization 对象 节点上的资源利用率
totalResource 对象 节点上的资源

resourceUtilization 对象包含以下元素

项目 数据类型 描述
nodePhysicalMemoryMB int 节点物理内存利用率
nodeVirtualMemoryMB int 节点虚拟内存利用率
nodeCPUUsage 双精度浮点数 节点 CPU 利用率
aggregatedContainersPhysicalMemoryMB int 容器的聚合物理内存利用率
aggregatedContainersVirtualMemoryMB int 容器的聚合虚拟内存利用率
containersCPUUsage 双精度浮点数 容器的聚合 CPU 利用率

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/nodes/h2:1235

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "node":
  {
    "rack":"\/default-rack",
    "state":"RUNNING",
    "id":"host.domain.com:54158",
    "nodeHostName":"host.domain.com",
    "nodeHTTPAddress":"host.domain.com:8042",
    "lastHealthUpdate":1476916746399,
    "version":"3.0.0-SNAPSHOT",
    "healthReport":"",
    "numContainers":0,
    "usedMemoryMB":0,
    "availMemoryMB":8192,
    "usedVirtualCores":0,
    "availableVirtualCores":8,
    "resourceUtilization":
    {
      "nodePhysicalMemoryMB": 968,
      "nodeVirtualMemoryMB": 968,
      "nodeCPUUsage": 0.01332889124751091,
      "aggregatedContainersPhysicalMemoryMB": 0,
      "aggregatedContainersVirtualMemoryMB": 0,
      "containersCPUUsage": 0
    },
    "totalResource":
    {
      "memory": 2048,
      "vCores": 5
    }
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/node/h2:1235
  Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 552
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<node>
  <rack>/default-rack</rack>
  <state>RUNNING</state>
  <id>host.domain.com:54158</id>
  <nodeHostName>host.domain.com</nodeHostName>
  <nodeHTTPAddress>host.domain.com:8042</nodeHTTPAddress>
  <lastHealthUpdate>1476916746399</lastHealthUpdate>
  <version>3.0.0-SNAPSHOT</version>
  <healthReport></healthReport>
  <numContainers>0</numContainers>
  <usedMemoryMB>0</usedMemoryMB>
  <availMemoryMB>8192</availMemoryMB>
  <usedVirtualCores>0</usedVirtualCores>
  <availableVirtualCores>8</availableVirtualCores>
  <resourceUtilization>
    <nodePhysicalMemoryMB>968</nodePhysicalMemoryMB>
    <nodeVirtualMemoryMB>968</nodeVirtualMemoryMB>
    <nodeCPUUsage>0.01332889124751091</nodeCPUUsage>
    <aggregatedContainersPhysicalMemoryMB>0</aggregatedContainersPhysicalMemoryMB>
    <aggregatedContainersVirtualMemoryMB>0</aggregatedContainersVirtualMemoryMB>
    <containersCPUUsage>0.0</containersCPUUsage>
  </resourceUtilization>
  <totalResource>
    <memory>2048</memory>
    <vCores>5</vCores>
  </totalResource>
</node>

集群节点更新资源 API

更新节点中的总资源。

URI

使用以下 URI 更新由 nodeid 值标识的 Node 对象的资源。

  http://rm-http-address:port/ws/v1/cluster/nodes/{nodeid}/resource

支持的 HTTP 操作

  POST

支持的查询参数

  None

resourceOption 对象的元素

项目 数据类型 描述
memory long 在节点上设置的内存总量(以 MB 为单位)
vcores long 在节点上设置的 vCore 总数
overCommitTimeout long 抢占容器的超时时间

响应示例

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/nodes/h2:1235/resource

请求正文

{
  "resource":
  {
    "memory": 1024,
    "vCores": 3
  },
  "overCommitTimeout": -1
}

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "resourceInfo":
  {
    "memory": 8192,
    "vCores": 5
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/node/h2:1235/resource
  Accept: application/xml

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resourceOption>
  <resource>
    <memory>8192</memory>
    <vCores>5</vCores>
  </resource>
  <overCommitTimeout>1000</overCommitTimeout>
</resourceOption>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 552
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resourceInfo>
  <memory>8192</memory>
  <vCores>5</vCores>
</resourceInfo>

集群可写 API

以下部分引用了允许创建和修改应用程序的 API。这些 API 目前处于 alpha 阶段,将来可能会发生变化。

集群新应用程序 API

使用新应用程序 API,您可以获取一个应用程序 ID,然后将其用作 集群提交应用程序 API 的一部分来提交应用程序。响应还包括群集上可用的最大资源功能。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

支持的 HTTP 操作

  • POST

支持的查询参数

  None

NewApplication 对象的元素

NewApplication 响应包含以下元素

项目 数据类型 描述
application-id string 新创建的应用程序 ID
maximum-resource-capabilities 对象 此群集上可用的最大资源功能

maximum-resource-capabilites 对象包含以下元素

项目 数据类型 描述
memory int 容器可用的最大内存
vCores int 容器可用的最大内核数

响应示例

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/apps/new-application

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "application-id":"application_1404198295326_0003",
  "maximum-resource-capability":
    {
      "memory":8192,
      "vCores":32
    }
}

XML 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/apps/new-application

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 248
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<NewApplication>
  <application-id>application_1404198295326_0003</application-id>
  <maximum-resource-capability>
    <memory>8192</memory>
    <vCores>32</vCores>
  </maximum-resource-capability>
</NewApplication>

集群应用程序 API(提交应用程序)

提交应用程序 API 可用于提交应用程序。在提交应用程序时,您必须首先使用 集群新应用程序 API 获取应用程序 ID。应用程序 ID 必须是请求正文的一部分。响应包含指向应用程序页面的 URL,该 URL 可用于跟踪应用程序的状态和进度。

URI

支持的 HTTP 操作

  • POST

POST 响应示例

POST 请求可用于向 ResourceManager 提交应用。如上所述,必须首先获取应用程序 ID。成功提交将产生 202 响应代码和一个 Location 头,指定从哪里获取有关应用的信息。请注意,为了提交应用,您必须为 HTTP 接口设置身份验证过滤器。该功能要求在 HttpServletRequest 中设置用户名。如果未设置过滤器,则响应将为“UNAUTHORIZED”响应。

请注意,此功能目前处于 alpha 阶段,将来可能会发生变化。

POST 请求对象的元素

项目 数据类型 描述
application-id string 应用程序 ID
application-name string 应用程序名称
queue string 应向其提交应用程序的队列名称
priority int 应用程序的优先级
am-container-spec 对象 应用程序主容器启动上下文,如下所述
unmanaged-AM 布尔值 应用程序是否使用非托管应用程序主服务器
max-app-attempts int 此应用程序的最大尝试次数
resource 对象 应用程序主服务器所需资源,如下所述
application-type string 应用程序类型(MapReduce、Pig、Hive 等)
keep-containers-across-application-attempts 布尔值 YARN 是否应保留此应用程序使用的容器,而不是销毁它们
application-tags 对象 应用程序标签列表,请参阅请求示例以了解如何指定标签
log-aggregation-context 对象 表示 NodeManager 处理此应用程序的日志所需的所有信息
attempt-failures-validity-interval long 失败次数不会将超出有效性间隔发生的尝试失败计入失败次数
reservation-id string 表示调度器中相应保留资源分配的唯一 ID
am-black-listing-requests 对象 包含黑名单信息,例如“启用/禁用 AM 黑名单”和“禁用故障阈值”

am-container-spec 对象的元素

am-container-spec 对象应用于为应用程序主服务器提供容器启动上下文。

项目 数据类型 描述
local-resources 对象 描述需要本地化的资源的对象,如下所述
environment 对象 容器的环境变量,指定为键值对
commands 对象 用于启动容器的命令,按应执行的顺序排列
service-data 对象 应用程序特定的服务数据;键是辅助服务的名称,值是要传递的数据的 base-64 编码
credentials 对象 应用程序运行所需的凭据,如下所述
application-acls objec 应用程序的 ACL;键可以是“VIEW_APP”或“MODIFY_APP”,值是具有权限的用户列表

local-resources 对象的元素

该对象是键值对的集合。键是待本地化的资源的标识符,值是资源的详细信息。值的元素如下所述

项目 数据类型 描述
resource string 待本地化的资源的位置
type string 资源类型;选项为“ARCHIVE”、“FILE”和“PATTERN”
visibility string 要本地化的资源可见性;选项为“PUBLIC”、“PRIVATE”和“APPLICATION”
size long 要本地化的资源大小
timestamp long 要本地化的资源时间戳

credentials 对象的元素

credentials 对象应用于传递应用程序进行自我身份验证所需的数据,例如委派令牌和密钥。

项目 数据类型 描述
tokens 对象 您希望传递给应用程序的令牌,指定为键值对。键是令牌的标识符,值是令牌(应使用相应的 Web 服务获取)
secrets 对象 您希望在应用程序中使用的密钥,指定为键值对。键是标识符,值是密钥的 base-64 编码

POST 请求正文 resource 对象的元素

项目 数据类型 描述
memory int 每个容器所需的内存
vCores int 每个容器所需的虚拟内核

POST 请求正文 log-aggregation-context 对象的元素

项目 数据类型 描述
log-include-pattern string 与定义的 include 模式匹配的日志文件将在应用程序完成后上传
log-exclude-pattern string 与定义的 exclude 模式匹配的日志文件将在应用程序完成后不会上传
rolled-log-include-pattern string 与定义的 include 模式匹配的日志文件将以滚动方式聚合
rolled-log-exclude-pattern string 与定义的 exclude 模式匹配的日志文件将不会以滚动方式聚合
log-aggregation-policy-class-name string NodeManager 将使用该策略聚合日志
log-aggregation-policy-parameters string 传递给策略类的参数

POST 请求正文 am-black-listing-requests 对象的元素

项目 数据类型 描述
am-black-listing-enabled 布尔值 AM 黑名单是否启用
disable-failure-threshold 浮点数 AM 黑名单禁用失败阈值

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/apps
  Accept: application/json
  Content-Type: application/json
  {
    "application-id":"application_1404203615263_0001",
    "application-name":"test",
    "am-container-spec":
    {
      "local-resources":
      {
        "entry":
        [
          {
            "key":"AppMaster.jar",
            "value":
            {
              "resource":"hdfs://hdfs-namenode:9000/user/testuser/DistributedShell/demo-app/AppMaster.jar",
              "type":"FILE",
              "visibility":"APPLICATION",
              "size": 43004,
              "timestamp": 1405452071209
            }
          }
        ]
      },
      "commands":
      {
        "command":"{{JAVA_HOME}}/bin/java -Xmx10m org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster --container_memory 10 --container_vcores 1 --num_containers 1 --priority 0 1><LOG_DIR>/AppMaster.stdout 2><LOG_DIR>/AppMaster.stderr"
      },
      "environment":
      {
        "entry":
        [
          {
            "key": "DISTRIBUTEDSHELLSCRIPTTIMESTAMP",
            "value": "1405459400754"
          },
          {
            "key": "CLASSPATH",
            "value": "{{CLASSPATH}}<CPS>./*<CPS>{{HADOOP_CONF_DIR}}<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/*<CPS>{{HADOOP_COMMON_HOME}}/share/hadoop/common/lib/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/*<CPS>{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/lib/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/*<CPS>{{HADOOP_YARN_HOME}}/share/hadoop/yarn/lib/*<CPS>./log4j.properties"
          },
          {
            "key": "DISTRIBUTEDSHELLSCRIPTLEN",
            "value": "6"
          },
          {
            "key": "DISTRIBUTEDSHELLSCRIPTLOCATION",
            "value": "hdfs://hdfs-namenode:9000/user/testuser/demo-app/shellCommands"
          }
        ]
      }
    },
    "unmanaged-AM":false,
    "max-app-attempts":2,
    "resource":
    {
      "memory":1024,
      "vCores":1
    },
    "application-type":"YARN",
    "keep-containers-across-application-attempts":false,
    "log-aggregation-context":
    {
      "log-include-pattern":"file1",
      "log-exclude-pattern":"file2",
      "rolled-log-include-pattern":"file3",
      "rolled-log-exclude-pattern":"file4",
      "log-aggregation-policy-class-name":"org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AllContainerLogAggregationPolicy",
      "log-aggregation-policy-parameters":""
    },
    "attempt-failures-validity-interval":3600000,
    "reservation-id":"reservation_1454114874_1",
    "am-black-listing-requests":
    {
      "am-black-listing-enabled":true,
      "disable-failure-threshold":0.01
    }
  }

响应标头

  HTTP/1.1 202
  Transfer-Encoding: chunked
  Location: http://rm-http-address:port/ws/v1/cluster/apps/application_1404203615263_0001
  Content-Type: application/json
  Server: Jetty(6.1.26)

响应正文

  No response body

XML 响应

HTTP 请求

POST http://rm-http-address:port/ws/v1/cluster/apps
Accept: application/xml
Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application-submission-context>
  <application-id>application_1404204891930_0002</application-id>
  <application-name>test</application-name>
  <queue>testqueue</queue>
  <priority>3</priority>
  <am-container-spec>
    <local-resources>
      <entry>
        <key>example</key>
        <value>
          <resource>hdfs://hdfs-namenode:9000/user/testuser/DistributedShell/demo-app/AppMaster.jar</resource>
          <type>FILE</type>
          <visibility>APPLICATION</visibility>
          <size>43004</size>
          <timestamp>1405452071209</timestamp>
        </value>
      </entry>
    </local-resources>
    <environment>
      <entry>
        <key>DISTRIBUTEDSHELLSCRIPTTIMESTAMP</key>
        <value>1405459400754</value>
      </entry>
      <entry>
        <key>CLASSPATH</key>
        <value>{{CLASSPATH}}&lt;CPS&gt;./*&lt;CPS&gt;{{HADOOP_CONF_DIR}}&lt;CPS&gt;{{HADOOP_COMMON_HOME}}/share/hadoop/common/*&lt;CPS&gt;{{HADOOP_COMMON_HOME}}/share/hadoop/common/lib/*&lt;CPS&gt;{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/*&lt;CPS&gt;{{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/lib/*&lt;CPS&gt;{{HADOOP_YARN_HOME}}/share/hadoop/yarn/*&lt;CPS&gt;{{HADOOP_YARN_HOME}}/share/hadoop/yarn/lib/*&lt;CPS&gt;./log4j.properties</value>
      </entry>
      <entry>
        <key>DISTRIBUTEDSHELLSCRIPTLEN</key>
        <value>6</value>
      </entry>
      <entry>
        <key>DISTRIBUTEDSHELLSCRIPTLOCATION</key>
        <value>hdfs://hdfs-namenode:9000/user/testuser/demo-app/shellCommands</value>
      </entry>
    </environment>
    <commands>
      <command>{{JAVA_HOME}}/bin/java -Xmx10m org.apache.hadoop.yarn.applications.distributedshell.ApplicationMaster --container_memory 10 --container_vcores 1 --num_containers 1 --priority 0 1&gt;&lt;LOG_DIR&gt;/AppMaster.stdout 2&gt;&lt;LOG_DIR&gt;/AppMaster.stderr</command>
    </commands>
    <service-data>
      <entry>
        <key>test</key>
        <value>dmFsdWUxMg</value>
      </entry>
    </service-data>
    <credentials>
      <tokens/>
      <secrets>
        <entry>
          <key>secret1</key>
          <value>c2VjcmV0MQ</value>
        </entry>
      </secrets>
    </credentials>
    <application-acls>
      <entry>
        <key>VIEW_APP</key>
        <value>testuser3, testuser4</value>
      </entry>
      <entry>
        <key>MODIFY_APP</key>
        <value>testuser1, testuser2</value>
      </entry>
    </application-acls>
  </am-container-spec>
  <unmanaged-AM>false</unmanaged-AM>
  <max-app-attempts>2</max-app-attempts>
  <resource>
    <memory>1024</memory>
    <vCores>1</vCores>
  </resource>
  <application-type>YARN</application-type>
  <keep-containers-across-application-attempts>false</keep-containers-across-application-attempts>
  <application-tags>
    <tag>tag 2</tag>
    <tag>tag1</tag>
  </application-tags>
  <log-aggregation-context>
    <log-include-pattern>file1</log-include-pattern>
    <log-exclude-pattern>file2</log-exclude-pattern>
    <rolled-log-include-pattern>file3</rolled-log-include-pattern>
    <rolled-log-exclude-pattern>file4</rolled-log-exclude-pattern>
    <log-aggregation-policy-class-name>org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.AllContainerLogAggregationPolicy</log-aggregation-policy-class-name>
    <log-aggregation-policy-parameters></log-aggregation-policy-parameters>
  </log-aggregation-context>
  <attempt-failures-validity-interval>3600000</attempt-failures-validity-interval>
  <reservation-id>reservation_1454114874_1</reservation-id>
  <am-black-listing-requests>
    <am-black-listing-enabled>true</am-black-listing-enabled>
    <disable-failure-threshold>0.01</disable-failure-threshold>
  </am-black-listing-requests>
</application-submission-context>

响应标头

  HTTP/1.1 202
  Transfer-Encoding: chunked
  Location: http://rm-http-address:port/ws/v1/cluster/apps/application_1404204891930_0002
  Content-Type: application/xml
  Server: Jetty(6.1.26)

响应正文

  No response body

群集应用程序状态 API

使用应用程序状态 API,您可以查询已提交应用程序的状态,还可以通过使用 PUT 请求(其中状态设置为“KILLED”)修改正在运行的应用程序的状态来终止正在运行的应用程序。要执行 PUT 操作,必须为 RM Web 服务设置身份验证。此外,您必须被授权终止该应用程序。目前,您只能将状态更改为“KILLED”;尝试将状态更改为任何其他状态都会导致 400 错误响应。以下是未经授权和错误请求错误的示例。当您执行成功的 PUT 操作时,初始响应可能是 202。您可以通过重复 PUT 请求(直到获得 200)、使用 GET 方法查询状态或查询应用程序信息并检查状态来确认应用程序已终止。在以下示例中,我们重复 PUT 请求并获得 200 响应。

请注意,为了终止应用程序,您必须为 HTTP 接口设置身份验证过滤器。此功能要求在 HttpServletRequest 中设置用户名。如果没有设置过滤器,响应将为“UNAUTHORIZED”响应。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

支持的 HTTP 操作

  • GET
    • PUT

支持的查询参数

  None

appstate 对象的元素

当您请求应用程序的状态时,返回的信息具有以下字段

项目 数据类型 描述
state string 应用程序状态 - 可以是“NEW”、“NEW_SAVING”、“SUBMITTED”、“ACCEPTED”、“RUNNING”、“FINISHED”、“FAILED”、“KILLED”之一

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "state":"ACCEPTED"
}

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

{
  "state":"KILLED"
}

响应标头

HTTP/1.1 202 Accepted
Content-Type: application/json
Transfer-Encoding: chunked
Location: http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003
Server: Jetty(6.1.26)

响应正文

{
  "state":"ACCEPTED"
}

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

{
  "state":"KILLED"
}

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "state":"KILLED"
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 99
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>ACCEPTED</state>
</appstate>

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>KILLED</state>
</appstate>

响应标头

HTTP/1.1 202 Accepted
Content-Type: application/xml
Content-Length: 794
Location: http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>ACCEPTED</state>
</appstate>

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>KILLED</state>
</appstate>

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 917
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>KILLED</state>
</appstate>

未经授权的错误响应

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>KILLED</state>
</appstate>

响应标头

HTTP/1.1 403 Unauthorized
Server: Jetty(6.1.26)

错误请求错误响应

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appstate>
  <state>RUNNING</state>
</appstate>

响应标头

HTTP/1.1 400
Content-Length: 295
Content-Type: application/xml
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RemoteException>
  <exception>BadRequestException</exception>
  <message>java.lang.Exception: Only 'KILLED' is allowed as a target state.</message>
  <javaClassName>org.apache.hadoop.yarn.webapp.BadRequestException</javaClassName>
</RemoteException>

群集应用程序队列 API

使用应用程序队列 API,您可以查询已提交应用程序的队列,还可以使用指定目标队列的 PUT 请求将正在运行的应用程序移动到另一个队列。要执行 PUT 操作,必须为 RM Web 服务设置身份验证。此外,您必须被授权移动该应用程序。目前,只有在您使用容量调度程序或公平调度程序时,您才能移动该应用程序。

请注意,为了移动应用程序,您必须为 HTTP 接口设置身份验证过滤器。此功能要求在 HttpServletRequest 中设置用户名。如果没有设置过滤器,响应将为“UNAUTHORIZED”响应。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

支持的 HTTP 操作

  • GET
    • PUT

支持的查询参数

  None

appqueue 对象的元素

当您请求应用程序的状态时,返回的信息具有以下字段

项目 数据类型 描述
queue string 应用程序队列

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/queue

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "queue":"default"
}

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/queue

请求正文

{
  "queue":"test"
}

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "queue":"test"
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/queue

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 98
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appqueue>
  <queue>default</queue>
</appqueue>

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/queue

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appqueue>
  <queue>test</queue>
</appqueue>

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 95
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<appqueue>
  <queue>test</queue>
</appqueue>

集群应用程序优先级 API

使用应用程序优先级 API,您可以查询已提交应用程序的优先级,以及使用指定目标优先级的 PUT 请求更新正在运行或已接受应用程序的优先级。要执行 PUT 操作,必须为 RM Web 服务设置身份验证。此外,您必须有权更新应用程序优先级。目前,您只能在使用容量调度程序时更新应用程序优先级。

请注意,要更新应用程序的优先级,您必须为 HTTP 接口设置身份验证过滤器。该功能要求在 HttpServletRequest 中设置用户名。如果没有设置过滤器,响应将为“UNAUTHORIZED”响应。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

支持的 HTTP 操作

  • GET
    • PUT

支持的查询参数

  None

apppriority 对象的元素

当您请求应用程序的状态时,返回的信息具有以下字段

项目 数据类型 描述
priority int 应用程序优先级

响应示例

JSON 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/priority

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "priority":0
}

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/priority

请求正文

{
  "priority":8
}

响应标头

HTTP/1.1 200 OK
Content-Type: application/json
Transfer-Encoding: chunked
Server: Jetty(6.1.26)

响应正文

{
  "priority":8
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/priority

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 98
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<applicationpriority>
  <priority>0</priority>
</applicationpriority>

HTTP 请求

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/priority

请求正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<applicationpriority>
  <priority>8</priority>
</applicationpriority>

响应标头

HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 95
Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<applicationpriority>
  <priority>8</priority>
</applicationpriority>

集群委派令牌 API

委派令牌 API 可用于创建、续订和取消 YARN ResourceManager 委派令牌。所有委派令牌请求都必须在经过 Kerberos 身份验证的连接(使用 SPNEGO)上执行。在非 Kerberos 连接上执行操作将导致 FORBIDDEN 响应。在续订令牌的情况下,只有在创建令牌时指定的续订者才能续订令牌。其他用户(包括所有者)禁止续订令牌。需要注意的是,在取消或续订令牌时,要取消或续订的令牌是通过设置标头来指定的。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

使用以下 URI 创建和取消委派令牌。

使用以下 URI 续订委派令牌。

支持的 HTTP 操作

  • POST
    • DELETE

支持的查询参数

  None

delegation-token 对象的元素

委派令牌 API 的响应包含下面列出的一个字段。

项目 数据类型 描述
token string 委派令牌
renewer string 允许续订委派令牌的用户
owner string 委派令牌的所有者
kind string 委派令牌的类型
expiration-time long 令牌的到期时间
max-validity long 令牌的最大有效期

响应示例

创建令牌

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/delegation-token
  Accept: application/json
  Content-Type: application/json
  {
    "renewer" : "test-renewer"
  }

响应标头

  HTTP/1.1 200 OK
  WWW-Authenticate: Negotiate ...
  Date: Sat, 28 Jun 2014 18:08:11 GMT
  Server: Jetty(6.1.26)
  Set-Cookie: ...
  Content-Type: application/json

响应正文

  {
    "token":"MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUckiEZpigFHSJTKaQECFN9EMM9BzfPoDxu572EVUpzqhnSGE1JNX0RFTEVHQVRJT05fVE9LRU4A",
    "renewer":"test-renewer",
    "owner":"[email protected]",
    "kind":"RM_DELEGATION_TOKEN",
    "expiration-time":1405153616489,
    "max-validity":1405672016489
  }

XML 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/delegation-token
  Accept: application/xml
  Content-Type: application/xml
  <delegation-token>
    <renewer>test-renewer</renewer>
  </delegation-token>

响应标头

  HTTP/1.1 200 OK
  WWW-Authenticate: Negotiate ...
  Date: Sat, 28 Jun 2014 18:08:11 GMT
  Content-Length: 423
  Server: Jetty(6.1.26)
  Set-Cookie: ...
  Content-Type: application/xml

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<delegation-token>  <token>MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUckgZ8yigFHSI4jMgcCFDTG8X6XFFn2udQngzSXQL8vWaKIE1JNX0RFTEVHQVRJT05fVE9LRU4A</token>
  <renewer>test-renewer</renewer>
  <owner>[email protected]</owner>
  <kind>RM_DELEGATION_TOKEN</kind>
  <expiration-time>1405153180466</expiration-time>
  <max-validity>1405671580466</max-validity>
</delegation-token>

续订令牌

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/delegation-token/expiration
  Accept: application/json
  Hadoop-YARN-RM-Delegation-Token: MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUbjqcHHigFHB7ZFxwQCFKWD3znCkDSy6SQIjRCLDydxbxvgE1JNX0RFTEVHQVRJT05fVE9LRU4A
  Content-Type: application/json

响应标头

  HTTP/1.1 200 OK
  WWW-Authenticate: Negotiate ...
  Date: Sat, 28 Jun 2014 18:08:11 GMT
  Server: Jetty(6.1.26)
  Set-Cookie: ...
  Content-Type: application/json

响应正文

  {
    "expiration-time":1404112520402
  }

XML 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/delegation-token/expiration
  Accept: application/xml
  Content-Type: application/xml
  Hadoop-YARN-RM-Delegation-Token: MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUbjqcHHigFHB7ZFxwQCFKWD3znCkDSy6SQIjRCLDydxbxvgE1JNX0RFTEVHQVRJT05fVE9LRU4A

响应标头

  HTTP/1.1 200 OK
  WWW-Authenticate: Negotiate ...
  Date: Sat, 28 Jun 2014 18:08:11 GMT
  Content-Length: 423
  Server: Jetty(6.1.26)
  Set-Cookie: ...
  Content-Type: application/xml

响应正文

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <delegation-token>
    <expiration-time>1404112520402</expiration-time>
  </delegation-token>

取消令牌

HTTP 请求

DELETE http://rm-http-address:port/ws/v1/cluster/delegation-token
Hadoop-YARN-RM-Delegation-Token: MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUbjqcHHigFHB7ZFxwQCFKWD3znCkDSy6SQIjRCLDydxbxvgE1JNX0RFTEVHQVRJT05fVE9LRU4A
Accept: application/xml

响应标头

  HTTP/1.1 200 OK
  WWW-Authenticate: Negotiate ...
  Date: Sun, 29 Jun 2014 07:25:18 GMT
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)
  Set-Cookie: ...
  Content-Type: application/xml

无响应正文。

使用委派令牌进行身份验证

此功能处于 alpha 模式,将来可能会更改。

使用 YARN RM Web 服务时,可以使用委派令牌对自身进行身份验证。但是,这需要设置正确的配置。条件如下

  • Hadoop 在安全模式下设置,身份验证类型设置为 kerberos。

  • Hadoop HTTP 身份验证在安全模式下设置,身份验证类型设置为 kerberos

设置后,可以使用上面列出的 Web 服务获取委派令牌,并按以下示例所示使用

  PUT http://rm-http-address:port/ws/v1/cluster/apps/application_1399397633663_0003/state
  X-Hadoop-Delegation-Token: MgASY2xpZW50QEVYQU1QTEUuQ09NDHRlc3QtcmVuZXdlcgCKAUbjqcHHigFHB7ZFxwQCFKWD3znCkDSy6SQIjRCLDydxbxvgE1JNX0RFTEVHQVRJT05fVE9LRU4A
  Content-Type: application/json; charset=UTF8
  {
    "state":"KILLED"
  }

群集预留 API 列表

群集预留 API 可用于列出预留。列出预留时,用户必须根据队列、预留 ID、开始时间或结束时间指定约束。用户还必须指定是否包括所列预留的全部资源分配。结果页面返回一个响应,其中包含与预留相关的信息,例如接受时间、用户、资源分配、预留 ID 以及预留定义。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

  • queue - 包含要列出的预留的队列名称。如果未设置,此值将默认为“default”。
    • reservation-id - 将要列出的预留的预留 ID。如果存在此参数,则将忽略 start-time 和 end-time。
    • start-time - 将列出在此开始时间之后结束的预留。如果未指定或无效,则默认为 0。
    • end-time - 将列出在此结束时间之后开始的预留。如果未指定或无效,则默认为 Long.MaxValue。
    • include-resource-allocations - true 或 false。如果为 true,则预留的资源分配将包含在响应中。如果为 false,则预留的资源分配将不包含在响应中。这将默认为 false。

ReservationListInfo 对象的元素

项目 数据类型 描述
reservations ReservationInfo(JSON) 数组/零个或多个 ReservationInfo 对象(XML) 使用给定查询列出的预留

reservations 对象的元素

项目 数据类型 描述
acceptance-time long 接受预留的时间
resource-allocations ResourceAllocationInfo(JSON) 数组/零个或多个 ResourceAllocationInfo 对象(XML) 预留的资源分配信息
reservation-id 单个 ReservationId 字符串 唯一的预留标识符
reservation-definition 单个 ReservationDefinition 对象 一组约束,表示用户随时间推移对资源的需求
user string 进行预订的用户

resource-allocations 对象的元素

项目 数据类型 描述
resource 单个 Resource 对象 为预订分配分配的资源
startTime long 为资源分配的开始时间
endTime long 为资源分配的结束时间

resource 对象的元素

项目 数据类型 描述
memory int 为预订分配分配的内存
vCores int 为预订分配分配的核心数

reservation-definition 对象的元素

项目 数据类型 描述
arrival long 此预订可从其分配的最早时间的 UTC 时间表示形式。
deadline long 此预订可分配到的最晚时间的 UTC 时间表示形式。
reservation-name string 预订的助记名称(不是有效的标识符)。
reservation-requests 对象 此预订的“阶段”或阶段列表,每个列表都描述资源需求和持续时间
priority int 表示预订优先级的整数。优先级的较低数字表示优先级较高的预订。循环预订始终比非循环预订优先级高。非循环预订的优先级仅与非循环预订比较。循环预订也是如此。
recurrence-expression string 表示周期性作业时间段的循环表达式。目前,仅支持长值。稍后,将添加对表示任意循环模式(例如,每周二和周四)的正则表达式的支持。循环以毫秒为单位表示周期性作业。非周期性作业的循环为 0。周期性作业在明确取消之前有效,并且优先级高于非周期性作业(在初始放置和重新规划期间)。周期性作业分配在各个运行中保持一致(仅在初始放置期间利用分配灵活性,之后分配保持一致)。请注意,循环表达式必须大于预订的持续时间(截止时间 - 到达时间)。另请注意,配置的最大周期必须可以被循环表达式整除。

reservation-requests 对象的元素

项目 数据类型 描述
reservation-request-interpreter int 如何解释 ReservationRequest 组的数字选择:0 为 ANY,1 为 ALL,2 为 ORDER,3 为 ORDER_NO_GAP
reservation-request 对象 此预订的阶段/阶段的资源和时间功能的描述

reservation-request 对象的元素

项目 数据类型 描述
duration long ReservationRequest 的持续时间,以毫秒为单位(此部分预留应存在的连续毫秒数)。
num-containers int 此预留阶段中所需的容器数(捕获此阶段中作业的最大并行度)。
min-concurrency int 为满足此分配而必须同时分配的最小容器数(捕获最小并行度,可用于表示 gang 语义)。
capability 对象 允许指定每个容器的大小(内存、vCores)。

GET 响应示例

Get 请求可用于向 ResourceManager 列出预留。如上所述,成功后会返回与预留相关的信息(在答案的正文中)。成功的列表请求将导致 200 响应。请注意,为了提交预留,您必须为 HTTP 接口设置身份验证过滤器。该功能要求在 HttpServletRequest 中设置用户名。如果未设置过滤器,响应将是“UNAUTHORIZED”响应。请注意,此功能目前处于 alpha 阶段,将来可能会发生更改。

JSON 响应

此请求返回在开始时间 1455159355000 和 1475160036000 之内的所有活动预留。由于 include-resource-allocations 设置为 true,因此响应中将包括完整的资源分配集。

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/reservation/list?queue=dedicated&start-time=1455159355000&end-time=1475160036000&include-resource-allocations=true

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Cache-Control: no-cache
  Content-Encoding: gzip
  Pragma: no-cache,no-cache
  Server: Jetty(6.1.26)

响应正文

{
  "reservations": {
    "acceptance-time": "1455160008442",
    "user": "submitter",
    "resource-allocations": [
      {
        "resource": {
          "memory": "0",
          "vCores": "0"
        },
        "startTime": "1465541532000",
        "endTime": "1465542250000"
      },
      {
        "resource": {
          "memory": "1024",
          "vCores": "1"
        },
        "startTime": "1465542250000",
        "endTime": "1465542251000"
      },
      {
        "resource": {
          "memory": "0",
          "vCores": "0"
        },
        "startTime": "1465542251000",
        "endTime": "1465542252000"
      }
    ],
    "reservation-id": "reservation_1458852875788_0002",
    "reservation-definition": {
      "arrival": "1465541532000",
      "deadline": "1465542252000",
      "reservation-requests": {
        "reservation-request-interpreter": "0",
        "reservation-request": {
          "capability": {
            "memory": "1024",
            "vCores": "1"
          },
          "min-concurrency": "1",
          "num-containers": "1",
          "duration": "60"
        }
      },
      "reservation-name": "res_1"
    }
  }
}

XML 响应

HTTP 请求

  GET http://rm-http-address:port/ws/v1/cluster/reservation/list?queue=dedicated&start-time=1455159355000&end-time=1475160036000&include-resource-allocations=true

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-length: 395
  Cache-Control: no-cache
  Content-Encoding: gzip
  Pragma: no-cache,no-cache
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <reservationListInfo>
        <reservations>
        <acceptance-time>1455233661003</acceptance-time>
        <user>dr.who</user>
        <resource-allocations>
            <resource>
                <memory>0</memory>
                <vCores>0</vCores>
            </resource>
            <startTime>1465541532000</startTime>
            <endTime>1465542251000</endTime>
        </resource-allocations>
        <resource-allocations>
            <resource>
                <memory>1024</memory>
                <vCores>1</vCores>
            </resource>
            <startTime>1465542251000</startTime>
            <endTime>1465542252000</endTime>
        </resource-allocations>
        <reservation-id>reservation_1458852875788_0002</reservation-id>
        <reservation-definition>
            <arrival>1465541532000</arrival>
            <deadline>1465542252000</deadline>
            <reservation-requests>
                <reservation-request-interpreter>0</reservation-request-interpreter>
                <reservation-request>
                    <capability>
                        <memory>1024</memory>
                        <vCores>1</vCores>
                    </capability>
                    <min-concurrency>1</min-concurrency>
                    <num-containers>1</num-containers>
                    <duration>60</duration>
                </reservation-request>
            </reservation-requests>
            <reservation-name>res_1</reservation-name>
        </reservation-definition>
    </reservations>
</reservationListInfo>

集群预留 API 创建

使用新预留 API 获取预留 ID,然后可将其用作 集群预留 API 提交 的一部分来提交预留。

此功能目前处于 alpha 阶段,将来可能会发生变化。

URI

支持的 HTTP 操作

  • POST

支持的查询参数

  None

new-reservation 对象的元素

new-reservation 响应包含以下元素

项目 数据类型 描述
reservation-id string 新创建的预留 ID

响应示例

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/reservation/new-reservation

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "reservation-id":"reservation_1404198295326_0003"
}

XML 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/reservation/new-reservation

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 248
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<new-reservation>
  <reservation-id>reservation_1404198295326_0003</reservation-id>
</new-reservation>

集群预留 API 提交

集群预留 API 可用于提交预留。在提交预留时,用户指定资源和所需时间方面的约束。如果可以进行预留,则响应结果为成功。如果使用预留 ID 多次提交预留,如果预留定义相同,则请求将成功,但只会创建一个预留。如果预留定义不同,服务器将响应错误响应。进行预留时,用户可以使用用于提交预留的预留 ID,通过将其指定为 集群提交应用程序 API 的一部分来访问资源。

URI

支持的 HTTP 操作

  • POST

POST 响应示例

POST 请求可用于向 ResourceManager 提交预留。如上所述,成功后将返回预留 ID(在答案的正文中)。成功提交将产生 200 响应。请注意,要提交预留,您必须为 HTTP 接口设置身份验证过滤器。该功能要求在 HttpServletRequest 中设置用户名。如果未设置过滤器,响应将为“UNAUTHORIZED”响应。

请注意,此功能目前处于 alpha 阶段,将来可能会发生变化。

POST 请求对象的元素

项目 数据类型 描述
queue string 您要提交到的(可预留)队列
reservation-definition 对象 一组约束,表示用户随时间推移对资源的需求。
reservation-id string 用于提交预留的预留 ID。

reservation-definition 对象的元素

项目 数据类型 描述
arrival long 此预订可从其分配的最早时间的 UTC 时间表示形式。
deadline long 此预订可分配到的最晚时间的 UTC 时间表示形式。
reservation-name string 预订的助记名称(不是有效的标识符)。
reservation-requests 对象 此预订的“阶段”或阶段列表,每个列表都描述资源需求和持续时间
priority int 表示预订优先级的整数。优先级的较低数字表示优先级较高的预订。循环预订始终比非循环预订优先级高。非循环预订的优先级仅与非循环预订比较。循环预订也是如此。

reservation-requests 对象的元素

项目 数据类型 描述
reservation-request-interpreter int 如何解释 ReservationRequest 组的数字选择:0 为 ANY,1 为 ALL,2 为 ORDER,3 为 ORDER_NO_GAP
reservation-request 对象 此预订的阶段/阶段的资源和时间功能的描述

reservation-request 对象的元素

项目 数据类型 描述
duration long ReservationRequeust 的持续时间(以毫秒为单位)(此部分预留的令人满意的分配应存在的连续毫秒数)。
num-containers int 此预留阶段中所需的容器数(捕获此阶段中作业的最大并行度)。
min-concurrency int 为满足此分配而必须同时分配的最小容器数(捕获最小并行度,可用于表示 gang 语义)。
capability 对象 允许指定每个容器的大小(内存、vCores)。

capability 对象的元素

项目 数据类型 描述
memory int 此容器的内存 MB 数
vCores int 此容器的虚拟内核数

JSON 响应

此示例包含一个由两个阶段组成的预留(彼此交替,因为 reservation-request-interpreter 设置为 0),因此第一个阶段较短,“较高”且“组”,正好有 220 个容器持续 60 秒,而第二个交替阶段较长,持续 120 秒,较低,有 110 个容器(和 1 个容器的最小并发性,因此没有组语义)。

HTTP 请求

POST http://rmdns:8088/ws/v1/cluster/reservation/submit
Content-Type: application/json
{
  "queue" : "dedicated",
  "reservation-id":"reservation_1404198295326_0003"
  "reservation-definition" : {
     "arrival" : 1765541532000,
     "deadline" : 1765542252000,
     "reservation-name" : "res_1",
     "reservation-requests" : {
        "reservation-request-interpreter" : 0,
        "reservation-request" : [
           {
             "duration" : 60000,
             "num-containers" : 220,
             "min-concurrency" : 220,
             "capability" : {
               "memory" : 1024,
               "vCores" : 1
             }
           },
           {
             "duration" : 120000,
             "num-containers" : 110,
             "min-concurrency" : 1,
             "capability" : {
               "memory" : 1024,
               "vCores" : 1
             }
           }
        ]
     }
   }
}

响应标头

200 OK Cache-Control: no-cache Expires: Thu, 17 Dec 2015 23:36:34 GMT, Thu, 17 Dec 2015 23:36:34 GMT Date: Thu, 17 Dec 2015 23:36:34 GMT, Thu, 17 Dec 2015 23:36:34 GMT Pragma: no-cache, no-cache Content-Type: application/xml Content-Encoding: gzip Content-Length: 137 Server: Jetty(6.1.26)

响应正文

  No response body

XML 响应

HTTP 请求

POST http://rmdns:8088/ws/v1/cluster/reservation/submit
Accept: application/xml
Content-Type: application/xml
<reservation-submission-context>
  <queue>dedicated</queue>
  <reservation-id>reservation_1404198295326_0003</reservation-id>
  <reservation-definition>
     <arrival>1765541532000</arrival>
     <deadline>1765542252000</deadline>
     <reservation-name>res_1</reservation-name>
     <reservation-requests>
        <reservation-request-interpreter>0</reservation-request-interpreter>
        <reservation-request>
             <duration>60000</duration>
             <num-containers>220</num-containers>
             <min-concurrency>220</min-concurrency>
             <capability>
               <memory>1024</memory>
               <vCores>1</vCores>
             </capability>
        </reservation-request>
        <reservation-request>
             <duration>120000</duration>
             <num-containers>110</num-containers>
             <min-concurrency>1</min-concurrency>
             <capability>
               <memory>1024</memory>
               <vCores>1</vCores>
             </capability>
        </reservation-request>
     </reservation-requests>
  </reservation-definition>
</reservation-submission-context>

响应标头

200 OK Cache-Control: no-cache Expires: Thu, 17 Dec 2015 23:49:21 GMT, Thu, 17 Dec 2015 23:49:21 GMT Date: Thu, 17 Dec 2015 23:49:21 GMT, Thu, 17 Dec 2015 23:49:21 GMT Pragma: no-cache, no-cache Content-Type: application/xml Content-Encoding: gzip Content-Length: 137 Server: Jetty(6.1.26)

响应正文

  No response body

集群预留 API 更新

集群预留 API 更新可用于更新现有预留。预留的更新与上面描述的提交类似,但用户提交要更新的现有预留的预留 ID。语义为尝试并交换,成功操作将根据请求的更新参数修改现有预留,而失败执行将使现有预留保持不变。

URI

支持的 HTTP 操作

  • POST

POST 响应示例

POST 请求可用于将预留更新到 ResourceManager。成功提交将导致 200 响应,表示对现有预留就地更新(ID 不变)。请注意,要更新预留,必须为 HTTP 接口设置身份验证过滤器。此功能要求在 HttpServletRequest 中设置用户名。如果未设置过滤器,响应将为“UNAUTHORIZED”响应。

请注意,此功能目前处于 alpha 阶段,将来可能会发生变化。

POST 请求对象的元素

项目 数据类型 描述
reservation-id string 要更新的预留的 ID(系统会自动从此处查找正确的队列)
reservation-definition 对象 一组约束,表示用户随时间推移对资源的需求。

reservation-definition 对象的元素

项目 数据类型 描述
arrival long 此预订可从其分配的最早时间的 UTC 时间表示形式。
deadline long 此预订可分配到的最晚时间的 UTC 时间表示形式。
reservation-name string 预订的助记名称(不是有效的标识符)。
reservation-requests 对象 此预订的“阶段”或阶段列表,每个列表都描述资源需求和持续时间
priority int 表示预订优先级的整数。优先级的较低数字表示优先级较高的预订。循环预订始终比非循环预订优先级高。非循环预订的优先级仅与非循环预订比较。循环预订也是如此。

reservation-requests 对象的元素

项目 数据类型 描述
reservation-request-interpreter int 如何解释 ReservationRequest 组的数字选择:0 为 ANY,1 为 ALL,2 为 ORDER,3 为 ORDER_NO_GAP
reservation-request 对象 此预订的阶段/阶段的资源和时间功能的描述

reservation-request 对象的元素

项目 数据类型 描述
duration long ReservationRequeust 的持续时间(以毫秒为单位)(此部分预留的令人满意的分配应存在的连续毫秒数)。
num-containers int 此预留阶段中所需的容器数(捕获此阶段中作业的最大并行度)。
min-concurrency int 为满足此分配而必须同时分配的最小容器数(捕获最小并行度,可用于表示 gang 语义)。
capability 对象 允许指定每个容器的大小(内存、vCores)。

capability 对象的元素

项目 数据类型 描述
memory int 此容器的内存 MB 数
vCores int 此容器的虚拟内核数

JSON 响应

此示例通过两个阶段(按顺序,因为 reservation-request-interpreter 已设置为 2)更新由 reservation_1449259268893_0005 标识的现有预留,其中第一阶段是 10 个容器的“组”,持续 5 分钟(最小并发性为 10 个容器),然后是 50 个容器,持续 10 分钟(最小并发性为 1 个容器,因此没有组语义)。

HTTP 请求

POST http://rmdns:8088/ws/v1/cluster/reservation/update
Accept: application/json
Content-Type: application/json
{
  "reservation-id" : "reservation_1449259268893_0005",
  "reservation-definition" : {
     "arrival" : 1765541532000,
     "deadline" : 1765542252000,
     "reservation-name" : "res_1",
     "reservation-requests" : {
        "reservation-request-interpreter" : 2,
        "reservation-request" : [
           {
             "duration" : 300000,
             "num-containers" : 10,
             "min-concurrency" : 10,
             "capability" : {
               "memory" : 1024,
               "vCores" : 1
             }
           },
           {
             "duration" : 60000,
             "num-containers" : 50,
             "min-concurrency" : 1,
             "capability" : {
               "memory" : 1024,
               "vCores" : 1
             }
           }
          ]
     }
   }
}

响应标头

200 OK Cache-Control: no-cache Expires: Thu, 17 Dec 2015 23:36:34 GMT, Thu, 17 Dec 2015 23:36:34 GMT Date: Thu, 17 Dec 2015 23:36:34 GMT, Thu, 17 Dec 2015 23:36:34 GMT Pragma: no-cache, no-cache Content-Type: application/json Content-Encoding: gzip Content-Length: 137 Server: Jetty(6.1.26)

响应正文

  No response body

XML 响应

HTTP 请求

POST http://rmdns:8088/ws/v1/cluster/reservation/update
Accept: application/xml
Content-Type: application/xml
<reservation-update-context>
  <reservation-id>reservation_1449259268893_0005</reservation-id>
  <reservation-definition>
     <arrival>1765541532000</arrival>
     <deadline>1765542252000</deadline>
     <reservation-name>res_1</reservation-name>
     <reservation-requests>
        <reservation-request-interpreter>2</reservation-request-interpreter>
        <reservation-request>
             <duration>300000</duration>
             <num-containers>10</num-containers>
             <min-concurrency>10</min-concurrency>
             <capability>
               <memory>1024</memory>
               <vCores>1</vCores>
             </capability>
        </reservation-request>
        <reservation-request>
             <duration>60000</duration>
             <num-containers>50</num-containers>
             <min-concurrency>1</min-concurrency>
             <capability>
               <memory>1024</memory>
               <vCores>1</vCores>
             </capability>
        </reservation-request>
     </reservation-requests>
  </reservation-definition>
</reservation-update-context>

响应标头

200 OK Cache-Control: no-cache Expires: Thu, 17 Dec 2015 23:49:21 GMT, Thu, 17 Dec 2015 23:49:21 GMT Date: Thu, 17 Dec 2015 23:49:21 GMT, Thu, 17 Dec 2015 23:49:21 GMT Pragma: no-cache, no-cache Content-Type: application/xml Content-Encoding: gzip Content-Length: 137 Server: Jetty(6.1.26)

响应正文

  No response body

集群预留 API 删除

集群预留 API 删除可用于删除现有预留。删除操作类似于更新。请求包含预留 ID,如果成功,则取消预留,否则预留将保留在系统中。

URI

支持的 HTTP 操作

  • POST

POST 响应示例

POST 请求可用于将预留删除到 ResourceManager。成功提交将导致 200 响应,表示删除成功。请注意,要删除预留,必须为 HTTP 接口设置身份验证过滤器。此功能要求在 HttpServletRequest 中设置用户名。如果未设置过滤器,响应将为“UNAUTHORIZED”响应。

请注意,此功能目前处于 alpha 阶段,将来可能会发生变化。

POST 请求对象的元素

项目 数据类型 描述
reservation-id string 要删除的预留的 ID(系统会自动从此处查找正确的队列)

JSON 响应

此示例通过 reservation_1449259268893_0006 标识删除现有预留

HTTP 请求

POST http://10.200.91.98:8088/ws/v1/cluster/reservation/delete
Accept: application/json
Content-Type: application/json
{
  "reservation-id" : "reservation_1449259268893_0006"
}

响应标头

200 OK Cache-Control: no-cache Expires: 星期五,2015 年 12 月 18 日 01:31:05 GMT,星期五,2015 年 12 月 18 日 01:31:05 GMT Date: 星期五,2015 年 12 月 18 日 01:31:05 GMT,星期五,2015 年 12 月 18 日 01:31:05 GMT Pragma: no-cache, no-cache Content-Type: application/json Content-Encoding: gzip Transfer-Encoding: chunked Server: Jetty(6.1.26)

响应正文

  No response body

XML 响应

HTTP 请求

POST http://10.200.91.98:8088/ws/v1/cluster/reservation/delete
Accept: application/xml
Content-Type: application/xml
<reservation-delete-context>
<reservation-id>reservation_1449259268893_0006</reservation-id>
</reservation-delete-context>

响应标头

200 OK Cache-Control: no-cache Expires: 星期五,2015 年 12 月 18 日 01:33:23 GMT,星期五,2015 年 12 月 18 日 01:33:23 GMT Date: 星期五,2015 年 12 月 18 日 01:33:23 GMT,星期五,2015 年 12 月 18 日 01:33:23 GMT Pragma: no-cache, no-cache Content-Type: application/xml Content-Encoding: gzip Content-Length: 101 Server: Jetty(6.1.26)

响应正文

  No response body

集群应用程序超时 API

集群应用程序超时 API 可用于获取应用程序的所有已配置超时。当您对该资源运行 GET 操作时,将返回超时对象集合。每个超时对象由超时类型、到期时间和剩余时间(以秒为单位)组成。

URI

支持的 HTTP 操作

  • GET

timeouts(应用程序超时)对象的元素

当您请求应用程序超时列表时,信息将作为超时对象集合返回。另请参阅 集群应用程序超时 API,了解超时对象的语法。

项目 数据类型 描述
timeout 超时对象数组 (JSON)/零个或多个应用程序对象 (XML) 应用程序超时对象集合

JSON 响应

HTTP 请求

  Accept: application/json
  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeouts

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "timeouts":
  {
    "timeout":
    [
      {
        "type": "LIFETIME",
        "expiryTime": "2016-12-05T22:51:00.104+0530",
        "remainingTimeInSeconds": 27
      }
    ]
  }
}

XML 响应

HTTP 请求

  Accept: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeouts

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 712
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeouts>
    <timeout>
       <type>LIFETIME</type>
       <expiryTime>2016-12-05T22:51:00.104+0530</expiryTime>
       <remainingTimeInSeconds>27</remainingTimeInSeconds>
    </timeout>
</timeouts>

集群应用程序超时 API

集群应用程序超时资源包含有关超时的信息。

URI

支持的 HTTP 操作

  • GET

timeout(应用程序超时)对象的元素

项目 数据类型 描述
type string 超时类型。有效值为 ApplicationTimeoutType 枚举的成员。LIFETIME 目前是唯一有效的值。
expiryTime string 应用程序将在 ISO8601 yyyy-MM-dd’T’HH:mm:ss.SSSZ 格式到期的时刻。如果为 UNLIMITED,则应用程序将永久运行。
remainingTimeInSeconds long 已配置应用程序超时的剩余时间。-1 表示应用程序未配置超时。0 表示应用程序已使用已配置的超时类型过期。

JSON 响应

HTTP 请求

  Accept: application/json
  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeouts/LIFETIME

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
"timeout":
   {
     "type": "LIFETIME",
     "expiryTime": "2016-12-05T22:51:00.104+0530",
     "remainingTimeInSeconds": 27
   }
}

XML 响应

HTTP 请求

  Accept: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeouts/LIFETIME

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 712
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeout>
    <type>LIFETIME</type>
    <expiryTime>2016-12-05T22:51:00.104+0530</expiryTime>
    <remainingTimeInSeconds>27</remainingTimeInSeconds>
</timeout>

集群应用程序超时更新 API

更新给定超时类型的应用程序超时。

URI

支持的 HTTP 操作

  • PUT

timeout 对象的元素

项目 数据类型 描述
type string 超时类型。有效值为 ApplicationTimeoutType 枚举的成员。LIFETIME 目前是唯一有效的值。
expiryTime string 应用程序将在 ISO8601 yyyy-MM-dd’T’HH:mm:ss.SSSZ 格式到期的时刻。

JSON 响应

HTTP 请求

      Accept: application/json
      PUT http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeout
      Content-Type: application/json
        {
        "timeout":
                   {
                     "type": "LIFETIME",
                     "expiryTime": "2016-11-27T09:36:16.678+05:30"
                   }
        }

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
"timeout":
   {
     "type": "LIFETIME",
     "expiryTime": "2016-11-27T09:36:16.678+05:30",
     "remainingTimeInSeconds": 90
   }
}

XML 响应

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/apps/{appid}/timeout
      Content-Type: application/xml
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <timeout>
            <type>LIFETIME</type>
            <expiryTime>2016-11-27T09:36:16.678+05:30</expiryTime>
        </timeout>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 712
  Server: Jetty(6.1.26)

响应正文

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<timeout>
    <type>LIFETIME</type>
    <expiryTime>2016-11-27T09:36:16.678+05:30</expiryTime>
    <remainingTimeInSeconds>90</remainingTimeInSeconds>
</timeout>

调度程序配置变更 API

调度程序配置变更 API 提供了一种修改调度程序/队列配置和队列层次结构的方法。

请注意,此功能目前处于 alpha 阶段,可能会发生更改。

URI

支持的 HTTP 操作

  • GET
    • PUT

sched-conf 对象的元素

项目 数据类型 描述
update-queue 对象 应更新其配置的队列
add-queue 对象 要添加到调度程序的队列及其配置
remove-queue string 要移除的队列的全路径名
global-updates map 用于更新调度程序全局配置的关键值对映射

GET 请求示例

GET 请求用于检索当前加载到调度程序上下文的调度程序配置。

XML 响应

HTTP 请求

  Accept: application/xml
  Content-Type: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/scheduler-conf

响应标头

  TTP/1.1 200 OK
  Content-Type: application/xml; charset=utf-8
  Transfer-Encoding: chunked

响应正文

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <configuration>
        <property>
          <name>yarn.scheduler.capacity.root.queues</name>
          <value>default</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.maximum-applications</name>
          <value>10000</value>
        </property>
        <property>
          <name>yarn.scheduler.capacity.root.default.capacity</name>
          <value>100</value>
        </property>
      </configuration>

PUT 请求示例

PUT 请求用于修改调度程序配置。成功的修改将得到 200 响应。格式错误的请求或导致无效调度程序配置的请求将得到 400 响应。

更新队列配置

更新队列配置的请求。

update-queue 对象的元素

项目 数据类型 描述
queue-name string 要更新的队列的全路径名
params map 用于更新此队列的关键值配置对映射

假设我们正在使用容量调度程序,当前队列配置是单个队列 root.default,此示例将 root.default 的最大应用程序数设置为 100,其最小用户限制百分比设置为 10。

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <update-queue>
          <queue-name>root.default</queue-name>
          <params>
            <entry>
              <key>maximum-applications</key>
              <value>100</value>
            </entry>
            <entry>
              <key>minimum-user-limit-percent</key>
              <value>10</value>
            </entry>
          </params>
        </update-queue>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

添加队列

添加队列/更新队列配置的请求。

add-queue 对象的元素

项目 数据类型 描述
queue-name string 要添加的队列的全路径名
params map 用于设置此队列的关键值配置对映射

假设我们正在使用容量调度程序,当前队列配置是单个队列 root.default,此示例添加一个队列 root.a,其容量/最大容量为 10,并将 root.default 的容量/最大容量调整为 90。(更复杂的示例包括添加一个其父队列也在同一请求中被添加的队列,或添加多个同级队列。)

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <add-queue>
          <queue-name>root.a</queue-name>
          <params>
            <entry>
              <key>capacity</key>
              <value>10</value>
            </entry>
            <entry>
              <key>maximum-capacity</key>
              <value>10</value>
            </entry>
          </params>
        </add-queue>
        <update-queue>
          <queue-name>root.default</queue-name>
          <params>
            <entry>
              <key>capacity</key>
              <value>90</value>
            </entry>
            <entry>
              <key>maximum-capacity</key>
              <value>90</value>
            </entry>
          </params>
        </update-queue>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

移除队列

从队列层次结构中移除队列的请求。

假设我们正在使用容量调度程序,当前队列配置是三个队列 root.defaultroot.aroot.b,此示例将移除 root.aroot.b。(更复杂的示例包括移除父队列及其子队列。)

注意:队列必须先置于 STOPPED 状态,然后才能删除。任何更新的队列配置都应是有效的,即每个 级别 的队列容量应等于 100%。

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <remove-queue>root.a</remove-queue>
        <remove-queue>root.b</remove-queue>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

更新全局调度程序配置

更新全局调度程序配置的请求。假设我们正在使用容量调度程序,此示例将启用队列映射。对于全局配置更新,必须指定完整配置密钥。

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <global-updates>
          <entry>
            <key>yarn.scheduler.capacity.queue-mappings-override.enable</key>
            <value>true</value>
          </entry>
        </global-updates>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

向队列添加节点标签

假设我们正在使用容量调度程序,当前队列配置是两个队列 root.default 和 root.a,此示例将节点标签 x 添加到队列 root.a。使用以下命令创建节点标签 x 并分配节点。

yarn rmadmin -addToClusterNodeLabels "x(exclusive=true)"

yarn rmadmin -replaceLabelsOnNode "<nodeId>=x"

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <update-queue>
          <queue-name>root.a</queue-name>
          <params>
            <entry>
              <key>accessible-node-labels</key>
              <value>x</value>
            </entry>
            <entry>
              <key>accessible-node-labels.x.capacity</key>
              <value>100</value>
            </entry>
          </params>
        </update-queue>
        <update-queue>
          <queue-name>root</queue-name>
          <params>
            <entry>
              <key>accessible-node-labels.x.capacity</key>
              <value>100</value>
            </entry>
          </params>
        </update-queue>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

从队列中移除节点标签

假设我们正在使用容量调度程序,并且当前队列配置为两个队列 root.default 和 root.a,并且节点标签 x 已分配给队列 root.a。此示例取消了队列 root.a 中的节点标签 x 并将其删除。

HTTP 请求

      Accept: application/xml
      PUT http://rm-http-address:port/ws/v1/cluster/scheduler-conf
      Content-Type: application/xml
      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <sched-conf>
        <update-queue>
          <queue-name>root.a</queue-name>
          <params>
            <entry>
              <key>accessible-node-labels</key>
              <value></value>
            </entry>
          </params>
        </update-queue>
      </sched-conf>

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Transfer-Encoding: chunked

yarn rmadmin -removeFromClusterNodeLabels x

集群容器信号 API

使用容器信号 API,您可以使用以下命令之一向指定容器发送信号:OUTPUT_THREAD_DUMP、GRACEFUL_SHUTDOWN 和 FORCEFUL_SHUTDOWN。

URI

  http://rm-http-address:port/ws/v1/cluster/containers/{containerId}/signal/{command}

支持的 HTTP 操作

  POST

支持的查询参数

  None

响应示例

JSON 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/containers/container_1531404209605_0008_01_000001/signal/OUTPUT_THREAD_DUMP
  Accept: application/json
  Content-Type: application/json

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

无响应正文。

XML 响应

HTTP 请求

  POST http://rm-http-address:port/ws/v1/cluster/containers/container_1531404209605_0008_01_000001/signal/OUTPUT_THREAD_DUMP
  Accept: application/xml
  Content-Type: application/xml

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml
  Content-Length: 552
  Server: Jetty(6.1.26)

无响应正文。

调度程序活动 API

如果您使用的是容量调度程序,则调度程序活动 RESTful API 可用,并且可以获取在调度周期中记录的调度程序活动信息。API 返回一条消息,其中包含重要的调度活动信息,该信息具有以下字段的分层布局

  • 活动 - 活动是调度程序活动的根对象。
  • 分配 - 分配是基于分区或保留的分配尝试。
  • 分层队列 - 调度程序已尝试向其分配容器的分层队列,每个队列都包含队列名称、分配状态、可选诊断和可选子项。
  • 应用程序 - 应用程序显示为叶队列的子项,每个应用程序都包含有关应用程序的基本信息。
  • 请求 - 请求显示为应用程序的子项,每个请求都包含有关请求的基本信息。
  • 节点 - 节点显示为请求的子项,每个节点都包含节点 ID、分配状态、在节点上分配或保留容器后应出现的可选名称以及在该节点上分配或保留容器失败时应显示的可选诊断。对于按分配状态和诊断分组的聚合节点,每个节点都包含分配状态、聚合节点 ID 和可选诊断。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

可以为 GET 操作指定多个参数。

  • nodeId - 指定的节点 ID,如果未指定,调度程序将在所有节点上记录下一调度周期的调度活动信息。
    • groupBy - 应用程序活动的聚合类型,目前仅支持“diagnostic”,用户可以使用它按分配状态和诊断查询聚合的活动。

活动对象的元素

项目 数据类型 描述
nodeId string 调度程序尝试分配容器的节点 ID。
timestamp long 活动的 Timestamp。
dateTime string 活动日期时间。
诊断 string 关于空结果、不可用环境或非法输入参数的活动顶级诊断,例如“等待显示”、“等待下一个分配”、“群集中没有正在运行的节点管理器”、“获取无效的 groupBy: xx,有效的 groupBy 类型:DIAGNOSTICS”
分配 分配数组 分配对象集合。

分配对象的元素

项目 数据类型 描述
分区 string 分配的分区。
updatedContainerId string 分配中更新的(已分配或预留)容器 ID。
finalAllocationState string 分配的最终分配状态,包括已分配、已从预留分配、已预留和已跳过。
root 队列 队列对象

队列对象的元素

项目 数据类型 描述
name string 队列名称。
allocationState string 队列的最终分配状态,包括已接受、已拒绝和已跳过。
诊断 string 队列诊断。
children 队列或应用程序数组 队列对象(对于父队列)或应用程序对象(对于叶队列)集合

应用程序对象的元素

项目 数据类型 描述
name string 应用程序名称。
appPriority string 应用程序优先级。
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 应用程序诊断。
children 请求数组 请求对象集合

请求对象的元素

项目 数据类型 描述
name string 请求名称,值格式为“request_<requestPriority>_<allocationRequestId>”,可用于识别不同的请求。
requestPriority string 请求优先级。
allocationRequestId string 请求的分配请求 ID。
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 请求诊断。
children 节点数组 节点对象集合。

节点对象的元素

项目 数据类型 描述
name string 容器信息,这是可选的,并且可以在分配状态为已分配、已预留或已从预留分配时显示。
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 关于正常模式中的节点或聚合模式中的节点的诊断
nodeId string 调度过程所基于的节点 ID 不会显示在具有 groupBy 参数的聚合查询中。
nodeIds 字符串数组 聚合活动节点 ID 的集合,仅显示在具有 groupBy 参数的聚合查询中。
count int 节点 ID 的数量,仅显示在具有 groupBy 参数的聚合查询中。

响应示例

JSON 响应

HTTP 请求

  Accept: application/json
  GET http://rm-http-address:port/ws/v1/cluster/scheduler/activities

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

以下是在启用全局调度时的一个输出示例,对于单个请求,在节点级别有多个活动。对于单节点放置,不同之处在于 nodeId 将显示为活动字段,并且对于每个请求,在节点级别应该只有一个活动。

{
  "activities": {
    "timestamp": 1562296830912,
    "dateTime": "Fri Jul 05 11:20:30 CST 2019",
    "allocations": [
      {
        "partition": "",
        "finalAllocationState": "ALLOCATED",
        "root": {
          "name": "root",
          "allocationState": "ACCEPTED",
          "children": [
            {
              "name": "a",
              "allocationState": "SKIPPED",
              "diagnostic": "Queue does not need more resources"
            },
            {
              "name": "b",
              "allocationState": "ACCEPTED",
              "children": [
                {
                  "name": "application_1562296828063_0001",
                  "appPriority": 0,
                  "allocationState": "ALLOCATED",
                  "children": [
                    {
                      "name": "request_1_-1",
                      "requestPriority": 1,
                      "allocationRequestId": -1,
                      "allocationState": "ALLOCATED",
                      "children": [
                        {
                          "allocationState": "SKIPPED",
                          "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:3072, vCores:1>, available=<memory:2048, vCores:2>",
                          "nodeId": "127.0.0.2:1234"
                        },
                        {
                          "allocationState": "SKIPPED",
                          "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:3072, vCores:1>, available=<memory:2048, vCores:2>",
                          "nodeId": "127.0.0.3:1234"
                        },
                        {
                          "allocationState": "SKIPPED",
                          "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:3072, vCores:1>, available=<memory:2048, vCores:2>",
                          "nodeId": "127.0.0.4:1234"
                        },
                        {
                          "name": "Container: [ContainerId: null, AllocationRequestId: -1, Version: 0, NodeId: 127.0.0.1:1234, NodeHttpAddress: 127.0.0.1:2, Resource: <memory:3072, vCores:1>, Priority: 1, Token: null, ExecutionType: GUARANTEED, ]",
                          "allocationState": "ALLOCATED",
                          "nodeId": "127.0.0.1:1234"
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

当我们使用查询参数(“groupBy=diagnostic”)查询调度程序活动 REST API 时,4 个节点活动信息将被分组为 2 组:具有相同诊断“节点的总资源不足以满足请求,资源不足=[memory-mb]”的 SKIPPED 组和 ALLOCATED 组,输出应如下所示

{
  "activities": {
    "timestamp": 1562297536893,
    "dateTime": "Fri Jul 05 11:32:16 CST 2019",
    "allocations": [
      {
        "partition": "",
        "finalAllocationState": "ALLOCATED",
        "root": {
          "name": "root",
          "allocationState": "ACCEPTED",
          "children": [
            {
              "name": "a",
              "allocationState": "SKIPPED",
              "diagnostic": "Queue does not need more resources"
            },
            {
              "name": "b",
              "allocationState": "ACCEPTED",
              "children": [
                {
                  "name": "application_1562297533892_0001",
                  "appPriority": 0,
                  "allocationState": "ALLOCATED",
                  "children": [
                    {
                      "name": "request_1_-1",
                      "requestPriority": 1,
                      "allocationRequestId": -1,
                      "allocationState": "ALLOCATED",
                      "children": [
                        {
                          "allocationState": "ALLOCATED",
                          "count": 1,
                          "nodeIds": [
                            "127.0.0.1:1234"
                          ]
                        },
                        {
                          "allocationState": "SKIPPED",
                          "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]",
                          "count": 3,
                          "nodeIds": [
                            "127.0.0.2:1234",
                            "127.0.0.3:1234",
                            "127.0.0.4:1234"
                          ]
                        }
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      }
    ]
  }
}

XML 响应

HTTP 请求

  Accept: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/scheduler/activities

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml; charset=utf-8
  Transfer-Encoding: chunked

响应正文

<?xml version="1.0" encoding="utf-8"?>
<activities>
  <timestamp>1562296830912</timestamp>
  <dateTime>Fri Jul 05 11:20:30 CST 2019</dateTime>
  <allocations>
    <partition></partition>
    <finalAllocationState>ALLOCATED</finalAllocationState>
    <root>
      <name>root</name>
      <allocationState>ACCEPTED</allocationState>
      <children>
        <name>a</name>
        <allocationState>SKIPPED</allocationState>
        <diagnostic>Queue does not need more resource</diagnostic>
      </children>
      <children>
        <name>b</name>
        <allocationState>ACCEPTED</allocationState>
        <children>
          <name>application_1562296828063_0001</name>
          <appPriority>0</appPriority>
          <allocationState>ACCEPTED</allocationState>
          <children>
            <name>request_1_-1</name>
            <requestPriority>1</requestPriority>
            <allocationRequestId>-1</allocationRequestId>
            <allocationState>ALLOCATED</allocationState>
            <children>
              <allocationState>SKIPPED</allocationState>
              <diagnostic>Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:3072, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
              <nodeId>127.0.0.2:1234</nodeId>
            </children>
            <children>
              <allocationState>SKIPPED</allocationState>
              <diagnostic>Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:3072, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
              <nodeId>127.0.0.3:1234</nodeId>
            </children>
            <children>
              <allocationState>SKIPPED</allocationState>
              <diagnostic>Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:3072, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
              <nodeId>127.0.0.4:1234</nodeId>
            </children>
            <children>
              <name>Container: [ContainerId: null, AllocationRequestId: -1, Version: 0, NodeId: 127.0.0.1:1234, NodeHttpAddress: 127.0.0.1:2, Resource: &lt;memory:3072, vCores:1&gt;, Priority: 1, Token: null, ExecutionType: GUARANTEED, ]</name>
              <allocationState>ALLOCATED</allocationState>
              <nodeId>127.0.0.1:1234</nodeId>
            </children>
          </children>
        </children>
      </children>
    </root>
  </allocations>
</activities>

应用程序活动 API

如果您使用容量调度程序,则应用程序活动 RESTful API 可用,并且可以获取指定应用程序的有用调度信息,响应具有以下字段的分层布局

  • AppActivities - AppActivities 是基本信息中应用程序活动的根元素。
  • Allocations - Allocations 是从缓存中查询的应用程序级别分配尝试。
  • Requests - Requests 显示为分配的子级,每个请求包含请求名称、请求优先级、分配请求 ID、分配状态和可选子级。
  • Nodes - Nodes 显示为请求的子级,每个请求包含节点 ID、分配状态、在节点上分配或保留容器后应出现的可选名称,以及在节点上分配或保留容器失败时应出现的可选诊断。对于按分配状态和诊断分组的聚合节点,每个节点包含分配状态、聚合节点 ID 和可选诊断。

URI

支持的 HTTP 操作

  • GET

支持的查询参数

可以为 GET 操作指定多个参数。

  • maxTime - 从现在开始记录应用程序活动的持续时间(以秒为单位)。如果未指定,则默认为 3(秒)。
    • requestPriorities - 请求的优先级,用于过滤应用程序活动,指定为逗号分隔的列表。
    • allocationRequestIds - 请求的分配请求 ID,用于筛选应用程序活动,以逗号分隔的形式指定。
    • groupBy - 应用程序活动的聚合类型,目前仅支持“diagnostic”,用户可以使用该类型按分配状态和诊断信息查询聚合的活动。
    • limit - 应用程序活动的限制,可以降低服务器和客户端的成本。
    • actions - 应用程序活动的必需操作,包括“refresh”和“get”,以逗号分隔的形式指定。
    • summarize - 是否需要汇总多个调度进程中的应用程序活动,以布尔值指定,在禁用多节点放置时很有用,因为在单个调度进程中只能考虑一个节点,启用此功能可以为我们提供所有节点的诊断摘要。

AppActivities 对象的元素

项目 数据类型 描述
applicationId string 指定的应用程序 ID。
分配 分配数组 按时间降序排列的分配对象集合。

分配对象的元素

项目 数据类型 描述
nodeId string 节点的 ID。
timestamp long 分配的时间戳。
dateTime string 分配的日期时间。
queueName string 应用程序的队列名称。
appPriority int 应用程序的优先级
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 应用程序诊断。
children 请求数组 请求对象集合

请求对象的元素

项目 数据类型 描述
requestPriority string 请求优先级。
allocationRequestId string 请求的分配请求 ID。
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 请求诊断。
children 节点数组 节点对象集合。

节点对象的元素

项目 数据类型 描述
name string 已更新容器的 ID,如果未分配,将显示“Container-Id-Not-Assigned”。
allocationState string 应用程序的最终分配状态,包括已分配、已预留、已重新预留和已跳过。
诊断 string 关于正常模式中的节点或聚合模式中的节点的诊断
nodeId string 调度过程所基于的节点 ID 不会显示在具有 groupBy 参数的聚合查询中。
nodeIds 字符串数组 聚合应用程序活动的节点 ID 集合,仅显示具有 groupBy 参数的聚合查询。
count int 节点 ID 的数量,仅显示在具有 groupBy 参数的聚合查询中。

响应示例

JSON 响应

HTTP 请求

  Accept: application/json
  GET http://rm-http-address:port/ws/v1/cluster/scheduler/app-activities/{appid}

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/json
  Transfer-Encoding: chunked
  Server: Jetty(6.1.26)

响应正文

{
  "appActivities": {
    "applicationId": "application_1562312049195_0001",
    "allocations": [
      {
        "timestamp": 1562312052039,
        "dateTime": "Fri Jul 05 15:34:12 CST 2019",
        "queueName": "b",
        "appPriority": 0,
        "allocationState": "RESERVED",
        "children": [
          {
            "requestPriority": 1,
            "allocationRequestId": -1,
            "allocationState": "RESERVED",
            "children": [
              {
                "name": "Container-Id-Not-Assigned",
                "allocationState": "SKIPPED",
                "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:4096, vCores:1>, available=<memory:2048, vCores:2>",
                "nodeId": "127.0.0.3:1234"
              },
              {
                "name": "Container-Id-Not-Assigned",
                "allocationState": "SKIPPED",
                "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:4096, vCores:1>, available=<memory:2048, vCores:2>",
                "nodeId": "127.0.0.4:1234"
              },
              {
                "name": "Container-Id-Not-Assigned",
                "allocationState": "SKIPPED",
                "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=<memory:4096, vCores:1>, available=<memory:2048, vCores:2>",
                "nodeId": "127.0.0.2:1234"
              },
              {
                "name": "Container-Id-Not-Assigned",
                "allocationState": "RESERVED",
                "diagnostic": "Node does not have sufficient resource for request, insufficient resources=[memory-mb]\nrequired=<memory:4096, vCores:1>, available=<memory:1024, vCores:3>",
                "nodeId": "127.0.0.1:1234"
              }
            ]
          }
        ]
      },
      {
        "timestamp": 1562312052031,
        "dateTime": "Fri Jul 05 15:34:12 CST 2019",
        "queueName": "b",
        "appPriority": 0,
        "allocationState": "ALLOCATED",
        "children": [
          {
            "requestPriority": 0,
            "allocationRequestId": -1,
            "allocationState": "ALLOCATED",
            "children": [
              {
                "name": "Container-Id-Not-Assigned",
                "allocationState": "ALLOCATED",
                "nodeId": "127.0.0.2:1234"
              }
            ]
          }
        ]
      }
    ]
  }
}

当我们使用查询参数(“groupBy=diagnostic”)查询调度程序活动 REST API 时,4 个节点活动将分为两组:具有相同诊断信息“节点的总资源不足以满足请求,资源不足=[memory-mb]”的 SKIPPED 组和 ALLOCATED 组,输出应如下所示

{
  "appActivities": {
    "applicationId": "application_1562312658870_0001",
    "allocations": [
      {
        "timestamp": 1562312661536,
        "dateTime": "Fri Jul 05 15:44:21 CST 2019",
        "queueName": "b",
        "appPriority": 0,
        "allocationState": "RESERVED",
        "children": [
          {
            "requestPriority": 1,
            "allocationRequestId": -1,
            "allocationState": "RESERVED",
            "children": [
              {
                "allocationState": "SKIPPED",
                "diagnostic": "Node's total resource is insufficient for request, insufficient resources=[memory-mb]",
                "count": 3,
                "nodeIds": [
                  "127.0.0.3:1234",
                  "127.0.0.4:1234",
                  "127.0.0.2:1234"
                ]
              },
              {
                "allocationState": "RESERVED",
                "diagnostic": "Node does not have sufficient resource for request, insufficient resources=[memory-mb]",
                "count": 1,
                "nodeIds": [
                  "127.0.0.1:1234"
                ]
              }
            ]
          }
        ]
      },
      {
        "timestamp": 1562312661522,
        "dateTime": "Fri Jul 05 15:44:21 CST 2019",
        "queueName": "b",
        "appPriority": 0,
        "allocationState": "ALLOCATED",
        "children": [
          {
            "requestPriority": 0,
            "allocationRequestId": -1,
            "allocationState": "ALLOCATED",
            "children": [
              {
                "allocationState": "ALLOCATED",
                "count": 1,
                "nodeIds": [
                  "127.0.0.2:1234"
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

XML 响应

HTTP 请求

  Accept: application/xml
  GET http://rm-http-address:port/ws/v1/cluster/scheduler/app-activities/{appid}

响应标头

  HTTP/1.1 200 OK
  Content-Type: application/xml; charset=utf-8
  Transfer-Encoding: chunked

响应正文

<?xml version="1.0" encoding="utf-8"?>

<appActivities>
  <applicationId>application_1562312049195_0001</applicationId>
  <allocations>
    <timestamp>1562312052039</timestamp>
    <dateTime>Fri Jul 05 15:34:12 CST 2019</dateTime>
    <queueName>b</queueName>
    <appPriority>0</appPriority>
    <allocationState>RESERVED</allocationState>
    <children>
      <requestPriority>1</requestPriority>
      <allocationRequestId>-1</allocationRequestId>
      <allocationState>RESERVED</allocationState>
      <children>
        <name>Container-Id-Not-Assigned</name>
        <allocationState>SKIPPED</allocationState>
        <diagnostic>Node's total resource is insufficient for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:4096, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
        <nodeId>127.0.0.3:1234</nodeId>
      </children>
      <children>
        <name>Container-Id-Not-Assigned</name>
        <allocationState>SKIPPED</allocationState>
        <diagnostic>Node does not have sufficient resource for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:4096, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
        <nodeId>127.0.0.4:1234</nodeId>
      </children>
      <children>
        <name>Container-Id-Not-Assigned</name>
        <allocationState>SKIPPED</allocationState>
        <diagnostic>Node does not have sufficient resource for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:4096, vCores:1&gt;, available=&lt;memory:2048, vCores:2&gt;</diagnostic>
        <nodeId>127.0.0.2:1234</nodeId>
      </children>
      <children>
        <name>Container-Id-Not-Assigned</name>
        <allocationState>RESERVED</allocationState>
        <diagnostic>Node does not have sufficient resource for request, insufficient resources=[memory-mb]\nrequired=&lt;memory:4096, vCores:1&gt;, available=&lt;memory:1024, vCores:3&gt;</diagnostic>
        <nodeId>127.0.0.1:1234</nodeId>
      </children>
    </children>
  </allocations>
  <allocations>
    <timestamp>1562312052031</timestamp>
    <dateTime>Fri Jul 05 15:34:12 CST 2019</dateTime>
    <queueName>b</queueName>
    <appPriority>0</appPriority>
    <allocationState>ALLOCATED</allocationState>
    <children>
      <requestPriority>0</requestPriority>
      <allocationRequestId>-1</allocationRequestId>
      <allocationState>ALLOCATED</allocationState>
      <children>
        <name>Container-Id-Not-Assigned</name>
        <allocationState>ALLOCATED</allocationState>
        <nodeId>127.0.0.2:1234</nodeId>
      </children>
    </children>
  </allocations>
</appActivitiesInfo>