我已经在网上搜寻答案了,但我找不到任何有用的东西,所以也许有人有新的观点。
我正在尝试从ApacheSpark2.2应用程序中为kafka主题编写日志。
因为spark仍然使用log4jv1,所以我必须尝试让v1 kafka appender工作,而不是使用log4jv2提供的默认kafka appender。
我可以在一个通过intellij运行的小演示应用程序中使用以下库(来自build.sbt):
//v1 log4j appender librarydependencies+=“org.apache.kafka”%%“kafka”%”“0.8.2.2”需要旧版本的kafka
但我找不到一个办法,让这个运行,例如Spark壳或Spark提交。
我可以在spark的log4j.properties中使用与我的虚拟应用程序相同的设置来配置appender。
但是当spark shell启动时,它似乎会在加载任何额外jar之前启动记录器,然后立即抛出一个错误,因为它找不到kafka appender:
log4j:错误无法示例化类[kafka.producer.kafkalog4jappender]。java.lang.classnotfoundexception:kafka.producer.kafkalog4jappender
我在spark配置文件或cli中尝试了各种选项,以首先加载jar,例如--jars,-files,-driver class path,在spark-default.conf中设置spark.driver.extraclasspath和spark.executor.extraclasspath,等等。
似乎没有什么工作,所以有人曾经得到这个工作,即Spark2.2。通过log4j登录到kafka,如果是的话,他们能建议正确的配置选项让我这样做吗?
顺便说一下,这里有几个类似的问题,但是没有一个能为我解决问题,所以请不要把这个标记为重复。
谢谢你给我的建议!
1条答案
按热度按时间2wnc66cl1#
kafka-log4j-appender带Spark
我设法用了
spark-submit 2.1.1
在cluster
带的模式kafka-log4j-appender 2.3.0
,但我相信其他版本也会有类似的表现。准备
首先,我认为阅读日志非常有帮助,因此您需要能够阅读应用程序日志和
spark-submit
信息。有时当应用程序挂起时ACCEPT
阶段(由于kafka的错误配置),有必要从hadoop应用程序概述中读取日志。因此,每当我启动应用程序时,抓取
完成后,从yarn下载所有日志
好吧,让我们试试!
为spark提供kafka-log4j-appender
基本上,
spark
缺少kafka-log4j-appender
.一般来说,你应该能够提供
kafka-log4j-appender
在你的肥jar里。我有一些类似的问题,它不工作以前的经验。只是因为在集群环境中,类路径被spark覆盖。所以,如果这对你也不管用,那就继续吧。方案a。手动下载jar:
实际上这两个都需要,因为appender没有客户端就无法工作。
把它们放在你发射的同一台机器上
spark-submit
从。好处是,你可以随意命名。
现在为
client
模式或为
cluster
模式方案b。使用--包从maven下载JAR:
我认为这样比较方便,但你必须准确地知道名字。
在跑步过程中,你需要寻找这些类型的线条:
并记下
jars
被称为内部application_1569430771458_10776
上的文件夹hdfs
.现在为
client
模式或为
cluster
模式以上应该已经起作用了
额外步骤
如果你想提供
logging.proprietes
,请按照我的教程:https://stackoverflow.com/a/55596389/1549135