我需要从 java 实用程序触发 Spark 程序,并且需要将 java 程序的语句和 Spark 日志记录在文件系统中的同一文件中。
我尝试在 SparkLauncher 上使用 setConf、addSparkArg 、 --driver-java-options 但无济于事。
是否可以将 java 和 Spark 的语句记录到同一个文件中。如果可以,我该怎么做。
问候
最佳答案
选项 1 当您以编程方式启动 SparkLauncher 时,您可以使用以下方法将日志记录重定向到应用程序记录器:
redirectToLog
如https://spark.apache.org/docs/2.3.0/api/java/org/apache/spark/launcher/SparkLauncher.html#redirectToLog-java.lang.String-
例如:
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
中,您可以使用它来配置记录器。
关于java - 通过Java触发的Spark程序中自定义log4j进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515510/