Apache spark spark executor中的自定义log4j追加器
我试图在spark executor中使用定制的log4j appender,以便将所有日志转发给ApacheKafka 问题是,log4j是在fatjar的类加载器和appender注册之前初始化的,因此我最终得到以下结果:Apache spark spark executor中的自定义log4j追加器,apache-spark,log4j,Apache Spark,Log4j,我试图在spark executor中使用定制的log4j appender,以便将所有日志转发给ApacheKafka 问题是,log4j是在fatjar的类加载器和appender注册之前初始化的,因此我最终得到以下结果: log4j:ERROR Could not instantiate class [kafka.producer.KafkaLog4jAppender]. java.lang.ClassNotFoundException: kafka.producer.KafkaLog4j
log4j:ERROR Could not instantiate class [kafka.producer.KafkaLog4jAppender].
java.lang.ClassNotFoundException: kafka.producer.KafkaLog4jAppender
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:327)
at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:124)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:785)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.apache.spark.Logging$class.initializeLogging(Logging.scala:122)
at org.apache.spark.Logging$class.initializeIfNecessary(Logging.scala:107)
at org.apache.spark.Logging$class.log(Logging.scala:51)
at org.apache.spark.executor.CoarseGrainedExecutorBackend$.log(CoarseGrainedExecutorBackend.scala:126)
at org.apache.spark.executor.CoarseGrainedExecutorBackend$.run(CoarseGrainedExecutorBackend.scala:137)
at org.apache.spark.executor.CoarseGrainedExecutorBackend$.main(CoarseGrainedExecutorBackend.scala:235)
at org.apache.spark.executor.CoarseGrainedExecutorBackend.main(CoarseGrainedExecutorBackend.scala)
log4j:ERROR Could not instantiate appender named "KAFKA".
2015-09-29 13:10:43 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO akka.event.slf4j.Slf4jLogger: Slf4jLogger started
2015-09-29 13:10:43 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO Remoting: Starting remoting
2015-09-29 13:10:43 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO Remoting: Remoting started; listening on addresses :[akka.tcp://driverPropsFetcher@gin3.dev:36918]
2015-09-29 13:10:43 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO Remoting: Remoting now listens on addresses: [akka.tcp://driverPropsFetcher@gin3.dev:36918]
2015-09-29 13:10:44 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO akka.remote.RemoteActorRefProvider$RemotingTerminator: Shutting down remote daemon.
2015-09-29 13:10:44 [driverPropsFetcher-akka.actor.default-dispatcher-4] INFO akka.remote.RemoteActorRefProvider$RemotingTerminator: Remote daemon shut down; proceeding with flushing remote transports.
2015-09-29 13:10:44 [sparkExecutor-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger: Slf4jLogger started
2015-09-29 13:10:44 [sparkExecutor-akka.actor.default-dispatcher-2] INFO Remoting: Starting remoting
2015-09-29 13:10:44 [sparkExecutor-akka.actor.default-dispatcher-2] INFO Remoting: Remoting started; listening on addresses :[akka.tcp://sparkExecutor@gin3.dev:40067]
2015-09-29 13:10:44 [sparkExecutor-akka.actor.default-dispatcher-2] INFO Remoting: Remoting now listens on addresses: [akka.tcp://sparkExecutor@gin3.dev:40067]
2015-09-29 13:10:44 [driverPropsFetcher-akka.actor.default-dispatcher-5] INFO Remoting: Remoting shut down
....
log4j:错误无法实例化类[kafka.producer.KafkaLog4jAppender]。
java.lang.ClassNotFoundException:kafka.producer.KafkaLog4jAppender
在java.net.URLClassLoader$1.run(URLClassLoader.java:372)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:260)
位于org.apache.log4j.helpers.Loader.loadClass(Loader.java:198)
在org.apache.log4j.helpers.OptionConverter.InstanceByCassName上(OptionConverter.java:327)
在org.apache.log4j.helpers.OptionConverter.InstanceByKey上(OptionConverter.java:124)
位于org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:785)
位于org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
位于org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
位于org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
位于org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
在org.apache.log4j.helpers.OptionConverter.selectAndConfigure上(OptionConverter.java:526)
登录org.apache.log4j.LogManager(LogManager.java:127)
位于org.apache.spark.Logging$class.initializeLogging(Logging.scala:122)
位于org.apache.spark.Logging$class.initializeIfNecessary(Logging.scala:107)
位于org.apache.spark.Logging$class.log(Logging.scala:51)
位于org.apache.spark.executor.RoughGrainedExecutorBackend$.log(RoughGrainedExecutorBackend.scala:126)
位于org.apache.spark.executor.RoughGrainedExecutorBackend$.run(RoughGrainedExecutorBackend.scala:137)
位于org.apache.spark.executor.RoughGrainedExecutorBackend$.main(RoughGrainedExecutorBackend.scala:235)
位于org.apache.spark.executor.RoughGrainedExecutorBackend.main(RoughGrainedExecutorBackend.scala)
log4j:错误无法实例化名为“KAFKA”的appender。
2015-09-29 13:10:43[driverPropsFetcher akka.actor.default-dispatcher-4]INFO akka.event.slf4j.Slf4jLogger:Slf4jLogger已启动
2015-09-29 13:10:43[driverPropsFetcher akka.actor.default-dispatcher-4]信息远程处理:开始远程处理
2015-09-29 13:10:43[driverPropsFetcher akka.actor.default-dispatcher-4]信息远程处理:远程处理已开始;收听地址:[阿克卡。tcp://driverPropsFetcher@gin3.开发:36918]
2015-09-29 13:10:43[driverPropsFetcher akka.actor.default-dispatcher-4]信息远程处理:远程处理现在监听地址:[akka。tcp://driverPropsFetcher@gin3.开发:36918]
2015-09-29 13:10:44[driverPropsFetcher akka.actor.default-dispatcher-4]INFO akka.remote.RemoteActorRefProvider$RemotingTerminator:关闭远程守护程序。
2015-09-29 13:10:44[driverPropsFetcher akka.actor.default-dispatcher-4]INFO akka.remote.RemoteActorRefProvider$RemotingTerminator:远程守护程序关闭;继续刷新远程传输。
2015-09-29 13:10:44[sparkExecutor akka.actor.default-dispatcher-3]INFO akka.event.slf4j.Slf4jLogger:Slf4jLogger已启动
2015-09-29 13:10:44[sparkExecutor akka.actor.default-dispatcher-2]信息远程处理:开始远程处理
2015-09-29 13:10:44[sparkExecutor akka.actor.default-dispatcher-2]信息远程处理:远程处理已启动;收听地址:[阿克卡。tcp://sparkExecutor@gin3.dev:40067]
2015-09-29 13:10:44[sparkExecutor akka.actor.default-dispatcher-2]信息远程处理:远程处理现在监听地址:[akka。tcp://sparkExecutor@gin3.dev:40067]
2015-09-29 13:10:44[driverPropsFetcher akka.actor.default-dispatcher-5]信息远程处理:远程处理关闭
....
问题似乎就在这里:
有什么简单的方法可以解决这个问题吗?我们目前正在使用Spark 1.3.x
谢谢
David
卡夫卡的hadoop制作人。卡夫卡卢格4Jappender
在卡夫卡的hadoop制作人中
因此,您可以添加此依赖项来修复它
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>hadoop-producer</artifactId>
<version>0.8.0</version>
</dependency>
org.apache.kafka
hadoop生成器
0.8.0
最后提交了额外的jar,并记录deps,然后在用户类路径之前加载它
LOG_JAR="${THISDIR}/../lib/logging.jar"
spark-submit ...... \
--files "${LOG4J_CONF},${LOG_JAR}" \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=`basename ${LOG4J_CONF}`" \
--conf "spark.driver.extraClassPath=`basename ${LOG_JAR}`" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=`basename ${LOG4J_CONF}`" \
--conf "spark.executor.extraClassPath=`basename ${LOG_JAR}`" \
...
也面临同样的问题,我将发布对我有效的内容,结果是
KafkaLog4jAppender
类包名称在kafka 0.9中更改,下面是我所做的,在pom中添加了依赖项
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-log4j-appender</artifactId>
<version>0.9.0.0</version>
</dependency>
到
有什么办法吗?spark 1.6中存在同样的问题,在
basename
中可以放置什么路径?你呢?当我以客户端模式提交作业时,基本名称可以是提交主机的本地路径。遗嘱执行人呢?有点困惑。
log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender