java - 将 Spark Launcher 输出保存到文件

标签 java apache-spark logging spark-launcher

我正在使用 Java 应用程序和 Spark Launcher 以编程方式将作业提交到 Spark 集群(使用 YARN)(使用 startApplication() 而不是 launch() 启 Action 业)。 我喜欢将所有日志输出(在执行 Java 应用程序时由启动器在 stdout 和 stderr 上生成)放在一个文件中,我可以使用 java-app 访问该文件。我不想更改全局 Spark-log-config,我想要一个动态解决方案,我可以根据每次执行时 java-app 中变量的变化来控制它。

遵循documentation这应该可以通过使用 CHILD_PROCESS_LOGGER_NAME 选项来实现。所以我定义了一个 java.util.logging.logger 像 here并将此代码添加到我的作业启动器中:

SparkLauncher.setConfig(SparkLauncher.CHILD_PROCESS_LOGGER_NAME, "MyLog");

但这不起作用,日志文件是空的。我还尝试了其他方法,例如 setConf(...) 或添加 addSparkArg(...),但没有成功。我做错了什么? 或者我应该更好地使用 log4j,进行自定义配置,并以任何方式将其提供给启动器?如果是,如何在我的 java 应用程序中执行此操作?

最佳答案

下面是我用 slf4j-log4j 打印 SparkLauncher 日志的代码片段:

private static final Logger LOGGER = LoggerFactory.getLogger(JobSubmitter.class);

SparkLauncher launcher = new SparkLauncher()............;//prepare launcher

launcher.redirectToLog(JobSubmitter.class.getName());
        SparkAppHandle handler = launcher.startApplication();
        while (handler.getState() == null || !handler.getState().isFinal()) {
            if (handler.getState() != null) {
                LOGGER.info("Job state is :{} " , handler.getState());
                if (handler.getAppId() != null) {
                    LOGGER.info("App id: {} :: state:{}" , handler.getAppId() , handler.getState());
                }
            }
//Pause job to reduce job check frequency
            Thread.sleep(jobStatusCheckInterval ==0?DEFAULT_JOB_STATUS_CHECK_INTERVAL:jobStatusCheckInterval);
        }

如果您有任何疑问,请添加评论。

关于java - 将 Spark Launcher 输出保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781842/

相关文章:

python - Celery Python 日志记录配置仅从指定模块记录 DEBUG

java - Osgi 属性占位符

java - 未找到 struts2 Web 应用程序

java - 从文件位置在 Java 中运行 .exe 文件

apache-spark - Spark SQL - 在连接和 groupBy 后获取重复行

Azure 虚拟机 Linux 诊断扩展 OMI EnumerateInstances 失败(Linux 诊断 OMI)

python - 当使用removeHandler删除它时,Python日志记录会通知处理程序吗?

java - 倒数计时器延迟 - Android

python - 使用 Parquet 存储多个不同宽度的数据帧?

scala - 使用 foreach 行在数据框中捕获和写入字符串