java - 通过Java触发的Spark程序中自定义log4j进行日志记录

标签 java scala apache-spark logging

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

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

是否可以将 java 和 Spark 的语句记录到同一个文件中。如果可以,我该怎么做。

问候

最佳答案

选项 1 当您以编程方式启动 SparkLauncher 时,您可以使用以下方法将日志记录重定向到应用程序记录器: redirectToLoghttps://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/

相关文章:

java - Spark 数据帧过滤 ("where") 子句的自定义解释

node.js - 哪种技术可以与Cassandra以及NodeJS连接?

scala - 如何在 HBase 中编码 float/double/integer 值?

java - Gradle Jacoco 来源包括测试

java - Hibernate 为 DB2 生成错误的插入语句

java - @Override 方法未更改值

scala - 在 Slick 中创建一个空查询

java - 根据属性文件中的类路径加载 Java 类

Scala 泛型函数...在函数中使用 T

scala - run-main-0) scala.ScalaReflectionException : class java. sql.Date in JavaMirror with ClasspathFilter(