在客户端提交appContext后,是否可以从YARN客户端获取各种容器ID和主机名?我想这意味着在分配了容器之后,信息可以传达回客户吗?
如果不可能,RM Web界面是否提供此信息?
YARN CLI有一个从应用程序尝试ID获取容器列表的选项。您可以按照以下步骤获取容器列表。
-
步骤1:从应用程序ID获取应用程序尝试列表
从YARN应用程序ID,您可以使用以下命令获得应用程序尝试列表:
yarn applicationattempt -list <Application ID>
该命令的描述如下:
-list <Application ID> List application attempts for application.
例如
yarn applicationattempt -list application_1452267331813_0009
-
步骤2:使用应用程序尝试ID获取容器
在您获得应用程序尝试列表后,对于每个应用程序尝试,您可以使用以下命令获得容器列表:
yarn container -list <Application Attempt ID>
该命令的描述如下:
-list <Application Attempt ID> List containers for application attempt.
例如:
yarn container -list appattempt_1452267331813_0009_000001
相当难看,但可以通过对ResourceManager、NodeManager和各种ContainerLog URL的一系列URL请求来完成:
# Resource Manager Info for Given Application
curl http://RM:PORT/ws/v1/cluster/apps/<app_id>
amHostHttpAddress = data['app']['amHostHttpAddress']
# List containers with id, nodeId, containerLogsLink, etc
curl http://<amHostHttpAddress>/ws/v1/node/containers
# stdout/stderr for a specific container
curl http://<containerLogsLink>/stdout/?start=0"
curl http://<containerLogsLink>/stderr/?start=0"
这种方法有效,但在YARN JAVA API 中可能应该有更干净的方法