通过java列出Hadoop集群中的所有yarn应用程序



在我的Hadoop集群上运行命令yarn application -list时,它会返回正在运行的应用程序列表。

我想使用 Java 获取此列表。

目前我正在使用纱线客户端API

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-yarn-client</artifactId>
<version>2.7.0</version>
</dependency>

我的代码看起来像:

YarnConfiguration conf = new YarnConfiguration();
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(conf);
yarnClient.start();
List<ApplicationReport> list =  yarnClient.getApplications();
System.out.print(list.size());
yarnClient.stop();

但这被挂在第List<ApplicationReport> list = yarnClient.getApplications()行并且没有前进。

当我的 YarnConfiguration 未正确配置时,我的代码挂起#getApplications()。默认情况下,它使用0.0.0.0:8032作为 Yarn 资源管理器地址。我不得不用正确的地址覆盖它:

YarnConfiguration conf = new YarnConfiguration();
conf.set("yarn.resourcemanager.address", "<hostname>:<port>");
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(conf);
yarnClient.start();

我用Hadoop 2.6.0对此进行了测试,但看起来2.7.0的默认值也是一样的(见来源(。