Windows 10环境下Hive 3.1.2安装与运行故障排查求助
Hive 3.1.2 + Hadoop 3.2.2 在Windows 10上的安装问题排查与解决
我之前在Windows环境下部署Hive时踩过不少类似的坑,结合你的问题场景,给你梳理下针对性的解决办法:
初始问题回顾
你在Windows 10上搭配Hadoop 3.2.2安装Hive 3.1.2,Hadoop服务能正常启动,但启动Hive Shell有一堆警告,执行show databases;报错,后续修复路径变量后又出现HDFS相关的方法不存在错误。
1. 启动Hive Shell的警告与元数据库初始化失败
警告分析与处理
- SLF4J绑定冲突:这是Hadoop和Hive依赖的日志实现jar包冲突导致的。你可以直接删除Hadoop目录下的
C:\my_programs\hadoop-3.2.2\share\hadoop\common\lib\slf4j-log4j12-1.7.25.jar,保留Hive自带的log4j-slf4j-impl-2.10.0.jar就能解决这个警告。 hive.server2.enable.impersonation不存在警告:在Hive的conf/hive-site.xml里添加这个配置项即可消除警告,复制这段内容进去:<property> <name>hive.server2.enable.impersonation</name> <value>true</value> </property>- Hive-on-MR弃用提示:这只是官方的 deprecation 提示,暂时不想切换执行引擎的话可以忽略;如果要解决,后续可以尝试配置Spark作为执行引擎(Windows上Tez支持不太友好)。
元数据库初始化失败(SessionHiveMetaStoreClient无法实例化)
Windows下执行schematool要注意用.cmd后缀的脚本,步骤如下:
- 先确保Hadoop集群已经启动(运行
start-dfs.cmd和start-yarn.cmd) - 打开PowerShell,进入Hive的bin目录:
cd C:\my_programs\hive_3.1.2\bin - 执行初始化命令:
.\schematool.cmd -dbType derby -initSchema
另外,要确保hive-site.xml里有Derby的基础配置,不然初始化也会出问题,把这段配置加到文件里:
<configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> </property> </configuration>
2. 更新后出现的NoSuchMethodError错误
这个错误是Hive 3.1.2和Hadoop 3.2.2的API不兼容导致的,Hive 3.1.2对Hadoop的版本要求更高(官方推荐3.3.x及以上),给你两个解决思路:
方案一:升级Hadoop版本
卸载当前的Hadoop 3.2.2,安装Hadoop 3.3.1或更高版本,版本匹配后这个API冲突问题就会消失,这是最稳妥的办法。
方案二:替换Hive中的Hadoop依赖jar
如果不想升级Hadoop,可以手动把Hadoop 3.2.2目录下的核心jar包(比如hadoop-common-3.2.2.jar、hadoop-hdfs-3.2.2.jar、hadoop-client-3.2.2.jar)复制到Hive的lib目录下,替换掉Hive自带的旧版本Hadoop jar包。
额外检查Hadoop配置
确保Hadoop的两个核心配置文件正确:
- core-site.xml:配置HDFS的默认地址
<property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> - hdfs-site.xml:单机环境下设置副本数为1
<property> <name>dfs.replication</name> <value>1</value> </property>
配置完记得重启Hadoop服务。
内容的提问来源于stack exchange,提问作者Nguyễn Hải Dương




