Spark中的自定义log4j布局(在YARN上) - ClassNotFoundException

时间:2016-04-22 09:46:23

标签: apache-spark log4j yarn

我在尝试在YARN(CDH)上使用Spark(1.6.1)的自定义Log4j布局时遇到了一个奇怪的问题。布局为:https://github.com/michaeltandy/log4j-json

如果我使用log4j.properties文件(随--files提供):

log4j.appender.consolejson=org.apache.log4j.ConsoleAppender
log4j.appender.consolejson.target=System.err
log4j.appender.consolejson.layout=uk.me.mjt.log4jjson.SimpleJsonLayout

将log4j-json.1.0.jar与--jars一起提供给spark-submit,驱动程序和执行程序在日志文件的开头抛出异常:

log4j:ERROR Could not instantiate class [uk.me.mjt.log4jjson.SimpleJsonLayout].
java.lang.ClassNotFoundException: uk.me.mjt.log4jjson.SimpleJsonLayout

但是,一个简单的火花工作就像:

sc.parallelize(List(1,2,3)).foreach(i => {Class.forName("uk.me.mjt.log4jjson.SimpleJsonLayout")})

不会抛出错误。所以正在加载类,但是Log4j没有及时使用它。

我尝试了一些不同的选项试图让它工作(包括它在YARN应用程序类路径,spark执行器类路径等),它们都产生相同的结果。唯一似乎有用的是构建一个自定义的火花装配,其中包含core/pom.xml中的maven依赖。这样,布局包含在spark程序集jar中,我得到了所需的JSON日志输出。

使用--jars时Log4j上是否存在类加载问题?我无法想象为什么它适用于火花装配中的捆绑,但不适用于--jars

0 个答案:

没有答案