因为kafka的log4jappender,在启动yarn作业时出现异常。

huangapple go评论109阅读模式
英文:

Getting exception while launching yarn jobs due to kafka log4jappender

问题

当我使用这个log4j.properties作为配置来运行我的yarn作业时,它会失败,并出现以下异常。如果我从rootLogger中移除KAFKA,作业就会正常启动。

这是与此处报告的相同问题:
https://github.com/wso2/product-ei/issues/2786

但我尚未找到解决方法。

环境:CDH 6.3.3

这是我的log4j.properties文件。

  1. log4j.rootLogger=DEBUG,stdout,KAFKA
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  3. log4j.appender.stdout.Threshold=DEBUG
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  5. log4j.appender.stdout.layout.ConversionPattern=%-5p %L %X{taskId} %X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n
  6. log4j.appender.alog=org.apache.log4j.RollingFileAppender
  7. log4j.appender.alog.maxFileSize=10MB
  8. log4j.appender.alog.maxBackupIndex=5
  9. log4j.appender.alog.file=../logs/serverx.log
  10. log4j.appender.alog.append=false
  11. log4j.appender.alog.layout=org.apache.log4j.PatternLayout
  12. log4j.appender.alog.layout.conversionPattern=%-5p %X{taskId}
  13. %X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n
  14. log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
  15. log4j.appender.KAFKA.layout=org.apache.log4j.EnhancedPatternLayout
  16. log4j.appender.KAFKA.layout.conversionPattern=%d%C{1}%t%5p %-4p%X{taskId} %X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n%throwable
  17. log4j.appender.KAFKA.topic=cdhuser_rocplus_roclog
  18. log4j.appender.KAFKA.securityProtocol=PLAINTEXT
  19. log4j.appender.KAFKA.ignoreExceptions=false

异常信息:

  1. 在版本合法性检查期间发生了意外问题
  2. 报告的异常:
  3. java.lang.NullPointerException
  4. at org.slf4j.LoggerFactory.versionSanityCheck(LoggerFactory.java:267)
  5. at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:126)
  6. at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
  7. at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
  8. at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
  9. at org.apache.kafka.clients.CommonClientConfigs.<clinit>(CommonClientConfigs.java:32)
  10. at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:333)
  11. at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:327)
  12. at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:299)
  13. at org.apache.kafka.log4jappender.KafkaLog4jAppender.getKafkaProducer(KafkaLog4jAppender.java:279)
  14. at org.apache.kafka.log4jappender.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.java:273)
  15. at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
  16. at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
  17. at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
  18. at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
  19. at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
  20. at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
  21. at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
  22. at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
  23. at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
  24. at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
  25. at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
  26. at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
  27. at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
  28. at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:217)
  29. at org.apache.spark.internal.Logging$class.initializeLogging(Logging.scala:122)
  30. at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:111)
  31. at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
  32. at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:102)
  33. at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
  34. at org.apache.spark.internal.Logging$class.log(Logging.scala:49)
  35. at org.apache.spark.deploy.yarn.ApplicationMaster$.log(ApplicationMaster.scala:771)
  36. at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:786)
  37. at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)
  38. Exception in thread "main" java.lang.ExceptionInInitializerError
  39. at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:333)
  40. at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:327)
  41. at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:299)
  42. at org.apache.kafka.log4jappender.KafkaLog4jAppender.getKafkaProducer(KafkaLog4jAppender.java:279)
  43. at org.apache.kafka.log4jappender.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.java:273)
  44. at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
  45. at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
  46. at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
  47. at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
  48. at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
  49. at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
  50. at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
  51. at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
  52. at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
  53. at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
  54. at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
  55. at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
  56. at org.slf4j.impl.Static
  57. <details>
  58. <summary>英文:</summary>
  59. When I run my yarn jobs with this log4j.properties as a configuration it fails with the below exception. If I remove KAFKA from *rootLogger* the jobs launch fine.
  60. This is the same issue that has been reported here:
  61. https://github.com/wso2/product-ei/issues/2786
  62. But I have not found a solution for this.
  63. Environment: CDH 6.3.3
  64. This is my log4j.properties file.

log4j.rootLogger=DEBUG,stdout,KAFKA
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %L %X{taskId} %X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n

