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