【发布时间】:2018-11-30 02:46:36
【问题描述】:
我正在编写 YARN 应用程序,它必须在每个集群节点上运行一些 java 代码。我从Writing YARN applications 开始,然后在示例中遇到太多空格后,使用this github project 作为我的应用程序的基础。
我在深入研究示例的 ApplicationMaster 用法后发现,我可以使用特定的 org.apache.hadoop.yarn.client.api.ContainerRequest 的构造函数,在特定主机上获取应用程序容器,但我需要集群节点列表来请求每台机器上的容器。
通过this question搜索后,我发现解析yarn-site.xml并不是获取集群机器URL的正确方法,但是这个信息可以从org.apache.hadoop.yarn.client获得。 api.YarnClient.getClusterNodeLabels(),但是该方法返回的Set包含0条记录。
我很确定,那个集群,我的 jar 正在运行,由几个节点组成,所以我不明白,我做错了什么?
附:我使用远程调试,运行时,我的 jar。
【问题讨论】:
-
您是否尝试过从
YarnClient调用getNodeReports()? -
@Serhiy org.apache.hadoop.yarn.server.resourcemanager.NodesListManager$UnknownNodeId 无法转换为 org.apache.hadoop.yarn.api.records.impl.pb.NodeIdPBImpl。由于注释字符数量有限,我无法为您提供完整的堆栈跟踪。
-
我得到了这个异常,因为
YarnClient不是刚刚初始化的。
标签: hadoop hadoop-yarn