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