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

用Log4j v1 Kafka appender实现对Kafka的APAche火花日志记录

广绪
2023-03-14

我可以在Spark的log4j.properties中使用与我的虚拟应用程序中相同的设置来配置appender。

但是当Spark shell启动时,它似乎在加载任何额外的jar之前就启动了记录器,然后立即抛出一个错误,因为它找不到Kafka appender:

log4j:错误无法实例化类[kafka.producer.kafkalog4jappender]。ClassNotFoundException:kafka.producer.Kafkalog4Jappender

共有1个答案

法和硕
2023-03-14

我设法在cluster模式下使用spark-submit 2.1.1,并使用kafka-log4j-appender 2.3.0,但我相信其他版本也会有类似的行为。

首先,我认为阅读日志真的很有帮助,所以您需要能够阅读应用程序纱线日志和spark-submit信息。有时,当应用程序在accept阶段挂起时(因为kafka生产者配置失误),需要从Hadoop Yarn应用程序概述中读取日志。

所以每当我启动我的应用程序时,抓取

19/08/01 10:52:46 INFO yarn.Client: Application report for application_1564028288963_2380 (state: RUNNING)

完成时从YARN行并下载所有日志

yarn logs -applicationId application_1564028288963_2380

好,让我们试试!

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

kafka-log4j-appender-2.3.0.jar
kafka-clients-2.3.0.jar
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" \
 类似资料:
  • 我注意到在 Spark 中的规则探索器每次催化剂更改计划时都会执行跟踪日志: https://github . com/Apache/spark/blob/78801881 c 405 de 47 f 7 e 53 EEA 3 e 0420 DD 69593 DBD/SQL/catalyst/src/main/Scala/org/Apache/spark/SQL/catalyst/rules/ru

  • 我将pyspark应用程序从我自己的工作站上的pycharm启动到一个8节点集群。这个群集还有编码在spark-defaults.conf和spark-env.sh中的设置 显示未来的信息消息,但到那时已经太晚了。 如何设置spark开始时的默认日志记录级别?

  • 我们从kafka向SparkStreaming发送了15张唱片,但是spark只收到了11张唱片。我用的是spark 2.1.0和kafka_2.12-0.10.2.0。 密码 bin/Kafka-console-producer . sh-broker-list localhost:9092-topic input data topic # 1 2 3 4 5 6 7 8 9 10 11 12

  • 问题内容: 我在独立应用程序中使用Apache Common Logging库。在网上搜索后,我尝试通过使用以下方式关闭日志记录 但是,我仍然可以看到正在打印的日志消息。我可以知道我错过了什么吗? 我可以通过以下方式关闭日志记录 在commons-logging.properties中。 但是,在开发期间,我的Netbeans不知道从何处获取commons-logging.properties,有

  • 我正在使用python日志记录我的程序。所有日志当前都打印在stdout上,但我希望使用POST REST调用将它们发送到远程日志服务器。当前,我的程序发出了多个日志记录的POST请求。有没有更优化的方式发送日志,我可以捆绑多个日志在一个POST请求?