为什么incubator-dolphinscheduler中Python任务输出日志总是延迟显示?

摘要:一、incubator-dolphinscheduler 中如何获取shell类型的节点或者python类型的节点任务的日志 -> 关注清哥聊技术公众号,了解更多技术文章 1、在org.apa
一、incubator-dolphinscheduler 中如何获取shell类型的节点或者python类型的节点任务的日志->关注清哥聊技术公众号,了解更多技术文章 1、在org.apache.dolphinscheduler.server.worker.task.AbstractCommandExecutor 类中通过java.lang.ProcessBuilder 来将python 脚本生成命令进行执行,AbstractCommandExecutor中的部分源码如下: ...... } else { //init process builder ProcessBuilder processBuilder = new ProcessBuilder(); // setting up a working directory processBuilder.directory(new File(taskExecutionContext.getExecutePath())); // merge error information to standard output stream processBuilder.redirectErrorStream(true); // setting up user to run commands command.add("sudo"); command.add("-u"); command.add(taskExecutionContext.getTenantCode()); command.add(commandInterpreter()); command.addAll(commandOptions()); command.add(commandFile); // setting commands processBuilder.command(command); process = processBuilder.start(); } ...... 2、通过process.getInputStream() 来获取命令终端输出的日志,部分源码如下: private void parseProcessOutput(Process process) { String threadLoggerInfoName = String.format(LoggerUtils.TASK_LOGGER_THREAD_NAME + "-%s", taskExecutionContext.getTaskAppId()); ExecutorService parseProcessOutputExecutorService = ThreadUtils.newDaemonSingleThreadExecutor(threadLoggerInfoName); parseProcessOutputExecutorService.submit(new Runnable() { @Override public void run() { BufferedReader inReader = null; try { inReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; long lastFlushTime = System.currentTimeMillis(); logBuffer.add("welcome to use bigdata scheduling system..."); Thread.sleep(Constants.DEFAULT_LOG_FLUSH_INTERVAL * 2);
阅读全文