Vla*_*roz 2 log4j log4j2 apache-spark
我试图在我的Spark作业中使用log4j 2记录器。基本要求:log4j2配置位于类路径之外,因此我需要显式指定其位置。当我不使用IDE直接在IDE中运行代码时spark-submit,log4j2可以很好地工作。但是,当我使用提交相同的代码到Spark集群时spark-submit,它找不到log42配置,并退回到默认的旧log4j。
启动器命令
${SPARK_HOME}/bin/spark-submit \
--class my.app.JobDriver \
--verbose \
--master 'local[*]' \
--files "log4j2.xml" \
--conf spark.executor.extraJavaOptions="-Dlog4j.configurationFile=log4j2.xml" \
--conf spark.driver.extraJavaOptions="-Dlog4j.configurationFile=log4j2.xml" \
myapp-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
Maven中的Log4j2依赖项
<dependencies>
. . .
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- Bridge log4j to log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<!-- Bridge slf4j to log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependencies>
Run Code Online (Sandbox Code Playgroud)
有什么想法我可能会错过吗?
显然,目前Spark中没有log4j2的官方支持人员。这是关于此主题的详细讨论:https : //issues.apache.org/jira/browse/SPARK-6305
在实际方面意味着:
如果您有权访问Spark配置和jar,并且可以对其进行修改,则log4j2在将log4j2 jar手动添加到SPARK_CLASSPATH log4j2并向Spark 提供配置文件后,仍可以使用。
如果您在托管的Spark集群上运行并且无法访问Spark jar / config,则仍然可以使用log4j2,但是其使用将仅限于在驱动程序侧执行的代码。执行者运行的任何代码部分都将使用Spark执行者记录器(旧的log4j)
| 归档时间: |
|
| 查看次数: |
4939 次 |
| 最近记录: |