我需要从我的java实用程序触发一个spark程序,我需要将java程序的语句和spark日志记录在文件系统的同一个文件中。
我尝试在SparkLauncher上使用setConf,addSparkArg,--driver-java-options但无济于事。
是否可以将语句记录到java和spark的同一文件中。如果我可以这样做。
此致
答案 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
处使用,您可以使用它来配置记录器。