Apache spark spark流媒体应用程序和kafka log4j appender问题

Apache spark spark流媒体应用程序和kafka log4j appender问题,apache-spark,log4j,spark-streaming,Apache Spark,Log4j,Spark Streaming,我正在测试spark streaming应用程序,我的代码中有多个函数: -其中一些在数据流[RDD[XXX]]上运行,一些在RDD[XXX]上运行(在我执行DStream.foreachRDD之后) 我使用Kafka log4j appender来记录在我的函数中发生的业务案例,这些业务案例同时在数据流[RDD]和RDD it本身上运行 但只有当来自于在RDD上运行的函数时,数据才会被追加到Kafka->当我想从在DStream上运行的函数中将数据追加到Kafka时,它就不起作用了 有人知道这

我正在测试spark streaming应用程序,我的代码中有多个函数: -其中一些在数据流[RDD[XXX]]上运行,一些在RDD[XXX]上运行(在我执行DStream.foreachRDD之后)

我使用Kafka log4j appender来记录在我的函数中发生的业务案例,这些业务案例同时在数据流[RDD]和RDD it本身上运行

但只有当来自于在RDD上运行的函数时,数据才会被追加到Kafka->当我想从在DStream上运行的函数中将数据追加到Kafka时,它就不起作用了

有人知道这种行为的原因吗

我在一台虚拟机上工作,我有Spark&Kafka。我使用spark submit提交申请

已编辑

事实上,我已经找出了问题的症结所在。数据仅从我的主函数中的代码部分附加到Kafka。我的main之外的所有代码都不会将数据写入kafka

大体上,我是这样声明记录器的:

val kafkaLogger = org.apache.log4j.LogManager.getLogger("kafkaLogger")
在我的主要任务之外,我必须这样声明:

@transient lazy val kafkaLogger = org.apache.log4j.LogManager.getLogger("kafkaLogger")
以避免序列化问题

原因可能是JVM序列化概念的背后,或者仅仅是因为工作人员看不到log4j配置文件(但我的log4j文件在我的源代码中,在资源文件夹中)

编辑2

我已经尝试了很多方法将log4j文件发送给执行者,但都不起作用。我试过:

  • 在spark submit的--files命令中发送log4j文件

  • 在spark submit中设置:
    --conf“spark.executor.extraJavaOptions=-Dlog4j.configuration=file:/home/vagrant/log4j.properties”

  • 正在--spark submit的驱动程序类路径中设置log4j.properties文件

这两个选项都不起作用

有人有解决办法吗?我在错误日志中没有看到任何错误


谢谢

我想你很接近了。首先,你要确保使用
--files
标志将所有文件导出到所有节点上的工作目录(不是类路径)。然后您希望将这些文件引用到executors和driver的classpath选项。我已经附加了以下命令,希望对您有所帮助。关键是要理解一旦导出了文件,就可以使用工作目录的文件名(而不是url路径)在节点上访问所有文件

注意:将log4j文件放入resources文件夹将不起作用。(至少当我试过的时候,它没有。)


你肯定应该发布一些代码,这样我们才能提供帮助。@YuvalItzchakov,我刚刚编辑了这个问题
sudo -u hdfs spark-submit --class "SampleAppMain" --master yarn --deploy-mode cluster --verbose --files file:///path/to/custom-log4j.properties,hdfs:///path/to/jar/kafka-log4j-appender-0.9.0.0.jar --conf "spark.driver.extraClassPath=kafka-log4j-appender-0.9.0.0.jar" --conf "spark.executor.extraClassPath=kafka-log4j-appender-0.9.0.0.jar"  --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=custom-log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=custom-log4j.properties"  /path/to/your/jar/SampleApp-assembly-1.0.jar