本文详细介绍了在Windows 11系统上使用DBeaver连接WSL2中Hive服务的完整配置过程。主要内容包括:
- 准备工作
- 确保WSL2中已安装并配置好Hadoop和Hive环境
- 检查Hive元数据库类型(MySQL)和服务状态
- 网络配置
- 获取WSL2的IP地址(172.18.230.242)
- 推荐开启WSL2镜像网络模式以便使用localhost访问
- DBeaver连接配置
- 创建Apache Hive连接
- 填写主机IP、端口10000
- 用户名设置为WSL2用户名(mumu)
- 处理JDBC驱动兼容性问题
- 常见问题解决
- 代理用户权限问题:配置core-site.xml和hive-site.xml
- 服务启动顺序:先Hadoop后HiveServer2
- 连接失败排查:日志检查、网络测试
最终通过配置Hadoop代理用户和关闭Hive模拟功能,成功建立连接。
文章提供了完整的错误解决流程和验证方法,适合作为Hive学习环境搭建的参考指南。
Win11,配置DBeaver连接WSL2中的Hive,都是本地环境,学习使用
要在 Windows 11 上用 DBeaver 连接 WSL2 里的 Hive,核心挑战在于 WSL2 默认的网络隔离,以及 Hive 服务本身的配置。下面是一份一步步的配置指南,跟着操作就能搞定。
📝 准备工作:确保 Hive 服务就绪
首先需要确保 WSL2 Ubuntu 里的 Hive 服务已经正确安装并启动。
-
安装 Hadoop 与 Hive :在 WSL2 中下载并解压 Hadoop 和 Hive,并配置好
JAVA_HOME、HADOOP_HOME、HIVE_HOME等环境变量。 -
配置 Hive:
-
核心配置在
$HIVE_HOME/conf/hive-site.xml文件中。 -
为了学习方便,可以使用 Derby 作为元数据库。关键配置项如下:
xml
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=/tmp/metastore_db;create=true</value> </property>
-
-
启动 HiveServer2 服务:
DBeaver 通过 JDBC 连接,所以需要在 WSL2 中启动 HiveServer2 服务。在 WSL2 终端中执行:
bash
hive --service metastore & hive --service hiveserver2 &HiveServer2 默认监听端口是
10000。
🔗 核心步骤:打通网络连接
WSL2 默认使用 NAT 网络,在 Windows 宿主机上无法直接用 localhost 访问,需要获取 WSL2 的真实 IP。
-
获取 WSL2 IP 地址:在 Windows 的 PowerShell 或 CMD 中执行以下命令,记下输出的 IP 地址:
powershell
wsl -- hostname -I输出示例:
172.30.98.229。这个地址就是稍后 DBeaver 要填的"主机名/地址"。
更优方案(推荐) :如果想一劳永逸,可以开启 WSL2 的镜像网络模式 。这样 WSL2 会和 Windows 共享网络,你就可以直接用
localhost访问了。具体方法是编辑用户目录下的.wslconfig文件,添加networkingMode=mirrored并重启 WSL。这种方式对学习环境更友好。
⚙️ 配置 DBeaver 连接
-
新建连接 :在 DBeaver 中点击"新建数据库连接",选择 Apache Hive。
-
填写连接信息:
-
主机/地址 :填入上一步获取的 WSL2 IP 地址(如
172.30.98.229)。如果开启了镜像网络模式,直接填localhost或127.0.0.1即可。 -
端口 :默认是
10000。 -
用户名/密码 :如果未设置,随便填一个(如
hive)即可。
-
-
配置 JDBC 驱动:DBeaver 通常会自动下载驱动。如果遇到问题,可以在"编辑驱动"的"库"选项卡中,手动下载并添加 Hive JDBC 驱动 jar 包。
🔧 常见问题排查
如果连接失败,可以按以下思路检查:
-
驱动版本不匹配 :确保 DBeaver 使用的 Hive JDBC 驱动版本与 WSL2 中安装的 Hive 版本兼容(例如 Hive 3.x 需要用对应的驱动)。版本不一致可能导致
Required field 'client_protocol' is unset等错误。 -
服务未启动:确认 WSL2 中的 HiveServer2 和 Metastore 服务确实在运行,并且没有报错退出。
-
防火墙阻挡:检查 Windows 防火墙,特别是开启了镜像网络模式后,可能需要配置 Hyper-V 防火墙规则以允许入站连接。
为了学习方便,可以使用 Derby 作为元数据库。之前有别的操作,可以先查一下元数据库用的哪个吗
当然可以!在 WSL2 的 Ubuntu 环境中,你可以通过以下 3 种方法快速检查 Hive 当前使用的元数据库类型。
方法一:直接查看 hive-site.xml(最直接)
Hive 的元数据库配置写在这个文件里,用 grep 命令过滤一下就知道了:
bash
bash
grep -A 1 "javax.jdo.option.ConnectionURL" $HIVE_HOME/conf/hive-site.xml
-
如果看到
jdbc:derby:...→ 当前使用的是 Derby -
如果看到
jdbc:mysql://...或jdbc:postgresql://...→ 当前使用的是 MySQL/PostgreSQL 等外部数据库 -
如果没有任何输出 → 使用的是 Hive 默认的 Derby(因为没显式配置)
注意 :如果你没有设置
$HIVE_HOME环境变量,可以直接用find命令搜索:bash
find ~ -name "hive-site.xml" 2>/dev/null
方法二:检查是否有 Derby 文件残留
Derby 作为嵌入式数据库,会在本地生成文件。执行以下命令查看:
bash
ls -la ~/metastore_db/ # 默认路径
# 或者
ls -la /tmp/metastore_db/
-
如果看到
metastore_db文件夹存在且有log、seg0等文件,说明之前用过 Derby(但不一定表示当前正在使用,因为可能你后来改过配置)。 -
这个方法能快速判断是否有"历史痕迹"。
方法三:直接查看 Hive 启动日志(如果是运行状态)
如果 HiveServer2 或 Metastore 正在运行,启动日志里会打印数据库连接信息:
bash
# 查看 Metastore 服务日志(如果有)
ps aux | grep metastore
# 然后查看对应进程的启动参数或日志输出
# 或者直接查看 hive 命令行启动时的输出
hive -e "show databases;" 2>&1 | grep -i "jdbc"
运行一个简单查询时,控制台输出里经常会出现类似 Using dialect: org.apache.hadoop.hive.rdbms.derby.DerbyDialect 或 Connection URL: jdbc:derby: 的字样。
🚨 一个常见的"坑"(请留意)
如果 hive-site.xml 里 没有配置 javax.jdo.option.ConnectionURL,Hive 会默认使用 Derby。
但最关键的一点是 :Derby 默认的数据库文件路径是 ./metastore_db(即启动命令所在的当前目录)。这意味着:
-
如果你在
/home/user/目录下启动hive命令行,元数据保存在/home/user/metastore_db/ -
如果你在
/tmp/目录下启动,元数据又跑到/tmp/metastore_db/ -
这会导致:之前建的表、分区信息,换了个目录启动 Hive 后就"消失"了(实际上没消失,只是 Derby 找不到原来的数据文件了)
所以,如果你发现 Hive 里的表时有时无,很可能就是因为这个原因。
✅ 快速总结
| 你想要的信息 | 该用什么命令 |
|---|---|
| 当前 Hive 配置的元数据库类型 | grep "ConnectionURL" $HIVE_HOME/conf/hive-site.xml |
| 是否用过 Derby(历史痕迹) | ls -la ~/metastore_db/ 或 ls -la /tmp/metastore_db/ |
| 当前服务实际用的数据库 | 查看 HiveServer2 启动日志,或执行 `hive -e "show databases;" 2>&1 |
查完如果确认是 Derby,但你又想改成 MySQL 方便多客户端连接,或者需要清理历史数据重新开始,都可以告诉我,我可以给你具体的操作步骤。先看看结果是什么吧 😄
bash
mumu@MuJinqiu:~$ grep -A 1 "javax.jdo.option.ConnectionURL" $HIVE_HOME/conf/hive-site.xml <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=UTC</value> mumu@MuJinqiu:~$
好的,从输出结果可以明确看出:
你的 Hive 当前使用的是 MySQL 作为元数据库,而不是 Derby。
text
jdbc:mysql://localhost:3306/metastore
这意味着:
-
元数据存储在本地 MySQL 的
metastore数据库中 -
MySQL 服务运行在 WSL2 的
localhost:3306端口 -
你的 Hive 配置已经比较规范了,适合学习使用
🔍 接下来可以确认几件事
既然元数据库是 MySQL,建议检查一下 MySQL 服务是否正常运行,因为 Hive 依赖它来存储元数据:
bash
bash
# 1. 检查 MySQL 服务状态
sudo systemctl status mysql
# 或者(如果用的是 MariaDB)
sudo systemctl status mariadb
# 2. 如果服务没运行,启动它
sudo systemctl start mysql
# 3. 测试能否连接 MySQL
mysql -u root -p
# 如果能进入 MySQL 命令行,说明服务正常
📌 关于你之前的操作
既然元数据库是 MySQL,说明你(或安装脚本)之前已经配置过外部数据库,不是默认的 Derby。这对学习来说其实是更好的选择,因为:
-
✅ 多个客户端可以同时连接(Derby 只支持单用户)
-
✅ 数据持久化更稳定
-
✅ 可以直观地查看元数据表结构(对学习 Hive 内部原理有帮助)
🚀 下一步:连接 DBeaver
你现在可以直接按照我之前说的步骤连接 DBeaver 了。需要注意:
-
获取 WSL2 IP 地址(因为 WSL2 默认是 NAT 模式):
powershell
# 在 Windows PowerShell 中执行 wsl -- hostname -I -
在 DBeaver 中填写:
-
主机:填上一步获取的 IP(如
172.30.98.229) -
端口:
10000(HiveServer2 默认端口) -
用户名/密码:随便填(如
hive/hive)
-
-
如果连不上,先确认 HiveServer2 服务在 WSL2 中已经启动:
bash
# 检查端口是否在监听 netstat -tlnp | grep 10000 # 如果没有输出,启动服务 hive --service metastore & hive --service hiveserver2 &
需要我帮你看一下 HiveServer2 是否已经启动了吗?或者可以直接试试连接 DBeaver,遇到什么报错随时发给我。
bash
mumu@MuJinqiu:~$ sudo systemctl status mysql [sudo] password for mumu: ● mysql.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled) Active: active (running) since Fri 2026-06-19 01:46:30 CST; 3 days ago Main PID: 239 (mysqld) Status: "Server is operational" Tasks: 46 (limit: 14999) Memory: 403.8M (peak: 447.3M) CPU: 7min 51.592s CGroup: /system.slice/mysql.service └─239 /usr/sbin/mysqld Notice: journal has been rotated since unit was started, output may be incomplete. mumu@MuJinqiu:~$
很好!MySQL 服务运行正常,状态是 active (running),已经跑了 3 天,没问题。
现在需要确认 HiveServer2 服务是否已启动,因为 DBeaver 是通过这个服务连接的。
🔍 检查 HiveServer2 状态
在 WSL2 中执行:
bash
bash
# 1. 检查 10000 端口是否在监听(HiveServer2 默认端口)
netstat -tlnp | grep 10000
如果输出类似这样,说明 HiveServer2 已启动:
text
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 12345/java
如果没有任何输出,说明 HiveServer2 还没启动,需要手动启动:
bash
bash
# 先启动 Metastore(元数据服务)
nohup hive --service metastore > /tmp/metastore.log 2>&1 &
# 再启动 HiveServer2
nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 &
# 等待几秒后再次检查端口
netstat -tlnp | grep 10000
📝 启动说明
-
nohup ... &让服务在后台运行,即使关闭终端也不会停止 -
日志会输出到
/tmp/metastore.log和/tmp/hiveserver2.log,如果启动失败可以查看这两个文件排查问题 -
第一次启动可能需要几秒钟时间初始化
执行完上面的命令后,告诉我:
-
netstat -tlnp | grep 10000的输出结果 -
如果启动失败,把
/tmp/hiveserver2.log的最后几行发给我
这样我就能帮你判断下一步该怎么做了 👍
bash
mumu@MuJinqiu:~$ # 1. 检查 10000 端口是否在监听(HiveServer2 默认端口) netstat -tlnp | grep 10000 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) mumu@MuJinqiu:~$
这个输出说明 10000 端口目前没有服务在监听(因为没有输出结果),也就是说 HiveServer2 还没有启动。
(Not all processes could be identified...) 只是一条提示信息,不影响判断。
🚀 现在启动 HiveServer2
在 WSL2 中依次执行以下命令:
bash
bash
# 1. 先启动 Metastore 服务
nohup hive --service metastore > /tmp/metastore.log 2>&1 &
# 2. 再启动 HiveServer2 服务
nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 &
# 3. 等待 5-10 秒,然后再次检查端口
sleep 5
netstat -tlnp | grep 10000
📋 如果启动失败
如果上面执行后 netstat 仍然没有输出,可能是启动过程中遇到了错误。查看日志:
bash
# 查看 HiveServer2 启动日志的最后 30 行
tail -30 /tmp/hiveserver2.log
把日志输出发给我,我帮你分析具体原因。常见问题包括:
-
MySQL 连接问题(用户名/密码不对)
-
Hadoop 服务未启动(Hive 依赖 HDFS)
-
端口被占用
-
JDBC 驱动缺失
另外顺便确认一下:你的 WSL2 里 Hadoop 是否已经启动?因为 Hive 依赖 HDFS。可以执行:
bash
jps
这个命令会显示 Java 进程,如果看到 NameNode、DataNode 等进程,说明 Hadoop 在运行。如果没有任何输出,需要先启动 Hadoop。
执行完告诉我结果,我们一步步来 👍
bash
mumu@MuJinqiu:~$ # 1. 先启动 Metastore 服务 nohup hive --service metastore > /tmp/metastore.log 2>&1 & # 2. 再启动 HiveServer2 服务 nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 & # 3. 等待 5-10 秒,然后再次检查端口 sleep 5 netstat -tlnp | grep 10000 [1] 23839 [2] 23840 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) mumu@MuJinqiu:~$
看起来服务启动命令执行了,但 netstat 仍然没有显示 10000 端口在监听。说明 HiveServer2 可能启动失败了。
让我们查看日志来找出具体原因:
📋 查看启动日志
bash
# 查看 HiveServer2 日志的最后 50 行
tail -50 /tmp/hiveserver2.log
把这个命令的输出发给我,我帮你分析具体是什么问题。
🔍 同时检查 Hadoop 是否在运行
因为 Hive 依赖 Hadoop(HDFS 和 YARN),如果 Hadoop 没启动,HiveServer2 也会启动失败:
bash
# 查看 Java 进程
jps
如果输出类似这样,说明 Hadoop 正在运行:
text
12345 NameNode
12346 DataNode
12347 SecondaryNameNode
12348 ResourceManager
12349 NodeManager
如果输出为空或只有 jps 自己,说明 Hadoop 没有启动,需要先启动 Hadoop。
📌 快速诊断:两个命令一起执行
你可以同时执行这两个命令,把输出都发给我:
bash
echo "=== HiveServer2 日志 ===" && tail -50 /tmp/hiveserver2.log && echo "" && echo "=== Java 进程 ===" && jps
这样我就能快速判断是:
-
Hadoop 没启动
-
MySQL 连接配置有问题(用户名/密码错误)
-
其他配置问题
把结果贴过来,我们接着解决 👍
HiveServer2好像没有安装
哦!这就说得通了 ------ HiveServer2 没有安装,所以你之前一直在尝试启动一个不存在的服务。
🔍 先确认一下 Hive 的安装情况
在 WSL2 中执行以下命令,看看你装的是什么版本的 Hive,以及都装了哪些组件:
bash
bash
# 1. 查看 Hive 版本
hive --version
# 2. 查看 Hive 安装目录下有哪些服务脚本
ls -la $HIVE_HOME/bin/ | grep -E "hive|metastore|hiveserver"
📦 如果确实没有 HiveServer2
HiveServer2 是 Hive 的一个组件,通常在完整安装时就会包含。如果你的安装不完整,可能需要:
方案一:检查是否只是 PATH 问题
有时候 hive --service hiveserver2 命令存在,但因为缺少依赖或配置问题启动不了。试试:
bash
# 直接运行 hiveserver2 脚本(不通过 hive --service)
$HIVE_HOME/bin/hiveserver2
方案二:重新安装或补充安装 Hive
如果你是通过 apt 安装的,可能只装了核心包。试试:
bash
# 查看可用的 Hive 相关包
apt-cache search hive | grep -i hive
# 如果是手动解压安装的,可能需要重新下载完整包
🤔 另一个可能性
也有可能你是用 Spark SQL 或 Presto 来查询 Hive 表,而不是直接使用 HiveServer2。如果是这种情况,连接方式会不一样。
先执行上面的命令,把输出发给我,我看看你的 Hive 到底是什么情况,然后给你最合适的解决方案:
bash
echo "=== Hive 版本 ===" && hive --version && echo "" && echo "=== bin 目录内容 ===" && ls -la $HIVE_HOME/bin/ | head -20
把结果贴过来,我们接着分析 👍
bash
mumu@MuJinqiu:~$ # 1. 查看 Hive 版本 hive --version # 2. 查看 Hive 安装目录下有哪些服务脚本 ls -la $HIVE_HOME/bin/ | grep -E "hive|metastore|hiveserver" SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Hive 3.1.3 Git git://MacBook-Pro.fios-router.home/Users/ngangam/commit/hive -r 4df4d75bf1e16fe0af75aad0b4179c34c07fc975 Compiled by ngangam on Sun Apr 3 16:58:16 EDT 2022 From source with checksum 5da234766db5dfbe3e92926c9bbab2af -rwxr-xr-x 1 mumu mumu 10158 Mar 29 2022 hive -rwxr-xr-x 1 mumu mumu 2085 Feb 28 2022 hive-config.sh -rwxr-xr-x 1 mumu mumu 885 Oct 24 2019 hiveserver2 -rwxr-xr-x 1 mumu mumu 3064 Oct 24 2019 init-hive-dfs.sh mumu@MuJinqiu:~$
好的!从输出看,Hive 3.1.3 已经安装 ,而且 hiveserver2 脚本也存在(在 $HIVE_HOME/bin/ 目录下)。
但启动时没有监听 10000 端口,说明 HiveServer2 启动失败了。我们需要查看具体错误原因。
🔍 查看启动失败的原因
刚才启动 HiveServer2 时,错误日志写到了 /tmp/hiveserver2.log。执行:
bash
tail -100 /tmp/hiveserver2.log
把输出发给我,我帮你分析具体是什么问题。
🤔 如果日志文件不存在或为空
可能日志写到了其他位置,试试:
bash
# 查找日志文件
find ~ -name "*.log" 2>/dev/null | grep -i hive
# 或者直接在前台启动,看看报错信息(不用 nohup)
$HIVE_HOME/bin/hiveserver2
前台启动会直接把错误打印在终端上,方便我们定位问题。
📋 顺带检查 Hadoop 状态
Hive 依赖 Hadoop,如果 Hadoop 没启动,HiveServer2 也起不来:
bash
jps
把这三个命令的输出一起发给我:
-
tail -100 /tmp/hiveserver2.log -
jps -
(如果上面没有日志)前台启动
$HIVE_HOME/bin/hiveserver2的报错
这样我就能快速定位问题根源了 👍
bash
mumu@MuJinqiu:~$ tail -100 /tmp/hiveserver2.log nohup: ignoring input 2026-06-22 12:29:19: Starting HiveServer2 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Hive Session ID = e411f109-c016-46a0-8110-fec8ea8cd846 2026-06-22 12:29:22,515 INFO [main] DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored 2026-06-22 12:29:23,069 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,069 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,122 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored Hive Session ID = cc9b016a-3868-4372-b6d0-47f5786d4af3 mumu@MuJinqiu:~$
日志看起来 HiveServer2 启动过程中没有报错中断,但又没监听 10000 端口。这可能意味着:
-
日志不完整(只记录了启动初期的信息,没有后续)
-
启动过程中卡住了(比如在等待某些资源)
-
进程已经退出了(后面的错误没记录到日志)
让我们进一步诊断:
🔍 检查进程状态
bash
# 1. 查看 HiveServer2 进程是否存在
ps aux | grep -i hiveserver2 | grep -v grep
# 2. 查看所有 Hive 相关 Java 进程
jps | grep -i hive
📋 查看前台启动的实时输出
日志可能没把错误写完整,试试前台启动,看实时输出:
bash
# 先停掉之前后台启动的进程(如果有)
pkill -f hiveserver2
# 前台启动,观察输出(会占用终端,按 Ctrl+C 可停止)
$HIVE_HOME/bin/hiveserver2
把前台启动时终端输出的最后 30-50 行发给我 ,特别是出现 ERROR 或 Exception 的地方。
🐛 常见原因排查
从你的日志看,WARN 信息都是关于 DataNucleus 元数据的,这些通常不影响启动。可能的问题是:
-
Hadoop 没启动(最可能)
-
MySQL 连接认证失败(Hive 元数据库)
-
端口 10000 被占用
先执行这个快速检查:
bash
echo "=== Hadoop 进程 ===" && jps && echo "" && echo "=== 端口 10000 ===" && sudo netstat -tlnp | grep 10000
把输出发给我,我们一步步定位问题 👍
bash
mumu@MuJinqiu:~$ # 1. 查看 HiveServer2 进程是否存在 ps aux | grep -i hiveserver2 | grep -v grep # 2. 查看所有 Hive 相关 Java 进程 jps | grep -i hive mumu 23840 7.5 2.4 2036592 393420 pts/8 Sl 12:29 0:12 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dproc_jar -Dproc_hiveserver2 -Dlog4j2.formatMsgNoLookups=true -Dlog4j.configurationFile=hive-log4j2.properties -Djava.util.logging.config.file=/usr/local/hive/conf/parquet-logging.properties -Djline.terminal=jline.UnsupportedTerminal -Dyarn.log.dir=/usr/local/hadoop/logs -Dyarn.log.file=hadoop.log -Dyarn.home.dir=/usr/local/hadoop -Dyarn.root.logger=INFO,console -Djava.library.path=/usr/local/hadoop/lib/native -Xmx256m -Dhadoop.log.dir=/usr/local/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/local/hadoop -Dhadoop.id.str=mumu -Dhadoop.root.logger=INFO,console -Dhadoop.policy.file=hadoop-policy.xml -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /usr/local/hive/lib/hive-service-3.1.3.jar org.apache.hive.service.server.HiveServer2 mumu@MuJinqiu:~$
很好!HiveServer2 进程确实在运行(进程 23840),而且已经运行了 12 秒,占用 CPU 7.5%。
但端口 10000 没有监听,这说明 HiveServer2 还在初始化过程中,可能卡住了。让我们看看它到底在干什么:
🔍 查看实时日志
HiveServer2 的日志可能写到了其他位置(不一定在 /tmp/hiveserver2.log)。执行:
bash
# 1. 查找 HiveServer2 的日志文件
find /tmp -name "*.log" 2>/dev/null | xargs ls -lt 2>/dev/null | head -10
# 2. 查看进程的标准输出(如果启动时用 nohup,输出应该重定向了)
ls -la /tmp/hive*.log
# 3. 查看详细的 HiveServer2 日志(可能在 Hive 安装目录下)
find $HIVE_HOME -name "*.log" 2>/dev/null | xargs ls -lt 2>/dev/null | head -10
📋 检查 HiveServer2 是否卡在某个步骤
HiveServer2 启动时通常会等待 Metastore 连接。可以检查日志:
bash
# 查看所有 Hive 相关日志的最新内容
tail -50 /tmp/metastore.log 2>/dev/null
tail -50 /tmp/hiveserver2.log 2>/dev/null
🚨 重点检查:Hadoop 是否启动
你的日志显示 HiveServer2 在用 Java 启动,但它需要连接到 HDFS。检查 Hadoop:
bash
jps
如果输出里没有 NameNode、DataNode 等进程,说明 Hadoop 没启动,HiveServer2 会卡在连接 HDFS 的步骤上。
✅ 最快解决方案
如果 Hadoop 没有启动,先启动 Hadoop:
bash
# 进入 Hadoop 安装目录启动
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
# 检查是否启动成功
jps
如果 Hadoop 已经启动,HiveServer2 还在卡着,可以尝试重启 HiveServer2:
bash
# 杀掉当前进程
pkill -f hiveserver2
# 重新启动(这次前台运行,看实时输出)
$HIVE_HOME/bin/hiveserver2
把下面三个命令的输出发给我:
-
jps(看 Hadoop 是否在运行) -
tail -30 /tmp/metastore.log(看 Metastore 日志) -
如果前台启动 hiveserver2,最后 20 行输出
这样我就能准确判断问题在哪里了 👍
bash
mumu@MuJinqiu:~$ # 1. 查找 HiveServer2 的日志文件 find /tmp -name "*.log" 2>/dev/null | xargs ls -lt 2>/dev/null | head -10 # 2. 查看进程的标准输出(如果启动时用 nohup,输出应该重定向了) ls -la /tmp/hive*.log # 3. 查看详细的 HiveServer2 日志(可能在 Hive 安装目录下) find $HIVE_HOME -name "*.log" 2>/dev/null | xargs ls -lt 2>/dev/null | head -10 -rw-r--r-- 1 mumu mumu 66154 Jun 22 12:32 /tmp/mumu/hive.log -rw-r--r-- 1 mumu mumu 2228 Jun 22 12:29 /tmp/hiveserver2.log -rw-r--r-- 1 mumu mumu 554 Jun 22 12:29 /tmp/metastore.log -rw-r--r-- 1 mumu mumu 2228 Jun 22 12:29 /tmp/hiveserver2.log -rw-r--r-- 1 mumu mumu 219 Oct 24 2019 /usr/local/hive/examples/files/apache.access.2.log -rw-r--r-- 1 mumu mumu 86 Oct 24 2019 /usr/local/hive/examples/files/apache.access.log mumu@MuJinqiu:~$ mumu@MuJinqiu:~$ # 查看所有 Hive 相关日志的最新内容 tail -50 /tmp/metastore.log 2>/dev/null tail -50 /tmp/hiveserver2.log 2>/dev/null nohup: ignoring input 2026-06-22 12:29:19: Starting Hive Metastore Server SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] nohup: ignoring input 2026-06-22 12:29:19: Starting HiveServer2 SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Hive Session ID = e411f109-c016-46a0-8110-fec8ea8cd846 2026-06-22 12:29:22,515 INFO [main] DataNucleus.Persistence: Property datanucleus.cache.level2 unknown - will be ignored 2026-06-22 12:29:23,069 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,069 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:23,070 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,122 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored 2026-06-22 12:29:24,123 WARN [main] DataNucleus.MetaData: Metadata has jdbc-type of null yet this is not valid. Ignored Hive Session ID = cc9b016a-3868-4372-b6d0-47f5786d4af3 mumu@MuJinqiu:~$ jps 35344 DataNode 23840 RunJar 25973 Jps 36038 NodeManager 35160 NameNode 35625 SecondaryNameNode 35869 ResourceManager 23839 RunJar mumu@MuJinqiu:~$
太好了!Hadoop 已经启动,而且 HiveServer2 进程(RunJar 23840)和 Metastore 进程(RunJar 23839)都在运行。
但关键问题是:HiveServer2 的日志只记录到启动初期的 INFO/WARN,没有后续的启动成功日志,说明 HiveServer2 可能卡住了。
🔍 查看更详细的 Hive 日志
前面发现了一个关键日志文件:/tmp/mumu/hive.log(大小 66KB),这个文件可能包含了更详细的信息:
bash
tail -100 /tmp/mumu/hive.log
把输出发给我,这个日志通常包含 HiveServer2 启动过程中的详细信息。
📋 查看 HiveServer2 是否卡在某个具体步骤
HiveServer2 启动时通常会:
-
✅ 加载配置
-
✅ 连接 Metastore
-
⏳ 初始化 Thrift 服务(可能卡在这里)
-
⏳ 启动 Web UI(端口 10002)
检查一下其他端口:
bash
# 检查 Hive 相关的所有端口
sudo netstat -tlnp | grep -E "10000|10001|10002|9083"
🚨 可能的原因
从你的情况看,最可能的原因是:
-
HiveServer2 启动时连接 MySQL 元数据库失败(日志没显示错误,但可能卡在连接阶段)
-
内存不足(HiveServer2 启动需要较多内存)
-
配置文件问题(hive-site.xml 中某些配置导致初始化死锁)
✅ 快速诊断:前台启动并查看完整日志
先杀掉当前进程,然后前台启动,这样能看到所有实时输出:
bash
# 1. 杀掉当前的 HiveServer2
pkill -f "RunJar.*hive-service"
# 2. 前台启动 HiveServer2(输出会直接显示在终端)
$HIVE_HOME/bin/hiveserver2
把前台启动时完整的输出(特别是最后 30 行)发给我,这样我就能看到卡在哪里了。
如果前台启动后一直没输出,耐心等待 30 秒,然后按 Ctrl+C 终止,把已输出的内容发给我。
先执行 tail -100 /tmp/mumu/hive.log 和前台启动 hiveserver2,把结果发过来,我们继续排查 👍
bash
mumu@MuJinqiu:~$ tail -100 /tmp/mumu/hive.log ************************************************************/ 2026-06-22T12:29:20,980 INFO [main] server.HiveServer2: Starting HiveServer2 2026-06-22T12:29:21,202 INFO [main] SessionState: Hive Session ID = e411f109-c016-46a0-8110-fec8ea8cd846 2026-06-22T12:29:22,129 INFO [main] session.SessionState: Created HDFS directory: /tmp/hive/mumu/e411f109-c016-46a0-8110-fec8ea8cd846 2026-06-22T12:29:22,144 INFO [main] session.SessionState: Created local directory: /tmp/mumu/e411f109-c016-46a0-8110-fec8ea8cd846 2026-06-22T12:29:22,147 INFO [main] session.SessionState: Created HDFS directory: /tmp/hive/mumu/e411f109-c016-46a0-8110-fec8ea8cd846/_tmp_space.db 2026-06-22T12:29:22,169 INFO [main] sqlstd.SQLStdHiveAccessController: Created SQLStdHiveAccessController for session context : HiveAuthzSessionContext [sessionString=e411f109-c016-46a0-8110-fec8ea8cd846, clientType=HIVESERVER2] 2026-06-22T12:29:22,171 WARN [main] session.SessionState: METASTORE_FILTER_HOOK will be ignored, since hive.security.authorization.manager is set to instance of HiveAuthorizerFactory. 2026-06-22T12:29:22,386 INFO [main] metastore.HiveMetaStore: 0: Opening raw store with implementation class:org.apache.hadoop.hive.metastore.ObjectStore 2026-06-22T12:29:22,412 WARN [main] metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored 2026-06-22T12:29:22,419 INFO [main] metastore.ObjectStore: ObjectStore, initialize called 2026-06-22T12:29:22,419 INFO [main] conf.MetastoreConf: Foun2026-06-22T12:29:23,332 INFO [main] metastore.HiveMetaStore: Added admin role in metastore 2026-06-22T12:29:23,334 INFO [main] metastore.HiveMetaStore: Added public role in metastore 2026-06-22T12:29:23,354 INFO [main] metastore.HiveMetaStore: No user is added in admin role, since config is empty 2026-06-22T12:29:23,418 INFO [main] conf.HiveConf: Found configuration file file:/usr/local/hive/conf/hive-site.xml 2026-06-22T12:29:23,602 INFO [main] metastore.HiveMetaStore: Starting DB backed MetaStore Server with SetUGI enabled 2026-06-22T12:29:23,607 INFO [main] metastore.HiveMetaStore: Started the new metaserver on port [9083]... 2026-06-22T12:29:23,608 INFO [main] metastore.HiveMetaStore: Options.minWorkerThreads = 200 2026-06-22T12:29:23,608 INFO [main] metastore.HiveMetaStore: Options.maxWorkerThreads = 1000 2026-06-22T12:29:23,608 INFO [main] metastore.HiveMetaStore: TCP keepalive = true 2026-06-22T12:29:23,608 INFO [main] metastore.HiveMetaStore: Enable SSL = false abase,Type,FieldSchema,Order" 2026-06-22T12:29:22,957 INFO [main] metastore.MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL 2026-06-22T12:29:22,958 INFO [main] metastore.ObjectStore: Initialized ObjectStore 2026-06-22T12:29:25,462 INFO [main] metastore.HiveMetaStore: Added admin role in metastore 2026-06-22T12:29:25,464 INFO [main] metastore.HiveMetaStore: Added public role in metastore 2026-06-22T12:29:25,477 INFO [main] metastore.HiveMetaStore: No user is added in admin role, since config is empty 2026-06-22T12:29:25,545 INFO [main] metastore.RetryingMetaStoreClient: RetryingMetaStoreClient proxy=class org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient ugi=mumu (auth:SIMPLE) retries=1 delay=1 lifetime=0 2026-06-22T12:29:25,862 INFO [main] service.CompositeService: Operation log root directory is created: /tmp/mumu/operation_logs 2026-06-22T12:29:25,862 INFO [main] service.CompositeService: HiveServer2: Background operation thread pool size: 100 2026-06-22T12:29:25,862 INFO [main] service.CompositeService: HiveServer2: Background operation thread wait queue size: 100 2026-06-22T12:29:25,862 INFO [main] service.CompositeService: HiveServer2: Background operation thread keepalive time: 10 seconds 2026-06-22T12:29:25,863 INFO [main] service.CompositeService: Connections limit are user: 0 ipaddress: 0 user-ipaddress: 0 2026-06-22T12:29:25,866 INFO [main] service.AbstractService: Service:OperationManager is inited. 2026-06-22T12:29:25,866 INFO [main] service.AbstractService: Service:SessionManager is inited. 2026-06-22T12:29:25,866 INFO [main] service.AbstractService: Service:CLIService is inited. 2026-06-22T12:29:25,866 INFO [main] service.AbstractService: Service:ThriftBinaryCLIService is inited. 2026-06-22T12:29:25,866 INFO [main] service.AbstractService: Service:HiveServer2 is inited. 2026-06-22T12:29:25,896 INFO [main] metastore.HiveMetaStoreClient: Mestastore configuration metastore.filter.hook changed from org.apache.hadoop.hive.ql.security.authorization.plugin.AuthorizationMetaStoreFilterHook to org.apache.hadoop.hive.metastore.DefaultMetaStoreFilterHookImpl 2026-06-22T12:29:25,897 INFO [main] metastore.HiveMetaStore: 0: Cleaning up thread local RawStore... 2026-06-22T12:29:25,899 INFO [main] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=Cleaning up thread local RawStore... 2026-06-22T12:29:25,899 INFO [main] metastore.HiveMetaStore: 0: Done cleaning up thread local RawStore 2026-06-22T12:29:25,899 INFO [main] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=Done cleaning up thread local RawStore 2026-06-22T12:29:25,900 INFO [main] metastore.HiveMetaStore: 0: Opening raw store with implementation class:org.apache.hadoop.hive.metastore.ObjectStore 2026-06-22T12:29:25,900 WARN [main] metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored 2026-06-22T12:29:25,901 INFO [main] metastore.ObjectStore: ObjectStore, initialize called 2026-06-22T12:29:25,906 INFO [main] metastore.MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL 2026-06-22T12:29:25,906 INFO [main] metastore.ObjectStore: Initialized ObjectStore 2026-06-22T12:29:25,906 INFO [main] metastore.RetryingMetaStoreClient: RetryingMetaStoreClient proxy=class org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient ugi=mumu (auth:SIMPLE) retries=1 delay=1 lifetime=0 2026-06-22T12:29:25,908 INFO [main] metastore.HiveMetaStore: 0: get_all_functions 2026-06-22T12:29:25,908 INFO [main] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_all_functions 2026-06-22T12:29:25,929 INFO [pool-10-thread-1] SessionState: Hive Session ID = cc9b016a-3868-4372-b6d0-47f5786d4af3 2026-06-22T12:29:25,935 INFO [main] results.QueryResultsCache: Initializing query results cache at /tmp/hive/_resultscache_ 2026-06-22T12:29:25,939 INFO [pool-10-thread-1] session.SessionState: Created HDFS directory: /tmp/hive/mumu/cc9b016a-3868-4372-b6d0-47f5786d4af3 2026-06-22T12:29:25,941 INFO [pool-10-thread-1] session.SessionState: Created local directory: /tmp/mumu/cc9b016a-3868-4372-b6d0-47f5786d4af3 2026-06-22T12:29:25,944 INFO [pool-10-thread-1] session.SessionState: Created HDFS directory: /tmp/hive/mumu/cc9b016a-3868-4372-b6d0-47f5786d4af3/_tmp_space.db 2026-06-22T12:29:25,944 INFO [main] results.QueryResultsCache: Query results cache: cacheDirectory /tmp/hive/_resultscache_/results-875aede0-c936-4a81-be46-3ca44a726ba4, maxCacheSize 2147483648, maxEntrySize 10485760, maxEntryLifetime 3600000 2026-06-22T12:29:25,945 INFO [pool-10-thread-1] metastore.HiveMetaStore: 1: get_databases: @hive# 2026-06-22T12:29:25,945 INFO [pool-10-thread-1] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_databases: @hive# 2026-06-22T12:29:25,946 INFO [pool-10-thread-1] metastore.HiveMetaStore: 1: Opening raw store with implementation class:org.apache.hadoop.hive.metastore.ObjectStore 2026-06-22T12:29:25,946 INFO [pool-10-thread-1] metastore.ObjectStore: ObjectStore, initialize called 2026-06-22T12:29:25,951 INFO [pool-10-thread-1] metastore.MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL 2026-06-22T12:29:25,951 INFO [pool-10-thread-1] metastore.ObjectStore: Initialized ObjectStore 2026-06-22T12:29:25,957 INFO [pool-10-thread-1] metastore.HiveMetaStore: 1: get_tables_by_type: db=@hive#default pat=.*,type=MATERIALIZED_VIEW 2026-06-22T12:29:25,957 INFO [pool-10-thread-1] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_tables_by_type: db=@hive#default pat=.*,type=MATERIALIZED_VIEW 2026-06-22T12:29:25,963 INFO [pool-10-thread-1] metastore.HiveMetaStore: 1: get_multi_table : db=default tbls= 2026-06-22T12:29:25,963 INFO [pool-10-thread-1] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_multi_table : db=default tbls= 2026-06-22T12:29:25,974 INFO [pool-10-thread-1] metadata.HiveMaterializedViewsRegistry: Materialized views registry has been initialized 2026-06-22T12:29:25,975 INFO [main] events.NotificationEventPoll: Initializing lastCheckedEventId to 0 2026-06-22T12:29:25,976 INFO [main] server.HiveServer2: Starting Web UI on port 10002 2026-06-22T12:29:26,010 INFO [main] util.log: Logging initialized @6350ms 2026-06-22T12:29:26,270 INFO [main] service.AbstractService: Service:OperationManager is started. 2026-06-22T12:29:26,270 INFO [main] service.AbstractService: Service:SessionManager is started. 2026-06-22T12:29:26,271 INFO [main] service.AbstractService: Service:CLIService is started. 2026-06-22T12:29:26,272 INFO [main] service.AbstractService: Service:ThriftBinaryCLIService is started. 2026-06-22T12:29:26,297 INFO [main] thrift.ThriftCLIService: Starting ThriftBinaryCLIService on port 10000 with 5...500 worker threads 2026-06-22T12:29:26,297 INFO [main] service.AbstractService: Service:HiveServer2 is started. 2026-06-22T12:29:26,298 WARN [main] server.HiveServer2: No policy provider found, skip creating PrivilegeSynchonizer 2026-06-22T12:29:26,299 INFO [main] server.Server: jetty-9.3.20.v20170531 2026-06-22T12:29:26,387 INFO [main] handler.ContextHandler: Started o.e.j.w.WebAppContext@5486ee92{/,file:///tmp/jetty-0.0.0.0-10002-hiveserver2-_-any-4667155433642660395.dir/webapp/,AVAILABLE}{jar:file:/usr/local/hive/lib/hive-service-3.1.3.jar!/hive-webapps/hiveserver2} 2026-06-22T12:29:26,387 INFO [main] handler.ContextHandler: Started o.e.j.s.ServletContextHandler@20820df0{/static,jar:file:/usr/local/hive/lib/hive-service-3.1.3.jar!/hive-webapps/static,AVAILABLE} 2026-06-22T12:29:26,387 INFO [main] handler.ContextHandler: Started o.e.j.s.ServletContextHandler@9e62fb{/logs,file:///tmp/mumu/,AVAILABLE} 2026-06-22T12:29:26,391 INFO [main] server.AbstractConnector: Started ServerConnector@3e28dc96{HTTP/1.1,[http/1.1]}{0.0.0.0:10002} 2026-06-22T12:29:26,392 INFO [main] server.Server: Started @6733ms 2026-06-22T12:29:26,392 INFO [main] http.HttpServer: Started HttpServer[hiveserver2] on port 10002 2026-06-22T12:29:26,392 INFO [main] server.HiveServer2: Web UI has started on port 10002 2026-06-22T12:30:21,939 INFO [NotificationEventPoll 0] metastore.HiveMetaStore: 2: Opening raw store with implementation class:org.apache.hadoop.hive.metastore.ObjectStore 2026-06-22T12:30:21,940 WARN [NotificationEventPoll 0] metastore.ObjectStore: datanucleus.autoStartMechanismMode is set to unsupported value null . Setting it to value: ignored 2026-06-22T12:30:21,940 INFO [NotificationEventPoll 0] metastore.ObjectStore: ObjectStore, initialize called 2026-06-22T12:30:21,947 INFO [NotificationEventPoll 0] metastore.MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL 2026-06-22T12:30:21,947 INFO [NotificationEventPoll 0] metastore.ObjectStore: Initialized ObjectStore 2026-06-22T12:30:21,948 INFO [NotificationEventPoll 0] metastore.RetryingMetaStoreClient: RetryingMetaStoreClient proxy=class org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient ugi=mumu (auth:SIMPLE) retries=1 delay=1 lifetime=0 2026-06-22T12:30:21,952 INFO [NotificationEventPoll 0] metastore.HiveMetaStore: 2: get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:30:21,952 INFO [NotificationEventPoll 0] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:31:17,884 INFO [NotificationEventPoll 0] metastore.HiveMetaStore: 2: get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:31:17,884 INFO [NotificationEventPoll 0] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:32:13,866 INFO [NotificationEventPoll 0] metastore.HiveMetaStore: 2: get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:32:13,866 INFO [NotificationEventPoll 0] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:33:09,782 INFO [NotificationEventPoll 0] metastore.HiveMetaStore: 2: get_config_value: name=metastore.batch.retrieve.max defaultValue=50 2026-06-22T12:33:09,782 INFO [NotificationEventPoll 0] HiveMetaStore.audit: ugi=mumu ip=unknown-ip-addr cmd=get_config_value: name=metastore.batch.retrieve.max defaultValue=50 mumu@MuJinqiu:~$
太好了!从日志看,HiveServer2 已经成功启动了! 🎉
关键日志显示:
-
✅
Starting ThriftBinaryCLIService on port 10000--- 服务在 10000 端口启动 -
✅
Web UI has started on port 10002--- Web 界面在 10002 端口启动 -
✅ 所有服务都已
started
🔍 现在确认端口是否正常
执行以下命令检查端口监听情况:
bash
bash
sudo netstat -tlnp | grep -E "10000|10002"
应该会看到类似这样的输出:
text
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 23840/java
tcp 0 0 0.0.0.0:10002 0.0.0.0:* LISTEN 23840/java
✅ 如果端口正常,现在连接 DBeaver
步骤 1:获取 WSL2 IP 地址
在 Windows PowerShell 中执行:
powershell
wsl -- hostname -I
记下输出的 IP(如 172.30.98.229)
步骤 2:在 DBeaver 中配置连接
-
主机/地址:填上一步获取的 IP
-
端口 :
10000 -
用户名 :随便填(如
hive) -
密码 :随便填(如
hive) -
数据库/模式 :
default(留空也行)
步骤 3:测试连接
点击 "Test Connection" 按钮,应该能连接成功。
📌 如果还有问题
如果 DBeaver 连接失败,检查:
-
Windows 防火墙:临时关闭防火墙测试一下
-
HiveServer2 是否还在运行 :
ps aux | grep hiveserver2 -
WSL2 IP 是否正确:每次重启 WSL2,IP 可能会变,需要重新获取
🎯 最终确认
执行这个命令,把结果发给我确认:
bash
sudo netstat -tlnp | grep -E "10000|10002" && echo "=== WSL2 IP ===" && hostname -I
如果端口正常,你就可以在 DBeaver 中连接了!🎉
bash
mumu@MuJinqiu:~$ sudo netstat -tlnp | grep -E "10000|10002" tcp6 0 0 :::10000 :::* LISTEN 23840/java tcp6 0 0 :::10002 :::* LISTEN 23840/java mumu@MuJinqiu:~$
完美!🎉 HiveServer2 已经成功启动并监听在 10000 和 10002 端口!
text
tcp6 0 0 :::10000 :::* LISTEN 23840/java ✅ HiveServer2 JDBC 端口
tcp6 0 0 :::10002 :::* LISTEN 23840/java ✅ Web UI 管理界面
🚀 现在连接 DBeaver
步骤 1:获取 WSL2 IP 地址
在 Windows PowerShell 中执行:
powershell
wsl -- hostname -I
记下输出的 IP 地址(类似 172.30.98.229)
步骤 2:DBeaver 连接配置
-
打开 DBeaver,点击 新建数据库连接
-
选择 Apache Hive
-
填写连接信息:
-
主机/地址 :填上一步获取的 IP(如
172.30.98.229) -
端口 :
10000 -
用户名 :
hive(随便填,Hive 默认不验证) -
密码 :
hive(随便填) -
数据库/模式 :
default(或者留空)
-
-
点击 测试连接,应该能看到成功提示
📌 如果连接失败
检查 Windows 防火墙:
-
临时关闭 Windows 防火墙测试
-
或者添加入站规则允许端口 10000
检查 WSL2 IP 是否正确:
powershell
# 在 PowerShell 中确认 IP
wsl -- hostname -I
在 WSL2 中测试本地连接(确认服务本身没问题):
bash
beeline -u jdbc:hive2://localhost:10000 -n hive
如果能进入 Beeline 命令行,说明服务正常,问题在 Windows 网络层面。
🌐 可选:访问 Hive Web UI
在 Windows 浏览器中访问:
text
http://<WSL2_IP>:10002
可以看到 HiveServer2 的 Web 管理界面,方便监控。
试试连接 DBeaver,告诉我结果如何!如果遇到报错,把错误信息发给我 👍
bash
Microsoft Windows [版本 10.0.26200.8524] (c) Microsoft Corporation。保留所有权利。 C:\Users\86178>wsl -- hostname -I 172.18.230.242 C:\Users\86178>
完美!WSL2 的 IP 地址是 172.18.230.242。
🚀 现在在 DBeaver 中配置连接
连接参数:
| 配置项 | 填写内容 |
|---|---|
| 主机/地址 | 172.18.230.242 |
| 端口 | 10000 |
| 用户名 | hive |
| 密码 | hive(或留空) |
| 数据库/模式 | default(或留空) |
📝 详细操作步骤
-
打开 DBeaver → 点击左上角 "新建连接" 图标(插头+文件夹图标)
-
在搜索框输入 Hive ,选择 Apache Hive,点击下一步
-
在 "主要" 选项卡中填写上面的连接信息
-
点击 "测试连接" 按钮
-
如果提示需要下载驱动,点击 "下载" 即可(DBeaver 会自动下载 Hive JDBC 驱动)
✅ 连接成功后
你可以:
-
浏览
default数据库中的表 -
执行 SQL 查询(如
SHOW TABLES;) -
创建表、插入数据等学习操作
🔧 如果连接失败
把 DBeaver 的错误提示发给我,常见问题:
-
驱动版本不匹配 --- DBeaver 自动下载的驱动可能和 Hive 3.1.3 不兼容,需要手动添加驱动
-
防火墙阻挡 --- Windows 防火墙可能阻止了访问
-
连接超时 --- IP 地址是否正确
如果遇到错误,把完整的错误信息贴过来,我帮你解决 👍
快去试试吧!🎉
在 DBeaver 中配置连接,选择哪个呢?
从截图看,你当前在 DBeaver Sample Database (SQLite) 示例数据库的界面。要创建新的 Hive 连接,请按以下步骤操作:
🚀 创建新连接的步骤
方法一:使用菜单栏
点击顶部菜单栏的 数据库(D) → 选择 新建连接(N)
text
数据库(D) → 新建连接(N)
方法二:使用工具栏
点击工具栏最左侧的 "新建" 图标(通常是一个带加号的插头图标 📌)
方法三:使用快捷键
直接按 Ctrl + Shift + N(底部状态栏提示的快捷键)
📝 选择 Hive 驱动
在弹出的 "连接到数据库" 窗口中:
-
在搜索框输入
hive -
在结果列表中,选择 Apache Hive
text
🗂️ All → 搜索 "hive" → 选择 "Apache Hive" -
点击 "下一步"
⚙️ 填写连接参数
在连接配置页面填写:
| 字段 | 填写内容 |
|---|---|
| 主机/地址 | 172.18.230.242 |
| 端口 | 10000 |
| 用户名 | hive |
| 密码 | hive(可留空) |
| 数据库/模式 | default(可留空) |
✅ 测试连接
-
点击左下角的 "测试连接" 按钮
-
如果提示下载驱动,点击 "下载" 允许 DBeaver 自动下载 Hive JDBC 驱动
-
看到 "连接成功" 提示后,点击 "完成"
📌 注意
确保你选的是 Apache Hive,而不是:
-
❌ Hive (Apache Hive)
-
❌ Hive (Amazon EMR)
-
❌ Hive (CDH)
-
❌ 其他变体
选择最标准的 Apache Hive 即可。
完成后告诉我连接结果如何 👍
新建数据库连接 和 从JDBC URL新建连接,有什么区别
好问题!这两个选项的区别如下:
📌 新建数据库连接(常规方式)
使用场景:大多数情况下的首选方式
特点:
-
可视化配置:通过表单填写主机、端口、用户名、密码等字段
-
自动生成 JDBC URL:DBeaver 根据你填写的参数自动构建连接字符串
-
驱动管理:DBeaver 自动下载和管理合适的 JDBC 驱动
-
更友好:不需要手动编写复杂的 JDBC URL,适合不熟悉 JDBC 格式的用户
操作流程:
text
选择数据库类型 → 填写表单(主机/端口/用户名/密码)→ 测试连接 → 完成
📌 从 JDBC URL 新建连接(高级方式)
使用场景:需要精确控制连接参数时
特点:
-
手动输入 URL:直接编写完整的 JDBC 连接字符串
text
例如:jdbc:hive2://172.18.230.242:10000/default;auth=noSasl -
精确控制:可以添加额外的连接参数(如认证方式、超时设置等)
-
需要专业知识:必须知道正确的 JDBC URL 格式
-
跳过表单:不需要分别填写主机、端口等字段
适用情况:
-
使用特殊的 JDBC 驱动或版本
-
需要添加表单中没有的高级参数
-
从其他工具复制已有的连接配置
-
使用 DBeaver 不原生支持的数据库(但通过通用 JDBC 驱动连接)
🎯 你应该选哪个?
对于你的情况(Hive + 学习使用),选择「新建数据库连接」即可 ✅
理由:
-
Hive 是 DBeaver 原生支持的数据库类型
-
可视化表单更直观,不容易出错
-
只需要填写 IP、端口、用户名这 3 个字段
-
DBeaver 会自动处理驱动兼容性问题
📝 如何选择
| 情况 | 推荐方式 |
|---|---|
| 初学者/常规连接 | 新建数据库连接 ✅ |
| 需要添加特殊参数 | 从 JDBC URL 新建 |
| 复制别人的连接配置 | 从 JDBC URL 新建 |
| 连接 DBeaver 不支持的数据库 | 从 JDBC URL 新建(使用通用 JDBC) |
💡 小提示
如果你后续需要添加特殊参数(比如 Hive 的认证方式),可以在「新建数据库连接」方式下,点击 "驱动属性" 或 "高级" 选项卡,以键值对形式添加参数,而不需要手动写 JDBC URL。
所以现在你只需要点击 "新建数据库连接" ,然后搜索 Apache Hive 就可以了!😊
选择哪个hive
根据你的 Hive 版本(3.1.3),应该选择 Apache Hive 2 ✅
📌 选择说明
| 选项 | 适用版本 | 你的情况 |
|---|---|---|
| Apache Hive 2 | Hive 1.x、2.x、3.x | ✅ 选这个 |
| Apache Hive 4+ | Hive 4.x 及以上 | ❌ 版本太高 |
| Apache Kyuubi | 腾讯开源的 Kyuubi 服务 | ❌ 不是标准 Hive |
虽然你的版本是 3.1.3,但 Hive 3.x 的 JDBC 驱动与 Hive 2.x 兼容,DBeaver 的 "Apache Hive 2" 驱动可以正常工作。
⚠️ 一个常见问题
选择 Apache Hive 2 后,DBeaver 会自动下载驱动。但有时候自动下载的驱动版本可能与 Hive 3.1.3 不完全兼容,导致连接时出现类似错误:
text
Required field 'client_protocol' is unset
如果遇到这个问题,需要手动更换驱动版本。具体方法是:
-
在连接配置窗口点击 "编辑驱动"(通常在左下角)
-
切换到 "库" 选项卡
-
删除自动下载的驱动,手动添加与 Hive 3.1.3 兼容的 JDBC 驱动包(通常用
hive-jdbc-3.1.3-standalone.jar)
✅ 现在操作
-
选择 Apache Hive 2
-
点击 "下一步"
-
填写连接参数:
-
主机:
172.18.230.242 -
端口:
10000 -
用户名:
hive -
密码:
hive(或留空)
-
-
点击 "测试连接"
如果测试成功,直接点击完成即可 🎉
如果报错,把错误信息发给我,我帮你解决!
下载驱动文件,已经失败了好几次。
驱动下载失败是常见问题,因为 GitHub 在国内访问不稳定。我们手动下载驱动并导入。
📥 方法一:手动下载驱动(推荐)
步骤 1:在 Windows 上下载驱动
用浏览器打开以下链接(选择其中一个能用的):
或者使用我提供的备用下载方式,在 WSL2 中下载:
bash
# 在 WSL2 终端中执行,下载到 /tmp 目录
wget -P /tmp https://mirrors.huaweicloud.com/repository/maven/org/apache/hive/hive-jdbc/3.1.3/hive-jdbc-3.1.3-standalone.jar
下载完成后,你需要把这个 jar 文件复制到 Windows 的某个目录(比如 C:\hive-jdbc\),或者直接让 DBeaver 从 WSL2 路径读取。
⚙️ 步骤 2:在 DBeaver 中导入驱动
-
在连接配置窗口中,点击 "编辑驱动" 按钮(在"测试连接"按钮附近)
-
切换到 "库" 选项卡
-
在左侧列表中,删除所有已下载的驱动包(选中后点"删除")
-
点击 "添加文件" 按钮
-
选择你刚才下载的
hive-jdbc-3.1.3-standalone.jar文件 -
点击 "确定"
-
回到连接配置页面,点击 "测试连接"
🔄 方法二:让 DBeaver 使用 WSL2 中的 Hive 库
如果你已经在 WSL2 中有完整的 Hive 安装,可以直接用 Hive 自带的 jar 包:
-
点击 "编辑驱动"
-
切换到 "库" 选项卡
-
删除所有自动下载的包
-
点击 "添加文件",然后在路径中输入:
text
\\wsl.localhost\Ubuntu\usr\local\hive\jdbc\standalone\* 或直接指向你下载的jar文件或者使用 WSL2 路径(DBeaver 可能不支持直接访问 WSL2 路径,最好先把文件复制到 Windows 目录)
📝 最简单的操作流程
在 WSL2 中执行(下载驱动):
bash
# 创建目录并下载
mkdir -p ~/hive-jdbc
wget -P ~/hive-jdbc https://mirrors.huaweicloud.com/repository/maven/org/apache/hive/hive-jdbc/3.1.3/hive-jdbc-3.1.3-standalone.jar
在 Windows 中 ,打开文件资源管理器,在地址栏输入 \\wsl.localhost\Ubuntu\home\mumu\hive-jdbc\,就能看到下载好的 jar 文件。然后在 DBeaver 中添加这个文件即可。
✅ 如果镜像站也下载失败
告诉我,我可以用其他方式帮你。你也可以先检查一下 WSL2 中是否已经有这个文件:
bash
find /usr/local/hive -name "*.jar" | grep -i jdbc | head -10
如果有现成的 hive-jdbc-*.jar,直接用它就行,不需要重新下载。
先去试试下载,把结果告诉我 👍
bash
mumu@MuJinqiu:~$ find /usr/local/hive -name "*.jar" | grep -i jdbc | head -10 /usr/local/hive/jdbc/hive-jdbc-3.1.3-standalone.jar /usr/local/hive/lib/hive-jdbc-3.1.3.jar /usr/local/hive/lib/hive-jdbc-handler-3.1.3.jar mumu@MuJinqiu:~$
太好了!WSL2 里已经有现成的 Hive JDBC 驱动了!直接用它,不需要下载。
📂 把驱动文件复制到 Windows 可访问的位置
方法一:通过 WSL2 路径访问(推荐)
在 Windows 文件资源管理器地址栏输入:
text
\\wsl.localhost\Ubuntu\home\mumu\
然后把 hive-jdbc-3.1.3-standalone.jar 复制到一个方便的 Windows 目录,比如 C:\hive-jdbc\。
方法二:在 WSL2 中用 cp 命令复制
bash
# 复制到 WSL2 的 Windows 挂载目录(可以直接访问)
cp /usr/local/hive/jdbc/hive-jdbc-3.1.3-standalone.jar /mnt/c/hive-jdbc/
# 如果没有 hive-jdbc 文件夹,先创建
mkdir -p /mnt/c/hive-jdbc
⚙️ 在 DBeaver 中配置驱动
-
在连接配置窗口,点击 "编辑驱动" 按钮
-
切换到 "库" 选项卡
-
在左侧列表选中所有已下载的驱动包,点击 "删除"
-
点击 "添加文件"
-
浏览到
C:\hive-jdbc\hive-jdbc-3.1.3-standalone.jar(或你复制到的位置),选中它 -
点击 "确定" 保存
✅ 测试连接
回到连接配置主界面:
-
主机:
172.18.230.242 -
端口:
10000 -
用户名:
hive -
密码:留空或填
hive
点击 "测试连接",应该就能成功了!🎉
📌 如果还有问题
如果测试连接报错,把错误信息发给我。常见的可能问题:
-
缺少依赖包 :
hive-jdbc-standalone.jar应该包含所有依赖,一般没问题 -
版本不匹配:3.1.3 的驱动和你的 Hive 版本完全匹配,没问题
-
认证问题 :如果报
SASL相关错误,可以在 JDBC URL 中添加;auth=noSasl参数
去试试吧!👍
驱动文件正在下载中,也不能中间停止吧,不然还有脏文件要清理
你说得对!等它下载完再处理更干净。下载完成后:
📋 下载完成后的操作
1. 在 DBeaver 中替换驱动
下载完成后,连接配置窗口应该会显示"下载完成"。然后:
-
点击 "编辑驱动" 按钮
-
切换到 "库" 选项卡
-
左侧列表里会显示自动下载的驱动包
-
点击 "添加文件",选择 WSL2 里的本地驱动:
-
路径:
\\wsl.localhost\Ubuntu\usr\local\hive\jdbc\hive-jdbc-3.1.3-standalone.jar -
或者先复制到
C:\hive-jdbc\再添加
-
-
勾选 本地添加的驱动,取消勾选 或删除自动下载的驱动
-
点击 "确定"
🧹 清理自动下载的文件(可选)
DBeaver 的驱动缓存位置在:
text
C:\Users\86178\AppData\Roaming\DBeaverData\drivers\
下载完成后,如果替换驱动成功,可以手动删除里面关于 Hive 的缓存文件夹,不过不清理也不影响(DBeaver 会优先使用你指定的本地驱动)。
⏳ 下载过程中
耐心等待下载完成就好。如果下载失败(超时或报错),直接取消,然后按我之前的方案手动添加本地驱动即可。
下载完成后告诉我结果,我们继续配置连接!👍
如果能下载完,为什么要替换驱动呢
🤔 为什么要替换?
因为 DBeaver 自动下载的驱动不一定是给你的 Hive Server 用的。
📌 具体原因
| 自动下载的驱动 | 你本地的驱动 | |
|---|---|---|
| 版本 | 可能是 Hive 2.x 的旧版驱动 | Hive 3.1.3 专用驱动 ✅ |
| 来源 | 公共 Maven 仓库(通用版本) | 你安装的 Hive 自带的配套驱动 |
| 兼容性 | 可能与 Hive 3.1.3 不完全兼容 | 完全匹配你的 Hive 版本 |
DBeaver 的 "Apache Hive 2" 驱动 ,默认下载的是兼容 Hive 2.x/3.x 的通用版本,但实际测试中,用 Hive 3.1.3 自带的 hive-jdbc-standalone.jar 成功率最高,兼容性最好。
✅ 如果自动下载的驱动能用呢?
那就直接用,不用替换!
我的建议是:
-
先测试连接:用自动下载的驱动直接点"测试连接"
-
如果成功 → ✅ 直接用,什么都不用改
-
如果报错 → ❌ 再手动替换成本地驱动
🎯 最简单的做法
等下载完成后:
-
填好连接信息(主机、端口、用户名)
-
直接点 "测试连接"
-
成功 → 点"完成",收工 🎉
-
失败 → 再按刚才说的替换驱动方案
所以你现在可以:
-
耐心等待下载完成
-
填写连接参数
-
点"测试连接"试一下
把结果告诉我,成功还是失败,我们接着处理 👍
bash
Could not establish connection to jdbc:hive2://172.18.230.242:10000: Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:14:13, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:434, org.apache.hive.service.cli.session.SessionManager:openSession:SessionManager.java:373, org.apache.hive.service.cli.CLIService:openSessionWithImpersonation:CLIService.java:195, org.apache.hive.service.cli.thrift.ThriftCLIService:getSessionHandle:ThriftCLIService.java:472, org.apache.hive.service.cli.thrift.ThriftCLIService:OpenSession:ThriftCLIService.java:322, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1497, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1482, org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39, org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39, org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56, org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286, java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149, java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624, java.lang.Thread:run:Thread.java:750, *java.lang.RuntimeException:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:22:8, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:89, org.apache.hive.service.cli.session.HiveSessionProxy:access$000:HiveSessionProxy.java:36, org.apache.hive.service.cli.session.HiveSessionProxy$1:run:HiveSessionProxy.java:63, java.security.AccessController:doPrivileged:AccessController.java:-2, javax.security.auth.Subject:doAs:Subject.java:422, org.apache.hadoop.security.UserGroupInformation:doAs:UserGroupInformation.java:1899, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:59, com.sun.proxy.$Proxy42:open::-1, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:425, *java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:29:7, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:651, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:586, org.apache.hive.service.cli.session.HiveSessionImpl:open:HiveSessionImpl.java:179, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:78, *org.apache.hadoop.ipc.RemoteException:User: mumu is not allowed to impersonate hive:55:26, org.apache.hadoop.ipc.Client:getRpcResponse:Client.java:1567, org.apache.hadoop.ipc.Client:call:Client.java:1513, org.apache.hadoop.ipc.Client:call:Client.java:1410, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:258, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:139, com.sun.proxy.$Proxy29:getFileInfo::-1, org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB:getFileInfo:ClientNamenodeProtocolTranslatorPB.java:966, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hadoop.io.retry.RetryInvocationHandler:invokeMethod:RetryInvocationHandler.java:433, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeMethod:RetryInvocationHandler.java:166, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invoke:RetryInvocationHandler.java:158, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeOnce:RetryInvocationHandler.java:96, org.apache.hadoop.io.retry.RetryInvocationHandler:invoke:RetryInvocationHandler.java:362, com.sun.proxy.$Proxy30:getFileInfo::-1, org.apache.hadoop.hdfs.DFSClient:getFileInfo:DFSClient.java:1739, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1829, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1826, org.apache.hadoop.fs.FileSystemLinkResolver:resolve:FileSystemLinkResolver.java:81, org.apache.hadoop.hdfs.DistributedFileSystem:getFileStatus:DistributedFileSystem.java:1841, org.apache.hadoop.fs.FileSystem:exists:FileSystem.java:1862, org.apache.hadoop.hive.ql.exec.Utilities:ensurePathIsWritable:Utilities.java:4486, org.apache.hadoop.hive.ql.session.SessionState:createRootHDFSDir:SessionState.java:760, org.apache.hadoop.hive.ql.session.SessionState:createSessionDirs:SessionState.java:701, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:627], errorCode:0, errorMessage:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive), serverProtocolVersion:null) Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:14:13, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:434, org.apache.hive.service.cli.session.SessionManager:openSession:SessionManager.java:373, org.apache.hive.service.cli.CLIService:openSessionWithImpersonation:CLIService.java:195, org.apache.hive.service.cli.thrift.ThriftCLIService:getSessionHandle:ThriftCLIService.java:472, org.apache.hive.service.cli.thrift.ThriftCLIService:OpenSession:ThriftCLIService.java:322, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1497, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1482, org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39, org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39, org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56, org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286, java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149, java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624, java.lang.Thread:run:Thread.java:750, *java.lang.RuntimeException:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:22:8, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:89, org.apache.hive.service.cli.session.HiveSessionProxy:access$000:HiveSessionProxy.java:36, org.apache.hive.service.cli.session.HiveSessionProxy$1:run:HiveSessionProxy.java:63, java.security.AccessController:doPrivileged:AccessController.java:-2, javax.security.auth.Subject:doAs:Subject.java:422, org.apache.hadoop.security.UserGroupInformation:doAs:UserGroupInformation.java:1899, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:59, com.sun.proxy.$Proxy42:open::-1, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:425, *java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive:29:7, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:651, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:586, org.apache.hive.service.cli.session.HiveSessionImpl:open:HiveSessionImpl.java:179, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:78, *org.apache.hadoop.ipc.RemoteException:User: mumu is not allowed to impersonate hive:55:26, org.apache.hadoop.ipc.Client:getRpcResponse:Client.java:1567, org.apache.hadoop.ipc.Client:call:Client.java:1513, org.apache.hadoop.ipc.Client:call:Client.java:1410, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:258, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:139, com.sun.proxy.$Proxy29:getFileInfo::-1, org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB:getFileInfo:ClientNamenodeProtocolTranslatorPB.java:966, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hadoop.io.retry.RetryInvocationHandler:invokeMethod:RetryInvocationHandler.java:433, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeMethod:RetryInvocationHandler.java:166, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invoke:RetryInvocationHandler.java:158, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeOnce:RetryInvocationHandler.java:96, org.apache.hadoop.io.retry.RetryInvocationHandler:invoke:RetryInvocationHandler.java:362, com.sun.proxy.$Proxy30:getFileInfo::-1, org.apache.hadoop.hdfs.DFSClient:getFileInfo:DFSClient.java:1739, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1829, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1826, org.apache.hadoop.fs.FileSystemLinkResolver:resolve:FileSystemLinkResolver.java:81, org.apache.hadoop.hdfs.DistributedFileSystem:getFileStatus:DistributedFileSystem.java:1841, org.apache.hadoop.fs.FileSystem:exists:FileSystem.java:1862, org.apache.hadoop.hive.ql.exec.Utilities:ensurePathIsWritable:Utilities.java:4486, org.apache.hadoop.hive.ql.session.SessionState:createRootHDFSDir:SessionState.java:760, org.apache.hadoop.hive.ql.session.SessionState:createSessionDirs:SessionState.java:701, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:627], errorCode:0, errorMessage:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate hive), serverProtocolVersion:null)
错误信息很明确:User: mumu is not allowed to impersonate hive
这是 Hadoop 的代理用户(proxy user) 配置问题。HiveServer2 默认以启动用户(mumu)运行,但客户端连接时试图以 hive 用户身份执行操作,而 mumu 没有被授权代理 hive 用户。
🔧 解决方案:配置 Hadoop 代理用户
在 WSL2 中编辑 Hadoop 的 core-site.xml 文件:
bash
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
在 <configuration> 标签内添加以下配置:
xml
<property>
<name>hadoop.proxyuser.mumu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mumu.groups</name>
<value>*</value>
</property>
解释:
-
mumu是你的 Linux 用户名(HiveServer2 的启动用户) -
hosts设为*表示允许从任何主机代理 -
groups设为*表示允许代理任何用户组
📋 完整步骤
1. 编辑 core-site.xml
bash
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
文件内容应该类似这样:
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 现有配置... -->
<!-- 添加以下两行 -->
<property>
<name>hadoop.proxyuser.mumu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mumu.groups</name>
<value>*</value>
</property>
</configuration>
按 Ctrl+O 保存,Ctrl+X 退出。
2. 重启 Hadoop 服务
bash
# 停止
$HADOOP_HOME/sbin/stop-all.sh
# 启动
$HADOOP_HOME/sbin/start-all.sh
3. 重启 HiveServer2
bash
# 停止 HiveServer2
pkill -f hiveserver2
# 重新启动
nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 &
✅ 然后在 DBeaver 中重试
使用相同的连接参数:
-
主机:
172.18.230.242 -
端口:
10000 -
用户名:
hive -
密码:留空
点击 "测试连接",应该就能成功了!
📌 如果还不行
试试把 DBeaver 的用户名改为 mumu (你的 WSL2 用户名),因为 HiveServer2 现在允许 mumu 代理其他用户了。
先试试配置 core-site.xml,然后重启服务,告诉我结果 👍
把 DBeaver 的用户名改为 mumu,这样更简单一点,没必要去新建一个用户hive
完全正确! 👍 这是一个更简单直接的解决方案。
既然 HiveServer2 是用 mumu 用户启动的,直接用 mumu 连接就行了,不需要搞代理用户配置。
✅ 在 DBeaver 中修改连接参数
| 配置项 | 填写内容 |
|---|---|
| 主机/地址 | 172.18.230.242 |
| 端口 | 10000 |
| 用户名 | mumu |
| 密码 | 留空 |
| 数据库/模式 | default |
🔍 如果还报错
如果改成 mumu 后仍然报错,可能需要检查一下 HiveServer2 的认证模式。可以在 JDBC URL 中添加 ;auth=noSasl 参数:
方法 :在连接配置页面,找到 "JDBC URL" 字段,修改为:
text
jdbc:hive2://172.18.230.242:10000/default;auth=noSasl
或者在 "驱动属性" 选项卡中添加键值对:
| 键 | 值 |
|---|---|
auth |
noSasl |
🚀 测试连接
修改用户名后,直接点击 "测试连接",应该就能成功了!
如果还有报错,把新错误信息发给我。但大概率改成 mumu 就搞定了 🎉
这样写对吗
完全正确! ✅ 配置没问题,可以直接点击 "测试连接"。
✅ 你的配置摘要
| 配置项 | 填写内容 | 状态 |
|---|---|---|
| 连接方式 | 主机 | ✅ |
| 主机 | 172.18.230.242 |
✅ |
| 端口 | 10000 |
✅ |
| 数据库/模式 | default |
✅ |
| 用户名 | mumu |
✅ |
| 密码 | 留空 | ✅ |
🚀 现在点击「测试连接」
应该能成功连接了!
如果还是报错
把错误信息截图或文字发给我。最常见的后续问题是:
-
SASL 认证错误 → 在 JDBC URL 后面加
;auth=noSasl -
驱动版本问题 → 需要替换成你本地的
hive-jdbc-3.1.3-standalone.jar -
防火墙问题 → Windows 防火墙阻挡了端口 10000
点 "测试连接" 试试看,告诉我结果!🎉
bash
Could not establish connection to jdbc:hive2://172.18.230.242:10000/default: Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:14:13, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:434, org.apache.hive.service.cli.session.SessionManager:openSession:SessionManager.java:373, org.apache.hive.service.cli.CLIService:openSessionWithImpersonation:CLIService.java:195, org.apache.hive.service.cli.thrift.ThriftCLIService:getSessionHandle:ThriftCLIService.java:472, org.apache.hive.service.cli.thrift.ThriftCLIService:OpenSession:ThriftCLIService.java:322, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1497, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1482, org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39, org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39, org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56, org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286, java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149, java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624, java.lang.Thread:run:Thread.java:750, *java.lang.RuntimeException:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:22:8, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:89, org.apache.hive.service.cli.session.HiveSessionProxy:access$000:HiveSessionProxy.java:36, org.apache.hive.service.cli.session.HiveSessionProxy$1:run:HiveSessionProxy.java:63, java.security.AccessController:doPrivileged:AccessController.java:-2, javax.security.auth.Subject:doAs:Subject.java:422, org.apache.hadoop.security.UserGroupInformation:doAs:UserGroupInformation.java:1899, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:59, com.sun.proxy.$Proxy42:open::-1, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:425, *java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:29:7, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:651, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:586, org.apache.hive.service.cli.session.HiveSessionImpl:open:HiveSessionImpl.java:179, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:78, *org.apache.hadoop.ipc.RemoteException:User: mumu is not allowed to impersonate mumu:54:25, org.apache.hadoop.ipc.Client:getRpcResponse:Client.java:1567, org.apache.hadoop.ipc.Client:call:Client.java:1513, org.apache.hadoop.ipc.Client:call:Client.java:1410, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:258, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:139, com.sun.proxy.$Proxy29:getFileInfo::-1, org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB:getFileInfo:ClientNamenodeProtocolTranslatorPB.java:966, sun.reflect.GeneratedMethodAccessor12:invoke::-1, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hadoop.io.retry.RetryInvocationHandler:invokeMethod:RetryInvocationHandler.java:433, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeMethod:RetryInvocationHandler.java:166, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invoke:RetryInvocationHandler.java:158, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeOnce:RetryInvocationHandler.java:96, org.apache.hadoop.io.retry.RetryInvocationHandler:invoke:RetryInvocationHandler.java:362, com.sun.proxy.$Proxy30:getFileInfo::-1, org.apache.hadoop.hdfs.DFSClient:getFileInfo:DFSClient.java:1739, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1829, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1826, org.apache.hadoop.fs.FileSystemLinkResolver:resolve:FileSystemLinkResolver.java:81, org.apache.hadoop.hdfs.DistributedFileSystem:getFileStatus:DistributedFileSystem.java:1841, org.apache.hadoop.fs.FileSystem:exists:FileSystem.java:1862, org.apache.hadoop.hive.ql.exec.Utilities:ensurePathIsWritable:Utilities.java:4486, org.apache.hadoop.hive.ql.session.SessionState:createRootHDFSDir:SessionState.java:760, org.apache.hadoop.hive.ql.session.SessionState:createSessionDirs:SessionState.java:701, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:627], errorCode:0, errorMessage:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu), serverProtocolVersion:null) Required field 'serverProtocolVersion' is unset! Struct:TOpenSessionResp(status:TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:14:13, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:434, org.apache.hive.service.cli.session.SessionManager:openSession:SessionManager.java:373, org.apache.hive.service.cli.CLIService:openSessionWithImpersonation:CLIService.java:195, org.apache.hive.service.cli.thrift.ThriftCLIService:getSessionHandle:ThriftCLIService.java:472, org.apache.hive.service.cli.thrift.ThriftCLIService:OpenSession:ThriftCLIService.java:322, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1497, org.apache.hive.service.rpc.thrift.TCLIService$Processor$OpenSession:getResult:TCLIService.java:1482, org.apache.thrift.ProcessFunction:process:ProcessFunction.java:39, org.apache.thrift.TBaseProcessor:process:TBaseProcessor.java:39, org.apache.hive.service.auth.TSetIpAddressProcessor:process:TSetIpAddressProcessor.java:56, org.apache.thrift.server.TThreadPoolServer$WorkerProcess:run:TThreadPoolServer.java:286, java.util.concurrent.ThreadPoolExecutor:runWorker:ThreadPoolExecutor.java:1149, java.util.concurrent.ThreadPoolExecutor$Worker:run:ThreadPoolExecutor.java:624, java.lang.Thread:run:Thread.java:750, *java.lang.RuntimeException:java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:22:8, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:89, org.apache.hive.service.cli.session.HiveSessionProxy:access$000:HiveSessionProxy.java:36, org.apache.hive.service.cli.session.HiveSessionProxy$1:run:HiveSessionProxy.java:63, java.security.AccessController:doPrivileged:AccessController.java:-2, javax.security.auth.Subject:doAs:Subject.java:422, org.apache.hadoop.security.UserGroupInformation:doAs:UserGroupInformation.java:1899, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:59, com.sun.proxy.$Proxy42:open::-1, org.apache.hive.service.cli.session.SessionManager:createSession:SessionManager.java:425, *java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu:29:7, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:651, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:586, org.apache.hive.service.cli.session.HiveSessionImpl:open:HiveSessionImpl.java:179, sun.reflect.NativeMethodAccessorImpl:invoke0:NativeMethodAccessorImpl.java:-2, sun.reflect.NativeMethodAccessorImpl:invoke:NativeMethodAccessorImpl.java:62, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hive.service.cli.session.HiveSessionProxy:invoke:HiveSessionProxy.java:78, *org.apache.hadoop.ipc.RemoteException:User: mumu is not allowed to impersonate mumu:54:25, org.apache.hadoop.ipc.Client:getRpcResponse:Client.java:1567, org.apache.hadoop.ipc.Client:call:Client.java:1513, org.apache.hadoop.ipc.Client:call:Client.java:1410, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:258, org.apache.hadoop.ipc.ProtobufRpcEngine2$Invoker:invoke:ProtobufRpcEngine2.java:139, com.sun.proxy.$Proxy29:getFileInfo::-1, org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB:getFileInfo:ClientNamenodeProtocolTranslatorPB.java:966, sun.reflect.GeneratedMethodAccessor12:invoke::-1, sun.reflect.DelegatingMethodAccessorImpl:invoke:DelegatingMethodAccessorImpl.java:43, java.lang.reflect.Method:invoke:Method.java:498, org.apache.hadoop.io.retry.RetryInvocationHandler:invokeMethod:RetryInvocationHandler.java:433, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeMethod:RetryInvocationHandler.java:166, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invoke:RetryInvocationHandler.java:158, org.apache.hadoop.io.retry.RetryInvocationHandler$Call:invokeOnce:RetryInvocationHandler.java:96, org.apache.hadoop.io.retry.RetryInvocationHandler:invoke:RetryInvocationHandler.java:362, com.sun.proxy.$Proxy30:getFileInfo::-1, org.apache.hadoop.hdfs.DFSClient:getFileInfo:DFSClient.java:1739, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1829, org.apache.hadoop.hdfs.DistributedFileSystem$29:doCall:DistributedFileSystem.java:1826, org.apache.hadoop.fs.FileSystemLinkResolver:resolve:FileSystemLinkResolver.java:81, org.apache.hadoop.hdfs.DistributedFileSystem:getFileStatus:DistributedFileSystem.java:1841, org.apache.hadoop.fs.FileSystem:exists:FileSystem.java:1862, org.apache.hadoop.hive.ql.exec.Utilities:ensurePathIsWritable:Utilities.java:4486, org.apache.hadoop.hive.ql.session.SessionState:createRootHDFSDir:SessionState.java:760, org.apache.hadoop.hive.ql.session.SessionState:createSessionDirs:SessionState.java:701, org.apache.hadoop.hive.ql.session.SessionState:start:SessionState.java:627], errorCode:0, errorMessage:Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: mumu is not allowed to impersonate mumu), serverProtocolVersion:null)
看来代理问题依然存在,即使改成 mumu 也不行。我们需要从根本上解决这个问题。
🔧 解决方案:配置 Hadoop 代理用户 + 关闭 Hive 模拟
步骤 1:配置 Hadoop core-site.xml
在 WSL2 中执行:
bash
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
确保有以下配置:
xml
<property>
<name>hadoop.proxyuser.mumu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.mumu.groups</name>
<value>*</value>
</property>
步骤 2:关闭 HiveServer2 的模拟(impersonation)
编辑 $HIVE_HOME/conf/hive-site.xml:
bash
sudo nano $HIVE_HOME/conf/hive-site.xml
添加或修改以下配置:
xml
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
doAs=false 的作用 :让 HiveServer2 直接以启动用户(mumu)身份执行所有操作,不再尝试模拟其他用户。
步骤 3:重启所有服务
bash
# 停止 HiveServer2
pkill -f hiveserver2
# 重启 Hadoop
$HADOOP_HOME/sbin/stop-all.sh
$HADOOP_HOME/sbin/start-all.sh
# 重启 HiveServer2
nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 &
# 等待几秒后检查端口
netstat -tlnp | grep 10000
步骤 4:在 DBeaver 中重试
连接参数保持不变:
-
主机:
172.18.230.242 -
端口:
10000 -
用户名:
mumu -
密码:留空
点击 "测试连接"。
📝 如果还是不行
在 JDBC URL 后面加上 ;auth=noSasl:
text
jdbc:hive2://172.18.230.242:10000/default;auth=noSasl
🎯 两个配置的作用
| 配置 | 作用 |
|---|---|
hadoop.proxyuser.mumu.* |
允许 mumu 代理其他用户(Hadoop 层面) |
hive.server2.enable.doAs=false |
关闭模拟,直接用 mumu 身份执行(Hive 层面) |
两个一起配置,双重保险。
执行完告诉我结果!这次应该能搞定 👍
bash
mumu@MuJinqiu:~$ sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml [sudo] password for mumu: mumu@MuJinqiu:~$ sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml mumu@MuJinqiu:~$ sudo nano $HIVE_HOME/conf/hive-site.xml mumu@MuJinqiu:~$ pkill -f hiveserver2 mumu@MuJinqiu:~$ stop-all.sh WARNING: Stopping all Apache Hadoop daemons as mumu in 10 seconds. WARNING: Use CTRL-C to abort. Stopping namenodes on [localhost] Stopping datanodes Stopping secondary namenodes [MuJinqiu] Stopping nodemanagers Stopping resourcemanager [2]+ Exit 143 nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 mumu@MuJinqiu:~$ start-all.sh WARNING: Attempting to start all Apache Hadoop daemons as mumu in 10 seconds. WARNING: This is not a recommended production deployment configuration. WARNING: Use CTRL-C to abort. Starting namenodes on [localhost] Starting datanodes Starting secondary namenodes [MuJinqiu] Starting resourcemanager Starting nodemanagers mumu@MuJinqiu:~$ nohup hive --service hiveserver2 > /tmp/hiveserver2.log 2>&1 & [2] 43753 mumu@MuJinqiu:~$ netstat -tlnp | grep 10000 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp6 0 0 :::10000 :::* LISTEN 43753/java mumu@MuJinqiu:~$
完美!🎉 所有配置都已完成,HiveServer2 成功启动并监听在 10000 端口!
text
tcp6 0 0 :::10000 :::* LISTEN 43753/java ✅
🚀 现在在 DBeaver 中测试连接
连接参数保持不变:
| 配置项 | 填写内容 |
|---|---|
| 主机 | 172.18.230.242 |
| 端口 | 10000 |
| 用户名 | mumu |
| 密码 | 留空 |
| 数据库/模式 | default |
点击 "测试连接",应该能成功了!
🎯 如果还不行(备用方案)
在 JDBC URL 后面加上 ;auth=noSasl:
text
jdbc:hive2://172.18.230.242:10000/default;auth=noSasl
✅ 连接成功后
你可以在 DBeaver 中:
-
浏览
default数据库中的表 -
执行 SQL 查询:
SHOW TABLES; -
创建测试表:
CREATE TABLE test (id INT); -
插入数据:
INSERT INTO test VALUES (1);
点 "测试连接",告诉我结果!应该搞定了 🎉
HiveServer2 为什么需要单独重启
好问题!这涉及到 HiveServer2 和 Hadoop 的关系,简单来说:
📌 HiveServer2 为什么需要单独重启
1. HiveServer2 是一个独立的 Java 进程
它有自己的 JVM 进程,和 Hadoop 的 NameNode、DataNode 等进程是相互独立的。启动/停止 Hadoop 不会自动控制 HiveServer2 的生命周期。
2. 配置加载时机
HiveServer2 的配置(hive-site.xml)只在启动时加载一次。修改配置后,必须重启 HiveServer2 才能让新配置生效。
3. 你刚才的操作顺序
text
修改 core-site.xml → 修改 hive-site.xml → 停止 Hadoop → 启动 Hadoop → 重启 HiveServer2
-
为什么重启 Hadoop :因为你改了
core-site.xml(Hadoop 的配置),所以需要重启 Hadoop 让代理用户配置生效 -
为什么重启 HiveServer2 :因为改了
hive-site.xml(Hive 的配置),所以需要重启 HiveServer2 让doAs=false生效
🔄 重启顺序
虽然 HiveServer2 和 Hadoop 可以独立重启,但顺序有讲究:
text
1. 启动 Hadoop(依赖基础)
↓
2. 启动 Metastore(Hive 元数据服务)
↓
3. 启动 HiveServer2(依赖 Hadoop + Metastore)
所以 :如果 Hadoop 重启了(比如你用了 stop-all.sh + start-all.sh),HiveServer2 也必须重启,因为它依赖 Hadoop 服务,否则会连接不上。
✅ 一句话总结
改了 Hadoop 配置 → 重启 Hadoop;改了 Hive 配置 → 重启 HiveServer2。如果 Hadoop 重启了,HiveServer2 也必须跟着重启。
现在去 DBeaver 点 "测试连接" 吧,应该成功了!🎉
显示已连接
🎉🎉🎉 恭喜!连接成功!
从截图可以看到:
-
✅ 连接时间 显示已建立连接
-
✅ URL 正确指向 HiveServer2
-
✅ 地址
172.18.230.242:10000可访问 -
✅ 数据库
default已加载
🚀 现在可以开始使用了!
在 DBeaver 中你可以:
1. 浏览数据库结构
-
展开左侧的
default数据库 -
查看已有的表、视图
2. 执行 SQL 查询
-
右键点击
default→ SQL 编辑器 → 新建 SQL 编辑器 -
输入查询,例如:
sql
-- 查看所有表 SHOW TABLES; -- 查看表结构 DESCRIBE your_table_name; -- 创建测试表 CREATE TABLE test (id INT, name STRING); -- 插入数据 INSERT INTO test VALUES (1, 'hello'); -- 查询数据 SELECT * FROM test;
3. 查看 Hive Web UI
在浏览器访问:http://172.18.230.242:10002
📝 小提示
-
如果以后 WSL2 重启了,IP 地址可能会变,需要在 DBeaver 中更新主机地址
-
每次重启 WSL2 后,需要重新启动 Hadoop 和 HiveServer2