将应用程序从2.6.0更新到2.7.1时,我一直无法使我们的映射器作业正常运行,并且出现在作业日志中的内容如下:在Hadoop 2.6.0上启动MRAppMaster到2.7.1升级时出现NoClassDefFoundError
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)
我最初以为这是专门在我们的工作中一个classpath的问题,为此我们的库复制到分布式缓存,然后添加到作业的各任务正在运行之前的类路径。虽然所有的库都已经存在,并且在作业运行之前添加到类路径中,但验证也证实了一点。
两个hadoop classpath
和yarn classpath
揭示hadoop/share/hadoop
下的一切是在类路径,其中包含的lib(log4j的)所讨论的类属的上方。
我们有些出于想法。正在执行的代码在我们的2.6.0分支上工作得很好。我们可能会错过什么?
您是否找到了解决问题的方法?我有完全相同的问题,至今没有运气 – cheseaux
是@cheseaux !!!我会记录一个答案,但是偶然,你是否升级而不编辑/更新你的'hadoop/etc/hadoop/container-log4j.properties'文件? – James