【问题标题】:Getting Hadoop cluster nodes list in YARN application在 YARN 应用程序中获取 Hadoop 集群节点列表
【发布时间】: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


【解决方案1】:

正确的做法是使用YarnClient#getNodeReports。要获得完整列表,只需提供所有可能的状态作为参数:

yarnClient.getNodeReports(NodeState.values())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多