Apache Hive 3.1.2配置Tez后启动Hive CLI失败求助
问题分析与解决方案
错误原因
org.apache.hadoop.fs.BatchListingOperations 类是Hadoop 3.2.0及以上版本才引入的API,你当前使用的Hadoop 3.1.1并不包含这个类。出现该错误的核心原因是:配置的Tez版本与Hadoop 3.1.1不兼容,Tez依赖的jar包中引用了高版本Hadoop的API,导致类加载失败。
解决方案
1. 匹配Tez与Hadoop的兼容版本
选择明确支持Hadoop 3.1.1的Tez版本,推荐使用 Tez 0.9.2(官方明确兼容Hadoop 3.1.x系列),避免使用Tez 0.10.0及以上版本(这类版本依赖Hadoop 3.2+的API)。
2. 替换Tez中的冲突Hadoop依赖jar
下载对应兼容版本的Tez包后,检查tez-xxx/lib目录下的Hadoop相关jar(如hadoop-common.jar、hadoop-hdfs.jar等),确保这些jar的版本与集群的Hadoop 3.1.1完全一致:
- 如果Tez包自带了高版本的Hadoop jar,将其删除,替换为你集群Hadoop安装目录
$HADOOP_HOME/share/hadoop/common和$HADOOP_HOME/share/hadoop/hdfs下的对应jar。
3. 重新上传Tez到HDFS并修正配置
- 删除HDFS上原有的
/user/tez/目录:hdfs dfs -rm -r /user/tez/ - 将替换完依赖的Tez包解压后,上传到HDFS:
hdfs dfs -put /path/to/your/tez-0.9.2 /user/tez/ - 检查
hive-site.xml中的Tez配置,确保tez.lib.uris指向正确路径:<property> <name>tez.lib.uris</name> <value>${fs.defaultFS}/user/tez/tez-0.9.2,${fs.defaultFS}/user/tez/tez-0.9.2/lib</value> </property>
4. 清理本地缓存并重启服务
- 删除Hadoop和Hive的本地临时缓存:
rm -rf /tmp/hadoop-* rm -rf /tmp/hive-* - 重启Hive服务,重新启动Hive CLI测试。
内容的提问来源于stack exchange,提问作者Kaher
相关产品推荐
相关产品推荐

