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

通过java列出hadoop集群中的所有应用程序,java,hadoop,yarn,Java,Hadoop,Yarn,在我的hadoop集群上运行命令纱线应用程序-list时,它返回正在运行的应用程序列表 我想用Java获取这个列表 目前我正在使用yarnClient API <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.3<

在我的hadoop集群上运行命令
纱线应用程序-list
时,它返回正在运行的应用程序列表

我想用Java获取这个列表

目前我正在使用yarnClient 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>

org.apache.hadoop
hadoop通用
2.7.3
org.apache.hadoop
hadoop纱线客户端
2.7.0
我的代码如下所示:

    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();
YarnConfiguration conf=新的YarnConfiguration();
YarnClient YarnClient=YarnClient.createYarnClient();
初始化(conf);
yarnClient.start();
List=yanclient.getApplications();
System.out.print(list.size());
yanclient.stop();

但是这在第
List=yarnClient.getApplications()
行挂起,并且没有向前移动。

当我的YarnConfiguration配置不正确时,我的代码挂起了。默认情况下,它使用
0.0.0.0:8032
作为纱线资源管理器地址。我必须用正确的地址覆盖它:

YarnConfiguration conf = new YarnConfiguration();
conf.set("yarn.resourcemanager.address", "<hostname>:<port>");
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(conf);
yarnClient.start();
YarnConfiguration conf=新的YarnConfiguration();
conf.set(“warn.resourcemanager.address”,“:”);
YarnClient YarnClient=YarnClient.createYarnClient();
初始化(conf);
yarnClient.start();

我用Hadoop 2.6.0对此进行了测试,但看起来2.7.0的默认值也一样(请参阅)

应用程序仍然挂起在“getApplications()”。因此,我没有将其作为java应用程序(java-jar)运行,而是将其作为spark应用程序(spark submit)提交。成功了。