当前位置: 首页 > 知识库问答 >
问题:

Apache Kafka-Log4j-Appender未在spark群集模式下工作

白子昂
2023-03-14

我尝试将spark应用程序驱动程序/执行程序日志发送到kafka topic。它在Eclipse中工作
在部署群集模式时,它会显示

ClassNotFoundException。

我添加了火花核心火花sql火花流kafka火花流kafka流kafka-log4j-appendermaven,但它仍然显示

组织。阿普切。Kafka。log4jappender类NotFoundException。

在服务器中,运行jar自身的spark程序中并没有与Kafka相关的jar。

请告诉任何人为什么不在集群模式下从spark driver/executor向kafka topic发送日志。

我也尝试了下面提到的链接步骤,

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` `

如何通过kafka-log4j-appender-2.3.0发送火花驱动/执行器日志到kafka主题使用log4j.properties.

共有1个答案

陶鸿畴
2023-03-14

我设法在集群模式下使用kafka-log4j-appender 2.3.0,但是我相信其他版本也会有类似的行为。

基本上,spark缺少kafka-log4j-appender

一般来说,你应该能够在你的胖罐子里提供kafka-log4j-appender。我以前有过类似的问题,它不起作用。仅仅是因为在集群环境中,类路径被Spark覆盖。所以如果它对你也不起作用,继续前进。

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

你实际上两者都需要,因为appender没有客户端就无法工作。
把它们放在你解雇的同一台机器上。
好处是,你可以随心所欲地命名它们。

现在为客户端模式

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" \

或用于集群模式

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

我认为这更方便,但你必须准确地知道名字。

在跑步过程中,您需要寻找这些类型的线条:

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

并记下如何在hdfs上的application_1569430771458_10776文件夹中调用jar

现在进入客户端模式

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" \

或用于集群模式

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" \

如果您想提供日志记录。业主,请按照我的教程进行操作:https://stackoverflow.com/a/55596389/1549135

 类似资料:
  • 如何确定spark独立群集模式上的工作线程数?在独立群集模式下添加工作线程时,持续时间将缩短。 例如,对于我的输入数据3.5 G,WordCount需要3.8分钟。但是,在我添加了一个内存为4 G的工作器后,需要2.6分钟。 增加调谐火花的工人可以吗?我正在考虑这方面的风险。 我的环境设置如下:, 内存128克,16个CPU,用于9个虚拟机 输入数据信息 HDFS中的3.5 G数据文件

  • 最近,我在使用logback.xml作为日志记录时,在独立集群模式下的Flink日志记录中遇到了一个问题。我的要求是,我的所有作业都应该登录到特定的文件夹中,我的flink框架日志应该放在单独的文件夹中,而且对于在我的flink集群中运行的每个作业,应该有单独的文件夹用于不同的作业。我在我的本地集群中测试了它,它运行良好,我得到了所有的日志,与我提交的Flink作业相关的单独文件夹,但一旦我在独立

  • 抛出错误 到目前为止,我在Hadoop中只有start-dfs.sh,在Spark中并没有真正配置任何内容。我是否需要使用YARN集群管理器来运行Spark,以便Spark和Hadoop使用相同的集群管理器,从而可以访问HDFS文件? 我尝试按照tutorialspoint https://www.tutorialspoint.com/Hadoop/hadoop_enviornment_setup

  • /usr/local/spark-1.2.1-bin-hadoop2.4/bin/--类com.fst.firststep.aggregator.firststepmessageProcessor--主spark://ec2-xx-xx-xx-xx.compute-1.amazonaws.com:7077--部署模式集群--监督文件:///home/xyz/sparkstreaming-0.0.1

  • Redis streams是否受益于群集模式?假设您有10个流,它们是分布在集群中还是全部分布在同一个节点上?我计划使用Redis streams实现真正的高吞吐量(每秒200万条消息),因此我担心Redis streams在这种规模下的性能。 如果Redis streams不能在集群模式下进行开箱即用的扩展,那么任何关于水平扩展Redis streams的指导都会非常棒。