Yarn对外接口

摘要:
Tid=451687本文档面向需要开发Yarn应用程序的用户。L NodeManager(NM)NM是每个节点上的资源和任务管理器。它定期向RM报告此节点上的资源使用情况和每个容器的运行状态;它将接收和处理来自AM的各种请求,例如容器启动/停止。RM为AM返回的资源由Container表示。
1 概述

Yarn对外接口

https://forum.huawei.com/enterprise/zh/forum.php?mod=viewthread&tid=451687

本文档专供需要对Yarn进行应用开发的用户使用。本指南主要适用于具备Java开发经验的开发人员。

简介

Yarn是一个分布式的资源管理系统,用于提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得越来越困难,所以MapReduce的committer决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率,以及能支持除了MapReduce计算框架外的更多的计算框架。

基本概念

l   ResourceManager(RM

RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)。

l   ApplicationMaster(AM

用户提交的每个应用程序均包含一个AM,主要功能包括:

−           与RM调度器协商以获取资源(用Container表示)。

−           将得到的资源进一步分配给内部任务。

−           与NM通信以启动/停止任务。

−           监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源以重启任务。

l   NodeManager(NM

NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它会接收并处理来自AM的Container启动/停止等各种请求。

l   Container

Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。

2 对外接口

2.1 Command

您可以使用YARN Commands对YARN集群进行一些操作,例如启动ResourceManager、提交应用程序、中止应用、查询节点状态、下载container日志等操作。

完整和详细的Command描述可以参考官网文档:http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/YarnCommands.html。

常用Command

YARN Commands可同时供普通用户和管理员用户使用,它包含了少量普通用户可以执行的命令,比如jar、logs。而大部分只有管理员有权限使用。

用户可以通过以下命令查看YARN用法和帮助:

yarn --help

用法:进入Yarn客户端的任意目录,执行source命令导入环境变量,直接运行命令即可。

格式如下所示:

yarn  [--config confdir] COMMAND

其中COMMAND可以为:

表2-1 常用Command描述

COMMAND

描述

resourcemanager

运行一个ResourceManager。

备注:以omm用户执行服务端命令前需export环境变量,例如:

l  export YARN_CONF_DIR=/opt/huawei/Bigdata/FusionInsight_HD_

V100R002C80SPC200/1_10_ResourceManager/etc

l  export HADOOP_CONF_DIR=/opt/huawei/Bigdata/FusionInsight_HD

_V100R002C80SPC

200/1_10_ResourceManager/etc

nodemanager

运行一个NodeManager。

备注:以omm用户执行服务端命令前需export环境变量,例如:

l  export YARN_CONF_DIR=/opt/huawei/Bigdata/FusionInsight_HD_

V100R002C80SPC200/1_10_NodeManager/etc

l  export HADOOP_CONF_DIR=/opt/huawei/Bigdata/FusionInsight_HD_

V100R002C80SPC200/1_10_NodeManager/etc

Rmadmin

管理员工具(动态更新信息)。

Version

打印版本信息。

jar <jar>

运行jar文件。

Logs

获取container日志。

classpath

打印获取Hadoop JAR包和其他库文件所需的CLASSPATH路径。

daemonlog

获取或者设置服务LOG级别。

CLASSNAME

运行一个名字为CLASSNAME的类。

top

运行集群利用率监控工具。

Superior Scheduler Command

Superior Scheduler引擎提供了输出Superior Scheduler引擎具体信息的CLI。为了执行Superior命令,需要使用“<HADOOP_HOME>/bin/superior”脚本。

以下为superior命令格式:

<HADOOP_HOME>/bin/superior
 
Usage: superior [COMMAND | -help]
   Where COMMAND is one of:
   resourcepool                        prints resource pool status
   queue                               prints queue status
   application                         prints application status
   policy                              prints policy status

不带参数调用大多数命令时会显示帮助信息。

l   Superior resourcepool命令:

该命令显示Resource Pool和相关策略的相关状态以及配置信息。

说明

Superior resourcepool命令仅用于管理员用户及拥有yarn管理权限的用户。

用法输出:

>superior resourcepool
 
Usage: resourcepool [-help]
                    [-list]
                    [-status <resourcepoolname>]
 -help                        prints resource pool usage
 -list                        prints all resource pool summary report
 -status <resourcepoolname>   prints status and configuration of specified
                              resource pool

−           resourcepool -list以表格格式中显示Resource Pool摘要。示例如下:

> superior resourcepool -list
NAME       NUMBER_MEMBER     TOTAL_RESOURCE           AVAILABLE_RESOURCE
Pool1      4                 vcores 30,memory 1000    vcores 21,memory 80
Pool2      100               vcores 100,memory 12800  vcores 30,memory 1000
default    2                 vcores 64,memory 128     vcores 40,memory 28

−           resourcepool -status <resourcepoolname>以列表格式显示资源库详细信息。示例如下:

> superior resourcepool -status default
NAME: default
DESCRIPTION: System generated resource pool
TOTAL_RESOURCE: vcores 64,memory 128
AVAILABLE_RESOURCE: vcores 40,memory 28
NUMBER_MEMBER: 2
MEMBERS: node1,node2
CONFIGURATION:
|-- RESOURCE_SELECT:
|__RESOURCES:

l   Superior queue命令

该命令输出分层队列信息。

用法输出:

>superior queue 
 
Usage: queue [-help]
             [-list] [-e] [[-name <queue_name>] [-r|-c]]
             [-status <queue_name>]
 -c                     only work with -name <queue_name> option. If this
                        option is used, command  will print information of
                        specified queue and its direct children.
 -e                     only work with -list or -list -name option. If
                        this option is used, command will print effective
                        state of specified queue and all of its
                        descendants.
 -help                  prints queue sub command usage
 -list                  prints queue summary report. This option can work
                        with -name <queue_name> and -r options.
 -name <queue_name>     print specified queue, this can work with -r
                        option. By default, it will print queue's own
                        information. When -r is defined, command will
                        print all of its descendant queues. When -c is
                        defined, it will print its direct children queues.
 -r                     only work with -name <queue_name> option. If this
                        option is used, command will print information of
                        specified queue and all of its descendants.
 -status <queue_name>   prints status of specified queue

−           queue -list以表格格式输出队列摘要信息。命令将基于队列分层样式输出信息。用户可通过SUBMIT ACL或ADMIN ACL的队列权限查看队列。示例如下:

> superior queue -list
NAME         STATE            NRUN_APP     NPEND_APP     NRUN_CONTAINER   NPEND_REQUEST    RES_INUSE                 RES_REQUEST
root         OPEN|ACTIVE      10           20            100              200              vcores 100,memory 1000    vcores 200,memory 2000
root.Q1      OPEN|ACTIVE      5            10            50               100              vcores 50,memory 500      vcores 100,memory 1000
root.Q1.Q11  OPEN|ACTIVE      5            10            50               100              vcores 50,memory 500      vcores 100,memory 1000
root.Q1.Q12  CLOSE|INACTIVE   0            0             0                0                vcores 0,memory 0         vcores 0,memory 0
root.Q2      OPEN|INACTIVE    5            10            50               100              vcores 50,memory 500      vcores 100,memory 1000
root.Q2.Q21  OPEN|ACTIVE      5            10            50               100              vcores 50,memory 500      vcores 100,memory 1000

−           queue -list -name root.Q1输出root.Q1。

> superior queue -list -name root.Q1
NAME            STATE           NRUN_APP     NPEND_APP      NRUN_CONTAINER  NPEND_REQUEST    RES_INUSE            RES_REQUEST
root.Q1         OPEN|ACTIVE     5            10             50              100              vcores 50,memory 500 vcores 100,memory 1000

−           queue -list -name root.Q1 -r将输出root.Q1及其所有的分支。

> superior queue -list -nameroot.Q1 -r
NAME         STATE            NRUN_APP     NPEND_APP  NRUN_CONTAINER   NPEND_REQUEST    RES_INUSE               RES_REQUEST
root.Q1      OPEN|ACTIVE      5            10         50               100              vcores 50,memory 500    vcores 100,memory 1000
root.Q1.Q11  OPEN|ACTIVE      5            10         50               100              vcores 50,memory 500    vcores 100,memory 1000
root.Q1.Q12  CLOSE|INACTIVE   0            0          0                0                vcores 0,memory 0       vcores 0,memory 0

−           queue -list -name root -c将会输出root及其直系子目录。

> superior queue -list -name root -c
NAME                  STATE             NRUN_APP     NPEND_APP     NRUN_CONTAINER   NPEND_REQUEST    RES_INUSE                RES_REQUEST
root                  OPEN|ACTIVE       10           20            100              200              vcores 100,memory 1000   vcores 200,memory 2000
root.Q1               OPEN|ACTIVE       5            10            50               100              vcores 50,memory 500     vcores 100,memory 1000
root.Q2               OPEN|INACTIVE     5            10            50               100              vcores 50,memory 500     vcores 100,memory 1000

−           queue –status <queue_name>将会输出具体队列状态和配置。

用户可通过SUBMIT ACL权限查看除队列ACL外的细节信息。

用户还可通过ADMIN ACL的队列权限查看包括ACL在内的队列细节信息。

> superior queue -status root.Q1
NAME: root.Q1
OPEN_STATE:CLOSED
ACTIVE_STATE: INACTIVE
EOPEN_STATE: CLOSED
EACTIVE_STATE: INACTIVE
LEAF_QUEUE: Yes
NUMBER_PENDING_APPLICATION: 100
NUMBER_RUNNING_APPLICATION: 10
NUMBER_PENDING_REQUEST: 10
NUMBER_RUNNING_CONTAINER: 10
NUMBER_RESERVED_CONTAINER: 0
RESOURCE_REQUEST: vcores 3,memory 3072
RESOURCE_INUSE: vcores 2,memory 2048
RESOURCE_RESERVED: vcores 0,memory 0
CONFIGURATION:
|-- DESCRIPTION: Spark session queue
|-- MAX_PENDING_APPLICATION: 10000
|--MAX_RUNNING_APPLICATION: 1000
|--ALLOCATION_ORDER_POLICY: FIFO
|--DEFAULT_RESOURCE_SELECT: label1
|--MAX_MASTER_SHARE: 10%
|--MAX_RUNNING_APPLICATION_PER_USER : -1
|--MAX_ALLOCATION_UNIT: vcores 32,memory 12800
|--ACL_USERS: user1,user2
|--ACL_USERGROUPS: usergroup1,usergroup2
|-- ACL_ADMINS: user1
|--ACL_ADMINGROUPS: usergroup1

l   Superior application命令

该命令输出应用相关信息。

用法输出:

>superior application 
 
Usage: application [-help]
                   [-list]
                   [-status <application_id>]
 -help                      prints application sub command usage
 -list                      prints all application summary report
 -status <application_id>   prints status of specified application

用户可通过应用的浏览访问权限查看应用相关信息。

−           application -list以表的形式提供所有应用的信息摘要:

> superior application -list
ID                                        QUEUE             USER     NRUN_CONTAINER          NPEND_REQUEST               NRSV_CONTAINER       RES_INUSE                        RES_REQUEST                     RES_RESERVED           
application_1482743319705_0005            root.SEQ.queueB   hbase    1                       100                         0                    vcores 1,memory 1536             vcores 2000,memory 409600       vcores 0,memory 0
application_1482743319705_0006            root.SEQ.queueB   hbase    0                       1                           0                    vcores 0,memory 0                vcores 1,memory 1536            vcores 0,memory 0

−           application -status <app_id>命令输出指定应用的详细信息。示例如下:

> superior application -status application_1443067302606_0609
ID: application_1443067302606_0609
QUEUE: root.Q1.Q11
USER: cchen
RESOURCE_REQUEST: vcores 3,memory 3072
RESOURCE_INUSE: vcores 2,memory 2048
RESOURCE_RESERVED:vcores 1, memory 1024
NUMBER_RUNNING_CONTAINER: 2
NUMBER_PENDING_REQUEST: 3
NUMBER_RESERVED_CONTAINER: 1
MASTER_CONTAINER_ID: application_1443067302606_0609_01
MASTER_CONTAINER_RESOURCE: node1.domain.com
BLACKLIST: node5,node8
DEMANDS:
|-- PRIORITY: 20
|-- MASTER: true
|-- CAPABILITY: vcores 2, memory 2048
|-- COUNT: 1
|-- RESERVED_RES : vcores 1, memory 1024
|-- RELAXLOCALITY: true
|-- LOCALITY: node1/1
|-- RESOURCESELECT: label1
|-- PENDINGREASON: “application limit reached”
|-- ID: application_1443067302606_0609_03
|-- RESOURCE: node1.domain.com
|-- RESERVED_RES: vcores 1, memory 1024
|
|--PRIORITY: 1
|-- MASTER: false
|-- CAPABILITY: vcores 1,memory 1024
|-- COUNT: 2
|-- RESERVED_RES: vcores 0, memory 0
|-- RELAXLOCLITY: true
|--LOCALITY: node1/1,node2/1,rackA/2
|-- RESOURCESELECT: label1
|-- PENDINGREASON: “no available resource”
CONTAINERS:
|-- ID: application_1443067302606_0609_01
|-- RESOURCE: node1.domain.com
|-- CAPABILITY: vcores 1,memory 1024
|
|-- ID: application_1443067302606_0609_02
|-- RESOURCE: node2.domain.com
|-- CAPABILITY: vcores 1,memory 1024

l   Superior policy 命令

该命令输出决策相关信息。

说明

Superior policy命令仅限管理员用户及拥有Yarn管理权限的用户使用。

用法输出:

>superior policy
 
Usage: policy [-help]
              [-list <resourcepoolname>] [-u] [-detail]
              [-status <resourcepoolname>]
 -detail                      only work with -list option to show a
                              summary information of resource pool
                              distribution on queues, including reserve,
                              minimum and maximum
 -help                        prints policy sub command usage
 -list <resourcepoolname>     prints a summary information of resource
                              pool distribution on queue
 -status <resourcepoolname>   prints pool distribution policy
                              configuration and status of specified
                              resource pool
 -u                           only work with -list option to show a
                              summary information of resource pool
                              distribution on queues and also user
                              accounts

−           policy -list <resourcepoolname>输出队列分布信息摘要。示例如下:

>superior policy -list default
NAME: default
TOTAL_RESOURCE: vcores 16,memory 16384
AVAILABLE_RESOURCE: vcores 16,memory 16384
 
NAMERES_INUSERES_REQUEST
root.defaultvcores 0,memory 0vcores 0,memory 0
root.productionvcores 0,memory 0vcores 0,memory 0
root.production.BU1vcores 0,memory 0vcores 0,memory 0
root.production.BU2 vcores 0,memory 0vcores 0,memory 0

−           policy -list <resourcepoolname> -u输出用户级信息摘要。

> superior policy -list default -u
NAME: default
TOTAL_RESOURCE: vcores 16,memory 16384
AVAILABLE_RESOURCE: vcores 16,memory 16384
 
NAMERES_INUSERES_REQUEST
root.defaultvcores 0,memory 0vcores 0,memory 0
root.default.[_others_]vcores 0,memory 0vcores 0,memory 0
root.productionvcores 0,memory 0vcores 0,memory 0
root.production.BU1vcores 0,memory 0vcores 0,memory 0
root.production.BU1.[_others_]vcores 0,memory 0vcores 0,memory 0
root.production.BU2vcores 0,memory 0vcores 0,memory 0
root.production.BU2.[_others_]vcores 0,memory 0vcores 0,memory 0

−           policy -status <resourcepoolname> 输出指定资源库的策略详细资料。

> superior policy -status pool1
NAME: pool1
TOTAL_RESOURCE: vcores 64,memory 128
AVAILABLE_RESOURCE: vcores 40,memory 28
QUEUES:
|-- NAME: root.Q1
|-- RESOURCE_USE: vcores 20, memory 1000
|-- RESOURCE_REQUEST: vcores 2,memory 100
|--RESERVE: vcores 10, memory 4096
|--MINIMUM: vcore 11, memory 4096
|--MAXIMUM: vcores 500, memory 100000
|--CONFIGURATION:
|-- SHARE: 50%
|-- RESERVE: vcores 10, memory 4096
|-- MINIMUM: vcores 11, memory 4096
|-- MAXIMUM: vcores 500, memory 100000
|-- QUEUES:
|-- NAME: root.Q1.Q11
|-- RESOURCE_USE: vcores 15, memory, 500
|-- RESOURCE_REQUEST: vcores 1, memory 50
|-- RESERVE: vcores 0, memory 0
|-- MINIMUM: vcores 0, memory 0
|-- MAXIMUM: vcores -1, memory -1
|-- USER_ACCOUNTS:
|-- NAME: user1
|-- RESOURCE_USE: vcores 1, memory 10
|-- RESOURCE_REQUEST: vcores 1, memory 50
|
|-- NAME: OTHERS
|--RESOURCE_USE: vcores 0, memory 0
|- RESOURCE_REQUEST: vcores 0, memory 0
|-- CONFIGURATION:
|-- SHARE: 100%
|-- USER_POLICY:
|-- NAME: user1
|-- WEIGHT: 10
|
|-- NAME: OTHERS
|-- WEIGHT: 1
|-- MAXIMUM: vcores 10, memory 1000

2.2 Java API

关于YARN的详细API可以直接参考官方网站上的描述:http://hadoop.apache.org/docs/r2.7.2/api/index.html

常用接口

YARN常用的Java类有如下几个。

l   ApplicationClientProtocol

用于Client与ResourceManager之间。Client通过该协议可实现将应用程序提交到ResourceManager上,查询应用程序的运行状态或者中止应用程序等功能。

表2-2 ApplicationClientProtocol常用方法

方法

说明

forceKillApplication(KillApplicationRequest request)

Client通过此接口请求RM中止一个已提交的任务。

getApplicationAttemptReport(GetApplicationAttemptReportRequest request)

Client通过此接口从RM获取指定ApplicationAttempt的报告信息。

getApplicationAttempts(GetApplicationAttemptsRequest request)

Client通过此接口从RM获取所有ApplicationAttempt的报告信息。

getApplicationReport(GetApplicationReportRequest request)

Client通过此接口从RM获取某个应用的报告信息。

getApplications(GetApplicationsRequest request)

Client通过此接口从RM获取满足一定过滤条件的应用的报告信息。

getClusterMetrics(GetClusterMetricsRequest request)

Client通过此接口从RM获取集群的Metrics。

getClusterNodes(GetClusterNodesRequest request)

Client通过此接口从RM获取集群中的所有节点信息。

getContainerReport(GetContainerReportRequest request)

Client通过此接口从RM获取某个Container的报告信息。

getContainers(GetContainersRequest request)

Client通过此接口从RM获取某个ApplicationAttemp的所有Container的报告信息。

getDelegationToken(GetDelegationTokenRequest request)

Client通过此接口获取授权票据,用于container访问相应的service。

getNewApplication(GetNewApplicationRequest request)

Client通过此接口获取一个新的应用ID号,用于提交新的应用。

getQueueInfo(GetQueueInfoRequest request)

Client通过此接口从RM中获取队列的相关信息。

getQueueUserAcls(GetQueueUserAclsInfoRequest request)

Client通过此接口从RM中获取当前用户的队列访问权限信息。

moveApplicationAcrossQueues(MoveApplicationAcrossQueuesRequest request)

移动一个应用到新的队列。

submitApplication(SubmitApplicationRequest request)

Client通过此接口提交一个新的应用到RM。

l   ApplicationMasterProtocol

用于ApplicationMaster与ResourceManager之间。ApplicationMaster使用该协议向ResourceManager注册、申请资源、获取各个任务的运行情况等。

表2-3 ApplicationMasterProtocol常用方法

方法

说明

allocate(AllocateRequest request)

AM通过此接口提交资源分配申请。

finishApplicationMaster(FinishApplicationMasterRequest request)

AM通过此接口通知RM其运行成功或者失败。

registerApplicationMaster(RegisterApplicationMasterRequest request)

AM通过此接口向RM进行注册。

l   ContainerManagementProtocol

用于ApplicationMaster与NodeManager之间。ApplicationMaster使用该协议要求NodeManager启动/中止Container或者查询Container的运行状态。

表2-4 ContainerManagementProtocol常用方法

方法

说明

getContainerStatuses(GetContainerStatusesRequest request)

AM通过此接口向NM请求Containers的当前状态信息。

startContainers(StartContainersRequest request)

AM通过此接口向NM提供需要启动的containers列表的请求。

stopContainers(StopContainersRequest request)

AM通过此接口请求NM停止一系列已分配的Containers。

1.1 REST API

功能简介

通过HTTP REST API来查看更多Yarn任务的信息。目前Yarn的REST接口只能进行一些资源或者任务的查询。完整和详细的接口请直接参考官网上的描述以了解其使用:http://hadoop.apache.org/docs/r2.7.2/hadoop-yarn/hadoop-yarn-site/WebServicesIntro.html

准备运行环境

1.         在节点上安装客户端,例如安装到“/opt/client”目录,可参考“安装客户端”。

2.         进入客户端安装目录“/opt/client”,执行下列命令初始化环境变量。

source bigdata_env

kinit 组件业务用户

说明

kinit一次票据时效24小时。24小时后再次运行样例,需要重新kinit。

3.         与HTTP服务访问相比,以HTTPS方式访问Yarn时,由于使用了SSL安全加密,需要确保Curl命令所支持的SSL协议在集群中已添加支持。若不支持,可对应修改集群中SSL协议。例如,若Curl仅支持TLSv1协议,修改方法如下:

登录FusionInsight Manager页面,单击“服务管理 > Yarn > 服务配置”,在“参数类别”选择“全部配置”,在“搜索”框里搜索“hadoop.ssl.enabled.protocols”,查看参数值是否包含“TLSv1”,若不包含,则在配置项“hadoop.ssl.enabled.protocols”中追加“,TLSv1”。清空“ssl.server.exclude.cipher.list”配置项的值 ,否则以HTTPS访问不了Yarn。单击“保存配置”,并勾选“重新启动受影响的服务或实例。”,单击“确定”,重启服务。

说明

TLSv1协议存在安全漏洞,请谨慎使用。

操作步骤

1.         获取运行在Yarn上的任务的具体信息。

−           命令:

curl -k -i --negotiate -u : "https://10-120-85-2:26001/ws/v1/cluster/apps/"

其中10-120-85-2为ResourceManager主节点的hostname,26001为ResourceManager的端口号。

−           用户能看到哪个队列的任务,要看这个用户是否有这个队列的admin权限,如何给用户赋予队列的admin权限,请参考FusionInsight产品文档中“创建Yarn角色”章节。

−           运行结果:

{
    "apps": {
        "app": [
            {
                "id": "application_1461743120947_0001",
                "user": "spark",
                "name": "Spark-JDBCServer",
                "queue": "default",
                "state": "RUNNING",
                "finalStatus": "UNDEFINED",
                "progress": 10,
                "trackingUI": "ApplicationMaster",
                "trackingUrl": "https://10-120-85-2:26001/proxy/application_1461743120947_0001/",
                "diagnostics": "AM is launched. ",
                "clusterId": 1461743120947,
                "applicationType": "SPARK",
                "applicationTags": "",
                "startedTime": 1461804906260,
                "finishedTime": 0,
                "elapsedTime": 6888848,
                "amContainerLogs": "https://10-120-85-2:26010/node/containerlogs/container_e12_1461743120947_0001_01_000001/spark",
                "amHostHttpAddress": "10-120-85-2:26010",
                "allocatedMB": 1024,
                "allocatedVCores": 1,
                "runningContainers": 1,
                "memorySeconds": 7053309,
                "vcoreSeconds": 6887,
                "preemptedResourceMB": 0,
                "preemptedResourceVCores": 0,
                "numNonAMContainerPreempted": 0,
                "numAMContainerPreempted": 0,
                "resourceRequests": [
                    {
                        "capability": {
                            "memory": 1024,
                            "virtualCores": 1
                        },
                        "nodeLabelExpression": "",
                        "numContainers": 0,
                        "priority": {
                            "priority": 0
                        },
                        "relaxLocality": true,
                        "resourceName": "*"
                    }
                ],
                "logAggregationStatus": "NOT_START",
                "amNodeLabelExpression": ""
            },
            {
                "id": "application_1461722876897_0002",
                "user": "admin",
                "name": "QuasiMonteCarlo",
                "queue": "default",
                "state": "FINISHED",
                "finalStatus": "SUCCEEDED",
                "progress": 100,
                "trackingUI": "History",
                "trackingUrl": "https://10-120-85-2:26001/proxy/application_1461722876897_0002/",
                "diagnostics": "Attempt recovered after RM restart",
                "clusterId": 1461743120947,
                "applicationType": "MAPREDUCE",
                "applicationTags": "",
                "startedTime": 1461741052993,
                "finishedTime": 1461741079483,
                "elapsedTime": 26490,
                "amContainerLogs": "https://10-120-85-2:26010/node/containerlogs/container_e11_1461722876897_0002_01_000001/admin",
                "amHostHttpAddress": "10-120-85-2:26010",
                "allocatedMB": -1,
                "allocatedVCores": -1,
                "runningContainers": -1,
                "memorySeconds": 158664,
                "vcoreSeconds": 52,
                "preemptedResourceMB": 0,
                "preemptedResourceVCores": 0,
                "numNonAMContainerPreempted": 0,
                "numAMContainerPreempted": 0,
                "amNodeLabelExpression": ""
            }
        ]
    }
}

−           结果分析:

通过这个接口,可以查询当前集群中Yarn上的任务,并且可以得到如下表2-5。

表1-1 常用信息

参数

参数描述

user

运行这个任务的用户。

applicationType

例如MAPREDUCE或者SPARK等。

finalStatus

可以知道任务是成功还是失败。

elapsedTime

任务运行的时间。

2.         获取Yarn资源的总体信息。

−           命令:

curl -k -i --negotiate -u : "https://10-120-85-102:26001/ws/v1/cluster/metrics"

−           运行结果:

{
    "clusterMetrics": {
        "appsSubmitted": 2,
        "appsCompleted": 1,
        "appsPending": 0,
        "appsRunning": 1,
        "appsFailed": 0,
        "appsKilled": 0,
        "reservedMB": 0,
        "availableMB": 23552,
        "allocatedMB": 1024,
        "reservedVirtualCores": 0,
        "availableVirtualCores": 23,
        "allocatedVirtualCores": 1,
        "containersAllocated": 1,
        "containersReserved": 0,
        "containersPending": 0,
        "totalMB": 24576,
        "totalVirtualCores": 24,
        "totalNodes": 3,
        "lostNodes": 0,
        "unhealthyNodes": 0,
        "decommissionedNodes": 0,
        "rebootedNodes": 0,
        "activeNodes": 3,
        "rmMainQueueSize": 0,
        "schedulerQueueSize": 0,
        "stateStoreQueueSize": 0
    }
}

−           结果分析:

通过这个接口,可以查询当前集群中如表2-6。

表1-2 常用信息

参数

参数描述

appsSubmitted

已经提交的任务数。

appsCompleted

已经完成的任务数。

appsPending

正在挂起的任务数。

appsRunning

正在运行的任务数。

appsFailed

已经失败的任务数。

appsKilled

已经被kill的任务数。

totalMB

Yarn资源总的内存。

totalVirtualCores

Yarn资源总的VCore数。

1.2 REST APIs of Superior Scheduler

功能简介

REST/HTTP是Superior Scheduler在YARN资源管理器主机和YARN资源管理网络服务端口的一部分。通常以address:port as SS_REST_SERVER.的形式指示YARN。

下面使用HTTPS作为URL的一部分,并且只有HTTPS将得到支持。

Superior Scheduler接口

l   查询Application

−           查询scheduler engine中的所有application。

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/applications/list

n   输入

n   输出

JSON Response:
 
{
 "applicationlist": [
  {
   "id": "1020201_0123_12",
   "queue": "root.Q1.Q11",
   "user": "cchen",
   "resource_request": {
       "vcores" : 10,
       "memory" : 100
  },
  "resource_inuse": {
    "vcores" : 100,
    "memory" : 2000
  },
  "number_running_container": 100,
  "number_pending_request": 10
  },
  {
  "id": "1020201_0123_15",
  "queue": "root.Q2.Q21",
  "user": "Jason",
  "resource_request": {
    "vcores" : 4,
    “memory” : 100
  },
  "resource_inuse": {
    "vcores" : 20,
    "memory" : 200
  },
  "resource_reserved": {
    "vcores" : 10, 
    "memory" : 100
  },
  "number_running_container": 20,
  "number_pending_container": 4,
  "number_reserved_container":2
  }
 ]
}

表1-3 all application参数

参数属性

参数类型

参数描述

applicationlist

array

application ID数组。

queue

String

application队列名称。

user

String

提交application的用户名称。

resource_request

object

当前所需要的资源,包括vcores、内存等。

resource_inuse

object

当前所使用的资源,包括vcores、内存等。

resource_reserved

object

当前所预留的资源,包括vcores、内存等。

number_running_container

int

正在运行的container的总数。这反映了superior引擎的判定数量。

number_pending_request

int

挂起申请的总数。这是所有分配请求总和。

number_reserved_container

int

预留container的总数。这反映了superior引擎的判定数量。

id

String

application ID。

−           查询scheduler engine中的单个application。

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/applications/{application_id}

n   输入

n   输出

JSON Response:
 
{
 "applicationlist": [
  {
   "id": "1020201_0123_12",
   "queue": "root.Q1.Q11",
   "user": "cchen",
   "resource_request": {
       "vcores" : 3,
       "memory" : 3072
  },
  "resource_inuse": {
    "vcores" : 100,
    "memory" : 2048
  },
  "number_running_container": 2,
  "number_pending_request": 3,
  "number_reserved_container":1
  "master_container_id": 23402_3420842
  "master_container_resource": node1.domain.com
  "blacklist": [
    {
     "resource": "node5"
    },
    {
     "resource": "node8"
    }
  ],
  "demand": [
    {
     "priority": 1,
     "ismaster": true,
     "capability": {
     "vcores": 2,
      "memory": 2048
    },
    "count": 1,
    "relaxlocality": true,
    "locality": [
     {
      "target": "node1",
      "count": 1,
      "strict": false
     }
    ],
    "resourceselect": "label1",
    "pending_reason": "application limit reached",
    "reserved_resource": {
     "vcores":1,
      "memory":1024
    },
    "reservations":[
    "id": "23402_3420878",
    "resource": "node1.domain.com",
    "reservedAmount": {
     "vcores":1,
     "memory":1024
    } 
   ] 
  },
  {
   "priority": 1,
   "ismaster": false,
   "capability": {
   "vcores": 1,
   "memory": 1024
  },
  "count": 2,
  "relaxlocality": true,
  "locality": [
   {
    "target": "node1",
    "count": 1,
    "strict": false
   },
   {
    "target": "node2",
    "count": 1,
    "strict": false
   },
   {
    "target": "rackA",
    "count": 2,
    "strict": false
   },
  ],
  "resourceselect": "label1",
  "pending_reason": "no available resource"
  }
 ],
 "containers": [
   {
    "id": "23402_3420842",
    "resource": "node1.domain.com",
    "capability": {
     "vcores": 1,
     "memory": 1024
   }
  },
  {
    "id": "23402_3420853",
    "resource": "node2.domain.com",
    "capability": {
     "vcores": 1,
     "memory": 1024
    }
   }
  ]
 }
}

n   异常

未找到应用程序。

表1-4 single application参数

参数属性

参数类型

参数描述

application

object

application对象。

id

String

application ID。

queue

String

application队列名称。

user

String

application的用户名称。

resource_request

object

当前所申请的资源,包括vcores、内存等。

resource_inuse

object

当前所使用的资源,包括vcores、内存等。

resource_reserved

object

当前所预留的资源,包括vcores、内存等。

number_running_container

int

正在运行的container的总数。这反映了superior引擎的判定数量。

number_pending_request

int

挂起申请的总数。这反映了superior引擎的判定数量。

number_reserved_container

int

预留container的总数。这反映了superior引擎的判定数量。

master_container_id

String

总containerID。

master_container_resource

String

运行的主container的主机名。

demand

array

demand对象数组。

priority

int

请求的优先级。

ismaster

boolean

判断是否为application master需求。

capability

object

Capability对象。

vcores, memory, ..

int

数值可消耗资源属性,给该命令定义分配“单元”。

count

int

单元所需的数量。

relaxlocality

boolean

本地化需求优先,如果不能满足则不强制满足。

locality

object

本地化对象。

target

string

本地化目标的名称(即:节点1,框架1)。

count

int

资源“单元”数量与所需的本地需求。

strict

boolean

是否强制本地性。

resourceselect

String

application资源选择。

pending_reason

String

该application pending的理由。

resource_reserved

object

当前需求的预留资源,包括vcores、内存等。

reservations

array

预留container对象的数组。

reservations:id

String

预留container的ID。

reservations:resource

String

container的分配地址。

reservations:reserveAmount

object

预留项的总数。

containers

array

分配container对象的数组。

containers:id

String

containerID。

containers:resource

String

container分配的位置。

containers:capability

object

Capability对象。

containers:vcores,memory…

int

分配给该container的可消耗数值型资源属性。

l   查询Queue

−           查询scheduler engine中的所有queue,包括叶子节点和所有中间队列。

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/queues/list

n   输入

n   输出

JSON Response:
 
{
  "queuelist": [
    {
      "name": "root.default",
      "eopen_state": "OPEN",
      "eactive_state": "ACTIVE",
      "open_state": "OPEN",
      "active_state": "ACTIVE",
      "number_pending_application": 2,
      "number_running_application": 10,
      "number_pending_request": 2,
      "number_running_container": 10,
      "number_reserved_container":1,
      "resource_inuse" {
          "vcores": 10,
          "memory": 10240
      },
      "resource_request" {
          "vcores": 2,
          "memory": 2048
      },
      "resource_reserved" {
          "vcores": 1
          "memory": 1024
      }
      
    },
    {
      "name": "root.dev",
      "eopen_state": "OPEN",
      "eactive_state": "INACTIVE",
      "open_state": "OPEN",
      "active_state": "INACTIVE",
      "number_pending_application": 2,
      "number_running_application": 10,
      "number_pending_request": 2,
      "number_running_container": 10,
      "number_reserved_container":0,
      "resource_inuse" {
          "vcores": 10,
          "memory": 10240
      },
      "resource_request" {
          "vcores": 2,
          "memory": 2048
      },
      "resource_reserved" {
          "vcores": 0
          "memory": 0
      }
    },
    {
      "name": "root.qa",
      "eopen_state" : "CLOSED",
      "eactive_state" : "ACTIVE",
      "open_state": "CLOSED",
      "active_state": "ACTIVE",
      "number_pending_application": 2,
      "number_running_application": 10,
      "number_pending_request": 2,
      "number_running_container": 10,
      "number_reserved_container":0,
      "resource_inuse" {
          "vcores": 10,
          "memory": 10240
      },
      "resource_request" {
          "vcores": 2,
          "memory": 2048
      },
      "resource_reserved" {
          "vcores": 1
          "memory": 1024
      }
 
 
    },
    
  ]
}

表1-5 all queues参数

参数属性

参数类型

参数描述

queuelist

array

队列名称列表。

name

String

队列名称。

open_state

String

队列的内在状态(自身状态)。表示队列的有效状态为OPEN或CLOSED。CLOSED状态的队列不接受任何新的allocation请求。

eopen_state

String

队列的外在状态(父队列状态)。有效状态为队列自身状态及其父队列状态的组合。CLOSED状态的队列不接受任何新的allocation请求。

active_state

String

队列的内在状态(自身状态)。表示队列的有效状态为ACTIVE或INACTIVE。INACTIVE状态的队列不能调度任何应用程序。

eactive_state

String

队列的外在状态(父队列状态)。有效状态为队列自身状态及其父队列状态的组合。INACTIVE状态的队列不能调度任何应用程序。

number_pending_application

int

挂起应用的总和。

number_running_application

int

正在运行应用的总和。

number_pending_request

int

挂起请求的总和。

number_running_container

int

正在运行container的总和。

numbert_reserved_container

int

预留container的总和。

resource_request

object

以vcores和内存等形式在队列中挂起的资源请求。

resource_inuse

object

以vcores和内存等形式在队列中使用的资源。

resource_reserved

object

以vcores和内存等形式在队列中预留的资源。

active_state

String

描述表示队列ACTIVE或INACTIVE状态。一个INACTIVE队列不能调度任何分配请求。

−           查询scheduler engine中的单个queue,包括叶子节点和所有中间队列。

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/queues/{queuename}

n   输入

n   输出

JSON Response:
 
{
  "queue": {
"name": "root.default",
"eopen_state": "CLOSED",
"eactive_state": "INACTIVE",
    "open_state": "CLOSED",
"active_state": "INACTIVE",
"leaf_queue" : yes,
    "number_pending_application": 100,
"number_running_application": 10,
    "number_pending_request": 10,
"number_running_container": 10,
"number_reserved_container:1,
"resource_inuse" {
          "vcores": 10,
          "memory": 10240
      },
      "resource_request" {
          "vcores": 2,
          "memory": 2048
      },
      "resource_reserved" {
           "vcores": 1, 
           "memory": 1024
      }
 
    "configuration": {
  "description": "Production spark queue",
      "max_pending_application": 10000,
      "max_running_application": 1000,
      "allocation_order_policy": "FIFO",
      "default_resource_select": "label1",
      "max_master_share": 10%,
      "max_running_application_per_user": -1,
      "max_allocation_unit": {
           "vcores": 32,
           "memory": 128000
      },
      "user_acl": [
        {
          "user": "user1"
        },
        {
          "group": "group1"
        }
      ],
      "admin_acl": [
        {
          "user": "user2"
        },
        {
          "group": "group2"
        }
      ]
    }
  }
}

n   异常

未找到队列。

表1-6 single queue参数

参数属性

参数类型

参数描述

queue

object

队列对象。

name

String

队列名称。

description

String

队列描述。

open_state

String

队列的内在状态(自身状态)。表示队列的有效状态为OPEN或CLOSED。CLOSED状态的队列不接受任何新的allocation请求。

eopen_state

String

队列的外在状态(父队列状态)。有效状态为队列自身状态及其父队列状态的组合。CLOSED状态的队列不接受任何新的allocation请求。

active_state

String

队列的内在状态(自身状态)。表示队列的有效状态为ACTIVE或INACTIVE。INACTIVE状态的队列不能调度任何应用程序。

eactive_state

String

队列的外在状态(父队列状态)。有效状态为队列自身状态及其父队列状态的组合。INACTIVE状态的队列不能调度任何应用程序。

leaf_queue

boolean

表示队列是否在树节点或中间队列。表示叶子节点队列。

number_pending_application

int

当前的挂起请求数量。如果是中间队列/父队列,这是所有子队列的集合。

number_running_application

int

当前正在运行应用的数量。如果是中间队列/父队列,这是所有子队列的集合。

number_pending_request

int

挂起命令的数量;每个未完成命令的总计数。如果是中间队列/父队列,这是所有子队列的集合。

number_running_container

int

正在运行container的数量。如果是中间队列/父队列,这是所有子队列的集合。

number_reserved_container

int

预留container的数量。如果是中间队列/父队列,这是所有子队列的集合。

resource_request

object

以vcores和内存等形式在队列中挂起的资源请求。

resource_inuse

object

以vcores和内存等形式在队列中使用的资源。

resource_reserved

object

以vcores和内存等形式预留在队列中的资源。

configuration

object

队列配置目标。

max_pending_application

int

最大挂起应用数。如果是中间队列/父队列,这是所有子队列的集合。

max_running_application

int

最大运行应用数。如果是中间队列/父队列,这是所有子队列的集合。

allocation_order_policy

String

分配策略,可以使用FIFO原则,PRIORITY原则或者FAIR原则。

max_running_application_per_user

int

每个使用者运行应用的最大数量。

max_master_share

string

该队列共享的百分比。

max_allocation_unit

object

单个container允许的最大资源,该资源以vcores和内存等形式存在。

default_resource_select

String

缺省资源选择表达式。它被使用在当应用没有被指定一个提交区间值时。

user_acl

array

队列中被给予user权限的使用者。

admin_acl

array

该队列中被给予admin权限的使用者。

group

String

用户组名称。

user

String

用户名称。

l   查询Resource Pool

−           查询scheduler engine中所有resource pool。

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/resourcepools/list

n   输入

n   输出

JSON Response:
{
  "resourcepool_list": [
    {
      "name": "pool1",
      "description": "resource pool for crc",
      "number_member": 5,
      "members": [
        {
          "resource": "node1"
        },
        {
          "resource": "node2"
        },
        {
          "resource": "node3"
        },
        {
          "resource": "node4"
        },
        {
          "resource": "node5"
        }
      ],
      "available_resource": {
        "vcores": 60,
        "memory": 60000
      },
      "total_resource": {
        "vcores": 100,
        "memory": 128000
      },
      "configuration": {
        "resources": [
          {
            "resource": "node1"
          },
          {
            "resource": "node[2-5]"
          }
        ],
        "resource_select": "label1"
      }
    },
    {
      "name": "pool2",
      "description": "resource pool for erc",
      "number_member": 4
      "members": [
        {
          "resource": "node6"
        },
        {
          "resource": "node7"
        },
        {
          "resource": "node8"
        },
        {
          "resource": "node9"
        }
      ],
      "available_resource": {
        "vcores": 56,
        "memory": 48000
      },
      "total_resource": {
         "vcores": 100,
         "memory": 128000
      },
      "configuration": {
        "resources": [
          {
            "resource": "node6"
          },
          {
            "resource": "node[7-9]"
          }
        ],
        "resource_select": "label1"
      }
    },
    {
      "name": "default",
      "description": "system-generated",
      "number_member": 1,
      "members": [
        {
          "resource": "node0"
        }
      ],
      "available_resource": {
        "vcores": 8,
        "memory": 8192
      },
      "total_resource": {
        "vcores": 16,
        "memory": 12800
      }
    }
  ]
}

表1-7 all resource pools参数

参数属性

参数类型

参数描述

resourcepool_list

array

resource pool对象数组。

name

String

resource pool名称。

number_member

int

resource pool成员数量。

description

String

resource pool描述。

members

array

当前resource pool成员的资源名称数组。

resource

String

资源名称。

available_resource

object

该resource pool中当前可使用的资源。

vcores, memory, ..

int

可消耗数值型资源属性,当前resource pool中可用资源的属性,该属性的值以数字表示。

total_resource

object

该resource pool所有资源。

vcores, memory, ..

int

可消耗数值型资源属性,当前resource pool中总资源的属性,该属性的值以数字表示。

configuration

object

配置目标。

resources

array

所配置的资源名称pattern数组。

resource

String

资源名称模式。

resource_select

String

资源选择表达式。

−           查询scheduler engine中单个resource pool

n   URL

GET https://<SS_REST_SERVER>/ws/v1/sscheduler/resourcepools/{resourcepoolname}

n   输入

n   输出

JSON Response:
{
  "resourcepool": {
    "name": "pool1",
    "description": "resource pool for crc",
    "number_member": 5
    "members": [
      {
        "resource": "node1"
      },
      {
        "resource": "node2"
      },
      {
        "resource": "node3"
      },
      {
        "resource": "node4"
      },
      {
        "resource": "node5"
      }
    ],
    "available_resource": {
      "vcores": 60,
      "memory": 60000
},
"total_resource": {
  "vcores": 100,
  "memory": 128000
},
    "configuration": {
      "resources": [
        {
          "resource": "node6"
        },
        {
          "resource": "node[7-9]"
        }
      ],
      "resource_select": "label1"
    }
  }
}

n   异常

未找到resource pool。

表1-8 single resource pool参数

参数属性

参数类型

参数描述

resourcepool

object

resource pool对象。

name

String

resource pool名称。

description

String

resource pool描述。

number_member

int

resource pool成员数量。

members

array

该resource pool现任成员的资源名称数组。

resource

String

资源名称。

available_resource

object

该resource pool当前可用资源。

vcores, memory, ..

int

可消耗数值型资源属性,当前resource pool中可用资源的属性,该属性的值以数字表示。

total_resource

object

该resource pool中所有资源。

vcores, memory, ..

int

可消耗数值型资源属性,当前resource pool中总资源的属性,该属性的值以数字表示。

configuration

object

配置目标。

resources

array

所配置的资源名称pattern数组。

resource

String

资源名称模式。

resource_select

String

资源选择表达式。

本帖最后由 白展堂 于 2018-06-13 17:26 编辑

免责声明:文章转载自《Yarn对外接口》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决:Invalid character found in method name. HTTP method names must be tokens如何防止Unity3D代码被反编译?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

两三栏布局

一、背景 在日常布局中,无论是两栏布局还是三栏布局,使用的频率都非常高 PS: 文末有彩蛋 两栏布局 两栏布局实现效果就是将页面分割成左右宽度不等的两列,宽度较小的列设置为固定宽度,剩余宽度由另一列撑满, 比如 Ant Design 文档,蓝色区域为主要内容布局容器,侧边栏为次要内容布局容器 ❝ 这里称宽度较小的列父元素为次要布局容器,宽度较大的列父元素为...

使用WEBAPI连接到MYSQL配置流程

1.需要引用的文档 MySql.Data.dllMySql.Data.Entity.EF6.dll 1.1注意事项: 1.11 MySql.Data.Entity依赖于 MySql.Data,需要保证这两个的版本相同。 1.12 EF版本必须高于6.0。 2.添加System.data配置 <system.data> <DbProvide...

[51单片机] 定时器2-计数示例

>_<:定时/计数器0使用16位定时模式,计数初值为0,计数到65536溢出,中断程序中LED取反,LED以65536*2个时钟周期为周期闪烁。 >_<:连接方式:将任意一个LED的引脚和P1.2相连 >_<:实验现象:LED以65536*2个时钟周期为周期闪烁。 1 /*-----------------------...

Chrome开发者之测试应用

一、Chrome开发者工具简介 1.1、开发者工具(DevTools)调用 二、Chrome DevTools详细介绍 1.1、模块介绍 2.1、元素(Elements)详解 2.1.1、元素编辑 2.1.2、辅助元素定位 2.1.3、ChroPath插件 3.1、控制台(Console)详解 4.1、源代码(Sources)详解 5.1、网络(Netwo...

node连接mysql数据库出现Client does not support authentication protocol requested by server;的错误

在安装完MySQL的时候,我们现在一般都使用Navicat来连接数据库,可惜出现下面的错误:1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client。 出现上述问题的原因是:mysql8 之前的版本中加密...

下拉菜单(css)

<!DOCTYPE html><html> <head>  <meta charset="utf-8" />  <title></title>  <style type="text/css">   *{margin:0;padding:0;}   #nav{backgrou...