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 編輯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM