纱线API:通过API获取纱线聚合日志以供应用
我使用java API提交Hadoop应用程序,而不是在终端中提交。 我在寻找一种方法,在应用程序完成后通过纱线API获取纱线聚合日志 当然,这可以通过简单的cmd实现:“纱线日志-applicationId{my_application_ID}”,但我想通过API实现 有人知道如何使用API而不是命令行访问这些日志吗纱线API:通过API获取纱线聚合日志以供应用,api,hadoop,logging,yarn,Api,Hadoop,Logging,Yarn,我使用java API提交Hadoop应用程序,而不是在终端中提交。 我在寻找一种方法,在应用程序完成后通过纱线API获取纱线聚合日志 当然,这可以通过简单的cmd实现:“纱线日志-applicationId{my_application_ID}”,但我想通过API实现 有人知道如何使用API而不是命令行访问这些日志吗 谢谢 据我所知,Thread将日志写入一个文件系统,可能是HDFS(在我的例子中:HDFS:hadoopsrv:9000/var/log/hadoop/app logs/),拥有
谢谢 据我所知,Thread将日志写入一个文件系统,可能是HDFS(在我的例子中:
HDFS:hadoopsrv:9000/var/log/hadoop/app logs/
),拥有这些文件访问权限的用户可以直接获取它们。据我所知,纱线日志-applicationId
只是从那里获取它们。正如您在代码源代码中所能看到的,这不是一件小事,很明显,纱线API中缺少一个日志API
通过API()
curlhttp://yarn.infra/ws/v1/cluster/apps/application_1502112083252_1001
...
http://node-1.infra:8042/node/containerlogs/container_e41_1502112083252_1001_01_000001/hdfs
...
以及应用程序尝试(如果对您有用):
curlhttp://yarn.infra/ws/v1/cluster/apps/application_1502112083252_1001/appattempts
..
http://node-3.infra:8042/node/containerlogs/container_e41_1502112083252_1001_01_000001/hdfs
..
让我们重新卷曲这些链接,这将允许您下载本地日志。但是这不是完整的日志(我没有找到确切的获取方法,如果找到了,请随时填写我的答案)。收集日志的一种方法是在Java代码中调用LogsCLI.main()。 此调用将应用程序日志输出到stdout
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);
}
}
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>
..
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);
}
}