YARN API:通过API获取应用程序的聚合日志

时间:2016-02-09 12:33:02

标签: api hadoop logging yarn

我使用YARN java API提交Hadoop应用程序而不是终端。 我想方法在应用程序完成后通过Yarn API获取纱线聚合日志。

当然可以通过简单的cmd完成:“yarn logs -applicationId {my_application_ID}”但我希望通过API实现。

有人知道如何使用API​​而不是命令行来获取这些日志吗?

感谢。

3 个答案:

答案 0 :(得分:2)

尽可能在代码源https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java上,这并非易事,显然,YARN API缺少日志API

通过API(https://hadoop.apache.org/docs/r2.7.4/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Application_API

curl http://yarn.infra/ws/v1/cluster/apps/application_1502112083252_1001

...
<amContainerLogs>
http://node-1.infra:8042/node/containerlogs/container_e41_1502112083252_1001_01_000001/hdfs
</amContainerLogs>
...

应用程序尝试(如果对您有用):

curl http://yarn.infra/ws/v1/cluster/apps/application_1502112083252_1001/appattempts

..
<logsLink>
http://node-3.infra:8042/node/containerlogs/container_e41_1502112083252_1001_01_000001/hdfs
</logsLink>
..

让我们重新卷曲这些链接,这将让您下载本地日志。但这不是完整的日志,(我没有找到如何获得它,如果你找到它,请随时完成我的答案。)

答案 1 :(得分:1)

据我所知,YARN将日志写入文件系统,可能是HDFS(在我的情况下:hdfs:hadoopsrv:9000/var/log/hadoop/app-logs/),具有这些文件访问权限的用户可以直接获取它们。根据我的理解,yarn logs -applicationId只是从那里获得它们。

答案 2 :(得分:0)

一种收集日志的方法是简单地在Java代码中调用 LogsCLI.main()。 该调用将应用程序日志输出到标准输出。

import org.apache.hadoop.yarn.client.cli.LogsCLI;

      private void collectLogs()
      {
          String[] args = {"-applicationId", appId.toString()};
          try {
            LogsCLI.main(args);
        } catch (Exception e) {
            LOG.warn("Error when collecting Yarn Application logs");
            LOG.debug(e);
        }
      }