Apache spark Spark中的自定义log4j布局(纱线上)-ClassNotFoundException
我在尝试为Spark(1.6.1)on Thread(CDH)使用定制Log4j布局时遇到了一个奇怪的问题。布局如下: 如果将log4j.properties文件(随--files一起提供)用于: 并向log4j-json.1.0.jar提供Apache spark Spark中的自定义log4j布局(纱线上)-ClassNotFoundException,apache-spark,log4j,yarn,Apache Spark,Log4j,Yarn,我在尝试为Spark(1.6.1)on Thread(CDH)使用定制Log4j布局时遇到了一个奇怪的问题。布局如下: 如果将log4j.properties文件(随--files一起提供)用于: 并向log4j-json.1.0.jar提供--jars到spark submit,驱动程序和执行程序会在日志文件的开头抛出异常: log4j:ERROR Could not instantiate class [uk.me.mjt.log4jjson.SimpleJsonLayout]. java.
--jars
到spark submit
,驱动程序和执行程序会在日志文件的开头抛出异常:
log4j:ERROR Could not instantiate class [uk.me.mjt.log4jjson.SimpleJsonLayout].
java.lang.ClassNotFoundException: uk.me.mjt.log4jjson.SimpleJsonLayout
但是,一个简单的spark作业可以执行以下操作:
sc.parallelize(List(1,2,3)).foreach(i => {Class.forName("uk.me.mjt.log4jjson.SimpleJsonLayout")})
不会抛出错误。因此类正在被加载,但没有及时让Log4j使用它
我尝试了几个不同的选项来让它工作(包括在Thread应用程序类路径、spark executor类路径等中),它们都产生相同的结果。唯一有效的方法是使用core/pom.xml
中包含的maven依赖项构建定制spark程序集。这样,布局就包含在spark assembly jar中,我得到了所需的JSON日志输出
使用
--jars
时,Log4j上是否存在类加载问题?我无法想象为什么它能与spark assembly中的捆绑一起工作,但不能与--jars一起工作
找到解决方案了吗?
sc.parallelize(List(1,2,3)).foreach(i => {Class.forName("uk.me.mjt.log4jjson.SimpleJsonLayout")})