'yarn application -list'没有显示任何结果

Cly*_*ruz 3 hadoop hadoop-yarn apache-spark

我在YARN集群上运行了一些Spark应用程序.该应用程序显示在YARN UI http:// host:8088/cluster的"所有应用程序"页面中,但该yarn application -list命令不会给出任何结果.可能是什么原因造成的?

Man*_*lur 15

当您使用"-list"选项而没有"-appTypes"或"-appStates"选项时,它会对"application-types"和"states"应用默认过滤(请查看下面突出显示的部分).如果您的应用程序都没有与默认过滤匹配,那么您将无法获得任何结果.

应用程序总数(应用程序类型:[]和状态:[提交,接受,运行]):0

如果您看到"-list"的帮助,则说明以下内容:

"列出应用程序.支持可选地使用-appTypes根据应用程序类型过滤应用程序,并使用-appStates根据应用程序状态过滤应用程序 ".

这似乎有点误导.

如果未指定"-appStates",则默认情况下将状态设置为"SUBMITTED","ACCEPTED"和"RUNNING",以进行过滤.请从"org.apache.hadoop.yarn.client.cli.ApplicationCLI.java"的"listApplications()"方法中检查以下代码.

private void listApplications()
{
    ............

    if (allAppStates) {
      for (YarnApplicationState appState : YarnApplicationState.values()) {
        appStates.add(appState);
      }
    } else {
      if (appStates.isEmpty()) {
        appStates.add(YarnApplicationState.RUNNING);
        appStates.add(YarnApplicationState.ACCEPTED);
        appStates.add(YarnApplicationState.SUBMITTED);
      }
    }

    ............
}
Run Code Online (Sandbox Code Playgroud)

根据上面的代码,应用以下逻辑:

  1. 调用"yarn application -list":显示状态为"SUBMITTED","ACCEPTED"和"RUNNING"的所有应用程序.例如,对我来说输出如下(默认状态下有零应用程序)

CMD>纱线应用 - 清单

应用程序总数(应用程序类型:[]和状态:[提交,接受,运行]):0

  1. 调用"yarn application -list -appStates ALL":显示所有应用程序(处于任何状态)例如对于我来说输出如下(共有268个应用程序,还检查应用于"状态"的过滤条件):

CMD> yarn application -list -appstates ALL

所有应用程序总数(应用程序类型:[]和状态:[NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED]):268

  1. 调用"yarn application -list -appStates FINISHED":显示所有应用程序(处于FINISHED状态)例如对我来说输出如下(有136个处于FINISHED状态的应用程序):

CMD>纱线应用-list -appStates FINISHED

申请总数(申请类型:[] 和州:[已完成]):136


Cly*_*ruz 2

事实证明,我在 YARN 中启用了日志聚合,但已将yarn.nodemanager.remote-app-log-dir设置为自定义 hdfs 目录(/tmp/yarnlogs),因此日志实际上在 /tmp/yarnlogs 中聚合HDFS,但yarn命令仍在HDFS上的默认位置(/tmp/logs)搜索日志。因此,将属性更改为默认值对我来说修复了它。

注意: 如果日志聚合目录配置错误,它也会在尝试从 Web UI 访问作业历史记录时导致错误,如下所示:
Log aggregation has not completed or is not enabled