我正在编写YARN应用程序,它必须在每个群集节点上运行一些java代码。我是在Writing YARN applications开始的,然后,在示例中面对太多空格后,使用this github project作为我的应用程序的基础。
正如我在深入研究exapmle的 ApplicationMaster 用法后发现的那样,我可以使用特定的 org.apache.hadoop.yarn.client.api.ContainerRequest 的构造函数,用于在特定主机上获取应用程序容器,但我需要集群节点列表来在每台机器上请求容器。
通过这个问题搜索后,我发现解析yarn-site.xml并不是获取群集机器URL的正确方法,但是这些信息可以从 org获得。 apache.hadoop.yarn.client.api.YarnClient.getClusterNodeLabels(),但此方法返回的Set包含0条记录。
我真的,那个集群,我的罐子正在运行,由几个节点组成,所以我不明白,我做错了什么?
P.S。我在运行时使用远程调试,我的jar。
答案 0 :(得分:0)
正确的做法是使用YarnClient#getNodeReports。要获取完整列表,只需提供所有可能的状态作为参数:
yarnClient.getNodeReports(NodeState.values())