启动Hive和Hadoop的兼容性问题:java.lang.VerifyError: class org.apache.log4j.bridge.LogEventAdapter overrides

问题描述

我的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测试成功

在这里插入图片描述

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值