问题描述
我的Hadoop版本是3.4.2,Hive版本是4.0.1。现在是2025年10月26日,都是最新的版本。
启动Hive后,提交SQL语句,在尝试启动Mapred任务时会报错:
java.lang.VerifyError: class org.apache.log4j.bridge.LogEventAdapter overrides final method getProperty.(Ljava/lang/String;)Ljava/lang/String;
2025-10-26 16:24:37,703 ERROR [main] org.apache.hadoop.mapreduce.v2.app.MRAppMaster: Error starting MRAppMaster java.lang.VerifyError: class org.apache.log4j.bridge.LogEventAdapter overrides final method getProperty.(Ljava/lang/String;)Ljava/lang/String; at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:756) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:473) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:362) at java.lang.ClassLoader.loadClass(ClassLoader.java:418) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at java.lang.ClassLoader.loadClass(ClassLoader.java:351) at org.apache.log4j.builders.BuilderManager.<clinit>(BuilderManager.java:58)
java.lang.VerifyError: class org.apache.log4j.bridge.LogEventAdapter overrides final method getTimeStamp.()J
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
at org.apache.log4j.builders.BuilderManager.<clinit>(BuilderManager.java:58)
at org.apache.log4j.config.Log4j1Configuration.<init>(Log4j1Configuration.java:46)
at org.apache.log4j.config.PropertiesConfiguration.<init>(PropertiesConfiguration.java:90)
at org.apache.log4j.config.PropertiesConfigurationFactory.getConfiguration(PropertiesConfigurationFactory.java:58)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:499)
at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:404)
at org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:318)
解决方案
实际上是log4j jar包冲突。我的解决方法是在 Hadoop 环境中禁用 log4j-1.2-api 桥接包
在每台节点执行:
cd /usr/local/hive/lib/ # hive安装路径
sudo mv log4j-1.2-api-*.jar ~/backup_log4j_conflict/ # 临时存一下
sudo mv log4j-slf4j-impl-*.jar ~/backup_log4j_conflict/
(Hive 启动依旧正常,因为它会 fallback 到 log4j-core)
然后重启yarn和hive server2
再次运行SQL测试成功


1393





