zoukankan      html  css  js  c++  java
  • Yarn对外接口

    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 编辑

    如有错误,恳求读者指出,发送到wu13213786609@outlook.com。
  • 相关阅读:
    Smobiler 仿知乎APP个人主页
    smobiler仿自如app筛选页面
    Smobiler 仿美柚APP个人主页
    谈谈网络协议 – 物理层
    谈谈网络协议 – 路由
    谈谈网络协议 – 基础知识
    Flutter(三):Flutter App 可行性分析
    Flutter(二):编写第一个Flutter App
    Flutter(一):MAC的Flutter安装指南
    Jetpack新成员,Paging3从吐槽到真香
  • 原文地址:https://www.cnblogs.com/WLCYSYS/p/14708008.html
Copyright © 2011-2022 走看看