从Java触发的Spark程序中记录自定义log4j

时间:2018-03-27 14:25:14

标签: java scala apache-spark logging

我需要从我的java实用程序触发一个spark程序,我需要将java程序的语句和spark日志记录在文件系统的同一个文件中。

我尝试在SparkLauncher上使用setConf,addSparkArg,--driver-java-options但无济于事。

是否可以将语句记录到java和spark的同一文件中。如果我可以这样做。

此致

1 个答案:

答案 0 :(得分:0)

选项1 当您以编程方式启动SparkLauncher时,您可以使用以下命令将日志记录重定向到应用程序记录器: 在https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/launcher/SparkLauncher.html#redirectToLog-java.lang.String-redirectToLog 例如:

private static final Logger LOG = LoggerFactory.getLogger(Application.class);
//in your launcher init method.
SparkLauncher sparkLauncher = new SparkLauncher();
sparkLauncher.redirectToLog(LOG.getName());

此处的记录器是SLF4J。

选项2 据我所知,Spark默认使用log4j(如果你愿意,你可以使用slf4j和logback)。您可以在应用程序中配置log4j,它将在您的CLASSPATH上可用。例如,您可以在built.sbt中包含javaOptions:

javaOptions in run ++= Seq(
  "-Dlog4j.debug=true",
  "-Dlog4j.configuration=log4j.properties")

并将log4j.properties放在src/main/resources中。默认的spark log4j属性模板应该可以在$SPARK_HOME/conf处使用,您可以使用它来配置记录器。