log4j.appender.alog=org.apache.log4j.RollingFileAppender
log4j.appender.alog.maxFileSize=10MB
log4j.appender.alog.maxBackupIndex=5
log4j.appender.alog.file=../logs/serverx.log
log4j.appender.alog.append=false
log4j.appender.alog.layout=org.apache.log4j.PatternLayout
log4j.appender.alog.layout.conversionPattern=%-5p %X{taskId}
%X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n
log4j.appender.KAFKA=org.apache.kafka.log4jappender.KafkaLog4jAppender
log4j.appender.KAFKA.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.KAFKA.layout.conversionPattern=%d%C{1}%t%5p %-4p%X{taskId} %X{stsId} %d{yyyy-MM-dd HH:mm:ss} %c %t %m%n%throwable

log4j.appender.KAFKA.topic=cdhuser_rocplus_roclog
log4j.appender.KAFKA.securityProtocol=PLAINTEXT
log4j.appender.KAFKA.ignoreExceptions=false

  1. Exception:

Unexpected problem occured during version sanity check
Reported exception:
java.lang.NullPointerException
at org.slf4j.LoggerFactory.versionSanityCheck(LoggerFactory.java:267)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:126)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at org.apache.kafka.clients.CommonClientConfigs.<clinit>(CommonClientConfigs.java:32)
at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:333)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:327)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:299)
at org.apache.kafka.log4jappender.KafkaLog4jAppender.getKafkaProducer(KafkaLog4jAppender.java:279)
at org.apache.kafka.log4jappender.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.java:273)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:217)
at org.apache.spark.internal.Logging$class.initializeLogging(Logging.scala:122)
at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:111)
at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:102)
at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
at org.apache.spark.internal.Logging$class.log(Logging.scala:49)
at org.apache.spark.deploy.yarn.ApplicationMaster$.log(ApplicationMaster.scala:771)
at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:786)
at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:333)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:327)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:299)
at org.apache.kafka.log4jappender.KafkaLog4jAppender.getKafkaProducer(KafkaLog4jAppender.java:279)
at org.apache.kafka.log4jappender.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.java:273)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.slf4j.impl.Log4jLoggerFactory.<init>(Log4jLoggerFactory.java:66)
at org.slf4j.impl.StaticLoggerBinder.<init>(StaticLoggerBinder.java:72)
at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:45)
at org.apache.spark.internal.Logging$.org$apache$spark$internal$Logging$$isLog4j12(Logging.scala:217)
at org.apache.spark.internal.Logging$class.initializeLogging(Logging.scala:122)
at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:111)
at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
at org.apache.spark.internal.Logging$class.initializeLogIfNecessary(Logging.scala:102)
at org.apache.spark.deploy.yarn.ApplicationMaster$.initializeLogIfNecessary(ApplicationMaster.scala:771)
at org.apache.spark.internal.Logging$class.log(Logging.scala:49)
at org.apache.spark.deploy.yarn.ApplicationMaster$.log(ApplicationMaster.scala:771)
at org.apache.spark.deploy.yarn.ApplicationMaster$.main(ApplicationMaster.scala:786)
at org.apache.spark.deploy.yarn.ApplicationMaster.main(ApplicationMaster.scala)
Caused by: java.lang.NullPointerException
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:418)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at org.apache.kafka.clients.CommonClientConfigs.<clinit>(CommonClientConfigs.java:32)
... 28 more

  1. </details>
  2. # 答案1
  3. **得分**: 1
  4. 我们在CDH 6.3.3中遇到了同样的问题。
  5. 看起来`kafka-log4j-appender:2.2.1-cdh6.3.3`和`slf4j-api:1.7.25`这些库存在问题。
  6. 我们使用的解决方法是指定不同版本的`slf4j-api`和`slf4j-log4j12`库(1.7版本不起作用,我们不得不使用1.8版本)。
  7. 解决此问题的步骤如下:
  8. - 首先,您需要在`pom.xml`文件中将这些库指定为依赖...
  9. &lt;properties&gt;
  10. &lt;slf4j.version&gt;1.8.0-beta4&lt;/slf4j.version&gt;
  11. &lt;/properties&gt;
  12. &lt;dependencies&gt;
  13. &lt;dependency&gt;
  14. &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
  15. &lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;
  16. &lt;version&gt;${slf4j.version}&lt;/version&gt;
  17. &lt;/dependency&gt;
  18. &lt;dependency&gt;
  19. &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
  20. &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
  21. &lt;version&gt;${slf4j.version}&lt;/version&gt;
  22. &lt;/dependency&gt;
  23. - 使用插件将这些依赖项复制到`target`目录中...
  24. &lt;plugin&gt;
  25. &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  26. &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
  27. &lt;version&gt;3.1.1&lt;/version&gt;
  28. &lt;executions&gt;
  29. &lt;execution&gt;
  30. &lt;phase&gt;package&lt;/phase&gt;
  31. &lt;goals&gt;
  32. &lt;goal&gt;copy-dependencies&lt;/goal&gt;
  33. &lt;/goals&gt;
  34. &lt;/execution&gt;
  35. &lt;/executions&gt;
  36. &lt;configuration&gt;
  37. &lt;includeScope&gt;provided&lt;/includeScope&gt;
  38. &lt;outputDirectory&gt;target&lt;/outputDirectory&gt;
  39. &lt;includeArtifactIds&gt;slf4j-api,slf4j-log4j12&lt;/includeArtifactIds&gt;
  40. &lt;stripVersion&gt;true&lt;/stripVersion&gt;
  41. &lt;/configuration&gt;
  42. &lt;/plugin&gt;
  43. - 在Spark中包含以下属性:

