java - 如何通过yarnClient在代码中获取日志聚合

标签 java hadoop yarn

我正在遵循有关通过java API创建YarnApp的示例。

https://github.com/hortonworks/simple-yarn-app

工作正常,但是,日志消失后,该日志仅存在执行。

我怎样才能通过代码捕捉到这一点?还是启用一个选项?

最佳答案

应用程序完成后,您可以使用LogCliHelpers通过应用程序ID查找日志:

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext;
import org.apache.hadoop.yarn.client.api.YarnClientApplication;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.logaggregation.LogCLIHelpers;

import java.io.IOException;
import java.io.PrintStream;

public static void getLogs(YarnConfiguration conf, YarnClientApplication app) throws IOException, YarnException {
    ApplicationSubmissionContext appContext =
            app.getApplicationSubmissionContext();
    ApplicationId appId = appContext.getApplicationId();
    LogCLIHelpers logCLIHelpers = new LogCLIHelpers();
    logCLIHelpers.setConf(conf);
    FileSystem fs = FileSystem.get(conf);
    Path logFile = new Path("/path/to/log/file.log");
    fs.create(logFile, false);
    try (PrintStream printStream = new PrintStream(logFile.toString())) {
      logCLIHelpers.dumpAllContainersLogs(appId, UserGroupInformation.getCurrentUser().getShortUserName(), printStream);
    }
}

关于java - 如何通过yarnClient在代码中获取日志聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61112282/

相关文章:

java - 是否可以通过传递插件名称/ID 来获取功能标签名称

java - 用负数代替正数

scala - SBT 范围可以用于特定代码块的自定义 libraryDependencies 吗?

scala - 使用scala-submit从scala二进制文件开始跟踪和记录/调试 yarn 的贴合

hadoop - YARN正常工作时资源管理器日志错误

java - 在YARN作业中未从ProcessBuilder接收输出

elasticsearch - flink-kafka-elasticsearch部署在 yarn 上

java - 无法使用 Deploy to container Plugin 从 jenkins 对 tomcat 部署 war

java - 保存或更新无响应。为什么?

hadoop - 为什么Hadoop名称节点连接到奇怪的[aca8ca1d.ipt.aol.com]主机名?