【问题标题】:Save Spark Launcher-Output to File将 Spark Launcher 输出保存到文件
【发布时间】:2018-03-08 04:50:40
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java apache-spark logging spark-launcher


    【解决方案1】:

    下面是我用slf4j-log4j打印sparkLauncher日志的代码sn-p:

    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);
            }
    

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

    【讨论】:

    • 我在谷歌搜索时也发现了 redirectToLog() 方法,但它对我不可用并且已经很困惑。现在我知道为什么了,我应该提一下:我使用的是 Spark 1.6,但没有实现此方法!那么找到解决方案的可能性似乎很低,我认为:(或者还有其他方法吗?
    • 看看 TomaszGuzialek Here 的回答,他正在使用流从输出/错误流中获取日志。
    【解决方案2】:

    我尝试使用 redirectOutput(java.io.File outFile) 并能够将 sparkLauncher 的所有日志记录到 outFile。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 2015-08-07
      相关资源
      最近更新 更多