Ubuntu 16.04下Hive 2.3.2无法启动,关联Hadoop 2.7.1报错求助
解决Hive 2.3.2启动时的java.lang.NoSuchMethodError(ICU4J版本冲突)
我之前在Ubuntu 16.04搭配Hive 2.3.2和Hadoop 2.7.1的环境里,碰到过完全一样的错误!这其实是ICU4J版本冲突搞出来的问题——Hadoop 2.7.1自带的旧版icu4j(通常是50.1.1版本)和Hive 2.3.2依赖的新版icu4j(一般是58.2版本)不兼容,导致JVM加载类时找不到com.ibm.icu.impl.ICUBinary.getRequiredData这个方法。
下面是亲测有效的解决步骤:
步骤1:确认冲突的icu4j包位置
先分别找到Hadoop和Hive目录下的icu4j文件:
- 查看Hadoop的lib目录:
你会看到类似ls $HADOOP_HOME/lib/icu4j*icu4j-50.1.1.jar的文件 - 查看Hive的lib目录:
应该会看到更高版本的,比如ls $HIVE_HOME/lib/icu4j*icu4j-58.2.jar
步骤2:解决版本冲突(两种方案选其一)
方案一:统一替换为Hive的新版icu4j
把Hadoop里的旧版删除,拷贝Hive的新版过去:
# 删除Hadoop中的旧版icu4j rm $HADOOP_HOME/lib/icu4j-50.1.1.jar # 拷贝Hive中的新版到Hadoop lib目录 cp $HIVE_HOME/lib/icu4j-58.2.jar $HADOOP_HOME/lib/
注意:替换前可以先备份旧包,避免出问题能回滚
方案二:让Hive优先加载自己的icu4j包
如果不想改动Hadoop的依赖包,可以修改Hive的启动脚本,强制让它优先加载自己的icu4j:
- 编辑Hive的启动脚本:
vi $HIVE_HOME/bin/hive - 在脚本开头的环境变量设置部分,添加一行:
export HIVE_CLASSPATH=$HIVE_HOME/lib/icu4j-58.2.jar:$HIVE_CLASSPATH - 保存退出后,重新启动Hive即可
步骤3:验证修复效果
直接在终端输入hive命令,看是否能正常进入Hive的交互界面,不再抛出那个NoSuchMethodError错误。
内容的提问来源于stack exchange,提问作者user188927
相关产品推荐
相关产品推荐

