gpt4 book ai didi

java - 在 Hadoop 2.6.0 到 2.7.1 升级上启动 MRAppMaster 时出现 NoClassDefFoundError

转载 作者:可可西里 更新时间:2023-11-01 14:49:05 24 4
gpt4 key购买 nike

将我们的应用程序从 2.6.0 更新到 2.7.1 后,我无法让我们的映射器作业正确运行,作业日志中出现以下内容:

SEVERE: Error starting MRAppMaster
java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.LogManager
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:64)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:285)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:305)
at org.apache.hadoop.security.authentication.util.KerberosName.<clinit>(KerberosName.java:43)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:275)
at org.apache.hadoop.security.UserGroupInformation.setConfiguration(UserGroupInformation.java:311)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.initAndStartAppMaster(MRAppMaster.java:1492)
at org.apache.hadoop.mapreduce.v2.app.MRAppMaster.main(MRAppMaster.java:1448)

我最初认为这是我们作业中的类路径问题,为此我们的库被复制到分布式缓存,然后在每个作业运行之前添加到作业的类路径中。尽管所有库都已就位并在运行作业之前已添加到类路径,但经过一些验证确认。

hadoop classpathyarn classpath 都显示hadoop/share/hadoop 下的所有内容都在类路径上,其中包含 lib (log4j ) 有问题的类属于上面。

我们有点没主意了。正在执行的代码在我们的 2.6.0 分支上运行良好。我们可能缺少什么?

最佳答案

所以这最终成为一个微妙的问题,有问题的类在类路径上提供的,但是当它最初被加载时它被炸毁了,因为它引用了一个空变量,并且随后的异常/堆栈跟踪表明这在 Hadoop 的深处丢失了!

在 Hadoop 2.7.x 中,ContainerLogAppender 获得了设置 ContainerLogFile 的能力。不幸的是,如果 log4j.appender.CLA.containerLogFile=${hadoop.root.logfile}log4j.appender.CRLA.containerLogFile=${hadoop.root.logfile}未在 hadoop/etc/hadoop/container-log4j.properties 中设置,然后这与 NPE 一起爆炸。以前它默认为“syslog”,现在它没有默认值,并且很乐意让你自己挖个坑。因此,当类在被类加载器加载时崩溃时,它们实际上被删除了,因此为什么进一步向下作业报告 NoClassDefFoundError 而不是 ClassNotFoundException

关于java - 在 Hadoop 2.6.0 到 2.7.1 升级上启动 MRAppMaster 时出现 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com