简体   繁体   English

Apache Kafka-Log4j-Appender 不工作火花集群模式

[英]Apache Kafka-Log4j-Appender not working spark cluster mode

I try to sends my spark application driver/executor logs to kafka topic.我尝试将我的 spark 应用程序驱动程序/执行程序日志发送到 kafka 主题。 It is working in Eclipse.它在 Eclipse 中工作。
While deploying cluster mode it is showing在部署集群模式时,它显示

ClassNotFoundException.类未找到异常。

I added spark core , spark-sql , spark stream kafka , spark streaming , kafka streaming and kafka-log4j-appender maven's but still it is showing我添加了spark corespark-sqlspark stream kafkaspark streamingkafka streamingkafka-log4j-appender maven's 但它仍然显示

org.apche.kafka.log4jappender ClassNotFoundException. org.apche.kafka.log4jappender ClassNotFoundException。

In server there is no kafka related jars available in my spark program running jar have itself.在服务器中,我的运行 jar 的 spark 程序中没有与 kafka 相关的 jar。

Please anyone tell why it is not sending logs to kafka topic from spark driver/executor in cluster mode.请任何人告诉为什么它不在集群模式下从火花驱动程序/执行程序向 kafka 主题发送日志。

i tried the below link mentioned steps also,我也尝试了以下链接提到的步骤,

spark streaming application and kafka log4j appender issue spark流应用程序和kafka log4j appender问题

og4j.rootLogger=INFO, console, KAFKA, file

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
log4j.appender.KAFKA.topic=test2
log4j.appender.KAFKA.name=localhost
log4j.appender.KAFKA.host=localhost
log4j.appender.KAFKA.port=9092
log4j.appender.KAFKA.brokerList=localhost:9092
log4j.appender.KAFKA.compressionType=none
log4j.appender.KAFKA.requiredNumAcks=0
log4j.appender.KAFKA.syncSend=true
log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L %% - %m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log4j-application.log
log4j.appender.file.MaxFileSize=5MB``
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M` `M-dd` ` HH:mm:ss} %-5p %c{1}:%L - %m%n` `

How to send spark driver/executor logs to kafka topic via kafka-log4j-appender-2.3.0 using log4j.properties.如何使用 log4j.properties 通过 kafka-log4j-appender-2.3.0 将 spark 驱动程序/执行程序日志发送到 kafka 主题。

kafka-log4j-appender with Spark带有 Spark 的 kafka-log4j-appender

I managed to use spark-submit 2.1.1 in cluster mode with kafka-log4j-appender 2.3.0 , but I believe other versions will behave similarly.我设法在cluster模式下使用spark-submit 2.1.1kafka-log4j-appender 2.3.0 ,但我相信其他版本的行为会类似。


Provide kafka-log4j-appender for Spark为 Spark 提供kafka-log4j-appender

Basically, spark is missing kafka-log4j-appender .基本上, spark缺少kafka-log4j-appender

Generally, you should be able to provide kafka-log4j-appender in your fat jar.通常,您应该能够在您的胖 jar 中提供kafka-log4j-appender I had some previous experience with similar problem where it does not work.我以前有过类似问题的经验,但它不起作用。 Simply because in a cluster environment your classpath is overridden by Spark.仅仅是因为在集群环境中,您的类路径被 Spark 覆盖。 So if it does not work for you either, move on.因此,如果它也不适合您,请继续。

Option A. Manually download jars:选项 A. 手动下载 jars:

kafka-log4j-appender-2.3.0.jar
kafka-clients-2.3.0.jar

You actually need both, because appender won't work without clients.您实际上需要两者,因为没有客户端,appender 将无法工作。
Place them on the same machine you fire spark-submit from.将它们放在您触发spark-submit的同一台机器上。
The benefit is, that you can name them as you like.好处是,您可以随意命名它们。

Now for client mode现在为client模式

JARS='/absolute/path/kafka-log4j-appender-2.3.0.jar,/absolute/path/kafka-clients-2.3.0.jar'
JARS_CLP='/absolute/path/kafka-log4j-appender-2.3.0.jar:/absolute/path/kafka-clients-2.3.0.jar'
JARS_NAMES='kafka-log4j-appender-2.3.0.jar:kafka-clients-2.3.0.jar'

spark-submit \
    --deploy-mode client \
    --jars "$JARS"
    --conf "spark.driver.extraClassPath=$JARS_CLP" \
    --conf "spark.executor.extraClassPath=$JARS_NAMES" \

Or for cluster mode或者对于cluster模式

spark-submit \
    --deploy-mode cluster \
    --jars "$JARS"
    --conf "spark.driver.extraClassPath=$JARS_NAMES" \
    --conf "spark.executor.extraClassPath=$JARS_NAMES" \

Option B. Use --packages to download jars from maven:选项 B. 使用--packages从 maven 下载 jars:

I think this is more convenient, but you have to get the name precisely.我认为这样更方便,但您必须准确地获得名称。

You need to look for those kinds of lines during run:您需要在运行期间查找这些类型的行:

19/11/15 19:44:08 INFO yarn.Client: Uploading resource file:/srv/cortb/home/atais/.ivy2/jars/org.apache.kafka_kafka-log4j-appender-2.3.0.jar -> hdfs:///user/atais/.sparkStaging/application_1569430771458_10776/org.apache.kafka_kafka-log4j-appender-2.3.0.jar
19/11/15 19:44:08 INFO yarn.Client: Uploading resource file:/srv/cortb/home/atais/.ivy2/jars/org.apache.kafka_kafka-clients-2.3.0.jar -> hdfs:///user/atais/.sparkStaging/application_1569430771458_10776/org.apache.kafka_kafka-clients-2.3.0.jar

and note down how the jars are called inside application_1569430771458_10776 folder on hdfs .并记下在hdfs上的application_1569430771458_10776文件夹中如何调用jars

Now for client mode现在为client模式

JARS_CLP='/srv/cortb/home/atais/.ivy2/jars/org.apache.kafka_kafka-log4j-appender-2.3.0.jar:/srv/cortb/home/atais/.ivy2/jars/org.apache.kafka_kafka-clients-2.3.0.jar'
KAFKA_JARS='org.apache.kafka_kafka-log4j-appender-2.3.0.jar:org.apache.kafka_kafka-clients-2.3.0.jar'

spark-submit \
    --deploy-mode client \
    --packages "org.apache.kafka:kafka-log4j-appender:2.3.0"
    --conf "spark.driver.extraClassPath=$JARS_CLP" \
    --conf "spark.executor.extraClassPath=$KAFKA_JARS" \

Or for cluster mode或者对于cluster模式

spark-submit \
    --deploy-mode cluster \
    --packages "org.apache.kafka:kafka-log4j-appender:2.3.0"
    --conf "spark.driver.extraClassPath=$KAFKA_JARS" \
    --conf "spark.executor.extraClassPath=$KAFKA_JARS" \

The above should work already以上应该已经工作

Extra steps额外的步骤

If you want to provide your logging.proprietes , follow my tutorial on that here: https://stackoverflow.com/a/55596389/1549135如果您想提供logging.proprietes ,请按照我的教程进行操作: https : //stackoverflow.com/a/55596389/1549135

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM