在 YARN 应用程序中获取 Hadoop 集群节点列表
Getting Hadoop cluster nodes list in YARN application
我正在编写 YARN 应用程序,它必须在每个集群节点上 运行 一些 java 代码。我从 Writing YARN applications, and then, after facing too many spaces in the example, used this github project 开始作为我申请的基础。
正如我在深入研究 exapmle 的 ApplicationMaster 用法后发现的那样,我可以使用特定的 org.apache.hadoop.yarn.client.api.ContainerRequest 的构造函数,在特定主机上获取应用程序容器,但我需要集群节点列表来请求每台机器上的容器。
通过这个问题搜索后,我发现解析 yarn-site.xml 不是获得集群机器 URL 的正确方法,但可以从 [=21] 获得此信息=]org.apache.hadoop.yarn.client.api.YarnClient.getClusterNodeLabels(),但是该方法返回的Set包含0条记录。
我确定,那个集群,我的 jar 正在 运行ning 上,由几个节点组成,所以我不明白,我做错了什么?
P.S。我使用远程调试,当运行ning,我的jar.
正确的做法是使用YarnClient#getNodeReports。要获得完整列表,只需提供所有可能的状态作为参数:
yarnClient.getNodeReports(NodeState.values())
我正在编写 YARN 应用程序,它必须在每个集群节点上 运行 一些 java 代码。我从 Writing YARN applications, and then, after facing too many spaces in the example, used this github project 开始作为我申请的基础。
正如我在深入研究 exapmle 的 ApplicationMaster 用法后发现的那样,我可以使用特定的 org.apache.hadoop.yarn.client.api.ContainerRequest 的构造函数,在特定主机上获取应用程序容器,但我需要集群节点列表来请求每台机器上的容器。
通过这个问题搜索后,我发现解析 yarn-site.xml 不是获得集群机器 URL 的正确方法,但可以从 [=21] 获得此信息=]org.apache.hadoop.yarn.client.api.YarnClient.getClusterNodeLabels(),但是该方法返回的Set包含0条记录。
我确定,那个集群,我的 jar 正在 运行ning 上,由几个节点组成,所以我不明白,我做错了什么?
P.S。我使用远程调试,当运行ning,我的jar.
正确的做法是使用YarnClient#getNodeReports。要获得完整列表,只需提供所有可能的状态作为参数:
yarnClient.getNodeReports(NodeState.values())