spark.driver.extraClassPath=slf4j-api.jar:slf4j-log4j12.jar
spark.executor.extraClassPath=slf4j-api.jar:slf4j-log4j12.jar

  1. - 最后,在`spark-submit`中使用此参数:

--jars slf4j-api.jar,slf4j-log4j12.jar

  1. <details>
  2. <summary>英文:</summary>
  3. We had the same problem with CDH 6.3.3
  4. Looks like there are a problem with the libraries kafka-log4j-appender:2.2.1-cdh6.3.3 and slf4j-api:1.7.25.
  5. The workarround that used was specify a different version of slf4j-api and slf4j-log4j12 libraries (Didn&#39;t work with 1.7 version and we had to use the 1.8 version).
  6. The steps to solve this issue are:
  7. - First you have to specify these libraries as dependency in the pom.xml file ...
  8. &lt;properties&gt;
  9. &lt;slf4j.version&gt;1.8.0-beta4&lt;/slf4j.version&gt;
  10. &lt;/properties&gt;
  11. &lt;dependencies&gt;
  12. &lt;dependency&gt;
  13. &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
  14. &lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;
  15. &lt;version&gt;${slf4j.version}&lt;/version&gt;
  16. &lt;/dependency&gt;
  17. &lt;dependency&gt;
  18. &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
  19. &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;
  20. &lt;version&gt;${slf4j.version}&lt;/version&gt;
  21. &lt;/dependency&gt;
  22. - Use a plugin to copy this dependencies to `target` directory ...
  23. &lt;plugin&gt;
  24. &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  25. &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt;
  26. &lt;version&gt;3.1.1&lt;/version&gt;
  27. &lt;executions&gt;
  28. &lt;execution&gt;
  29. &lt;phase&gt;package&lt;/phase&gt;
  30. &lt;goals&gt;
  31. &lt;goal&gt;copy-dependencies&lt;/goal&gt;
  32. &lt;/goals&gt;
  33. &lt;/execution&gt;
  34. &lt;/executions&gt;
  35. &lt;configuration&gt;
  36. &lt;includeScope&gt;provided&lt;/includeScope&gt;
  37. &lt;outputDirectory&gt;target&lt;/outputDirectory&gt;
  38. &lt;includeArtifactIds&gt;slf4j-api,slf4j-log4j12&lt;/includeArtifactIds&gt;
  39. &lt;stripVersion&gt;true&lt;/stripVersion&gt;
  40. &lt;/configuration&gt;
  41. &lt;/plugin&gt;
  42. - Include the following properties with spark:

spark.driver.extraClassPath=slf4j-api.jar:slf4j-log4j12.jar
spark.executor.extraClassPath=slf4j-api.jar:slf4j-log4j12.jar

  1. - And finally use this parameter with `spark-submit`:

--jars slf4j-api.jar,slf4j-log4j12.jar

  1. </details>

huangapple
  • 本文由 发表于 2020年9月28日 16:43:09
  • 转载请务必保留本文链接:https://go.coder-hub.com/64098750.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定