如何使用 java 以编程方式检索纱线的日志



我实际上在Linux shell上检索了我的Spark应用程序的日志:

yarn logs -applicationId applicationid

有什么方法可以使用Java进行编程检索?

我想使用Java以编程方式进行操作,因此我终于看了命令背后的代码:

yarn logs -applicationId applicationid

在:

src/main/java/org/apache/hadoop/yarn/client/cli/LogsCLI.java

我现在在字符串(内容(中检索日志。代码是:

String applicationId = "application_1492795815045_3940";
ApplicationId appId = appId = ConverterUtils.toApplicationId(applicationId);
LogCLIHelpers logCliHelper = new LogCLIHelpers();
Configuration config = new Configuration();
logCliHelper.setConf(config);
String appOwner = UserGroupInformation.getCurrentUser().getShortUserName();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
// Function to retrieve logs
logCliHelper.dumpAllContainersLogs(appId, appOwner, ps);
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
System.out.println(content)

是的。您可以通过Yarnclient获取有关应用程序的大多数关键信息,并且可以对Spark History Server API进行休息。您在这里寻找的终点是

/applications/[base-app-id]/logs

您在外壳环境中的方法正确!

我认为,因为纱线已经是在您的系统中的可执行程序

使当前的Java过程(即当前的JVM(访问并使用它。您可以启动一个新的孩子流程来帮助您完成工作。

也许遵循的代码会帮助您。

public class YarnLog {
    //
    public static void getYarnLog(String appid) throws IOException {
        BufferedReader br = null;
        try {
            Process p = Runtime.getRuntime().exec(String.format("yarn logs -applicationId %s", appid));
            br = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(br != null) {
                br.close();
            }
        }
    }
}

成功终止此子过程后,您可以在当前工作目录中使用特定日志

相关内容

  • 没有找到相关文章

最新更新