(踩坑实录)Win11,配置 DBeaver 连接 WSL2 中的 Hive

本文详细介绍了在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 服务已经正确安装并启动。

  1. 安装 Hadoop 与 Hive:在 WSL2 中下载并解压 Hadoop 和 Hive,并配置好 JAVA_HOMEHADOOP_HOMEHIVE_HOME 等环境变量。

  2. 配置 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>
  3. 启动 HiveServer2 服务
    DBeaver 通过 JDBC 连接,所以需要在 WSL2 中启动 HiveServer2 服务。在 WSL2 终端中执行:

    bash

    hive --service metastore &
    hive --service hiveserver2 &

    HiveServer2 默认监听端口是 10000

🔗 核心步骤:打通网络连接

WSL2 默认使用 NAT 网络,在 Windows 宿主机上无法直接用 localhost 访问,需要获取 WSL2 的真实 IP。

  1. 获取 WSL2 IP 地址:在 Windows 的 PowerShell 或 CMD 中执行以下命令,记下输出的 IP 地址:

    powershell

    wsl -- hostname -I

    输出示例:172.30.98.229这个地址就是稍后 DBeaver 要填的“主机名/地址”。

更优方案(推荐):如果想一劳永逸,可以开启 WSL2 的镜像网络模式。这样 WSL2 会和 Windows 共享网络,你就可以直接用 localhost 访问了。具体方法是编辑用户目录下的 .wslconfig 文件,添加 networkingMode=mirrored 并重启 WSL。这种方式对学习环境更友好。

⚙️ 配置 DBeaver 连接

  1. 新建连接:在 DBeaver 中点击“新建数据库连接”,选择 Apache Hive

  2. 填写连接信息

    • 主机/地址:填入上一步获取的 WSL2 IP 地址(如 172.30.98.229)。如果开启了镜像网络模式,直接填 localhost 或 127.0.0.1 即可。

    • 端口:默认是 10000

    • 用户名/密码:如果未设置,随便填一个(如 hive)即可。

  3. 配置 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

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 文件夹存在且有 logseg0 等文件,说明之前用过 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 | grep jdbc

查完如果确认是 Derby,但你又想改成 MySQL 方便多客户端连接,或者需要清理历史数据重新开始,都可以告诉我,我可以给你具体的操作步骤。先看看结果是什么吧 😄

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&amp;useSSL=false&amp;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

# 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 了。需要注意:

  1. 获取 WSL2 IP 地址(因为 WSL2 默认是 NAT 模式):

    powershell

    # 在 Windows PowerShell 中执行
    wsl -- hostname -I
  2. 在 DBeaver 中填写

    • 主机:填上一步获取的 IP(如 172.30.98.229

    • 端口:10000(HiveServer2 默认端口)

    • 用户名/密码:随便填(如 hive/hive

  3. 如果连不上,先确认 HiveServer2 服务在 WSL2 中已经启动:

    bash

    # 检查端口是否在监听
    netstat -tlnp | grep 10000
    # 如果没有输出,启动服务
    hive --service metastore &
    hive --service hiveserver2 &

需要我帮你看一下 HiveServer2 是否已经启动了吗?或者可以直接试试连接 DBeaver,遇到什么报错随时发给我。

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

# 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

# 先启动 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,如果启动失败可以查看这两个文件排查问题

  • 第一次启动可能需要几秒钟时间初始化


执行完上面的命令后,告诉我:

  1. netstat -tlnp | grep 10000 的输出结果

  2. 如果启动失败,把 /tmp/hiveserver2.log 的最后几行发给我

这样我就能帮你判断下一步该怎么做了 👍

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

# 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 进程,如果看到 NameNodeDataNode 等进程,说明 Hadoop 在运行。如果没有任何输出,需要先启动 Hadoop。

执行完告诉我结果,我们一步步来 👍

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

这样我就能快速判断是:

  1. Hadoop 没启动

  2. MySQL 连接配置有问题(用户名/密码错误)

  3. 其他配置问题

把结果贴过来,我们接着解决 👍

HiveServer2好像没有安装

哦!这就说得通了 —— HiveServer2 没有安装,所以你之前一直在尝试启动一个不存在的服务。


🔍 先确认一下 Hive 的安装情况

在 WSL2 中执行以下命令,看看你装的是什么版本的 Hive,以及都装了哪些组件:

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

把结果贴过来,我们接着分析 👍

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

把这三个命令的输出一起发给我:

  1. tail -100 /tmp/hiveserver2.log

  2. jps

  3. (如果上面没有日志)前台启动 $HIVE_HOME/bin/hiveserver2 的报错

这样我就能快速定位问题根源了 👍

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 端口。这可能意味着:

  1. 日志不完整(只记录了启动初期的信息,没有后续)

  2. 启动过程中卡住了(比如在等待某些资源)

  3. 进程已经退出了(后面的错误没记录到日志)

让我们进一步诊断:


🔍 检查进程状态

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 元数据的,这些通常不影响启动。可能的问题是:

  1. Hadoop 没启动(最可能)

  2. MySQL 连接认证失败(Hive 元数据库)

  3. 端口 10000 被占用

先执行这个快速检查:

bash

echo "=== Hadoop 进程 ===" && jps && echo "" && echo "=== 端口 10000 ===" && sudo netstat -tlnp | grep 10000

把输出发给我,我们一步步定位问题 👍

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

如果输出里没有 NameNodeDataNode 等进程,说明 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

把下面三个命令的输出发给我

  1. jps(看 Hadoop 是否在运行)

  2. tail -30 /tmp/metastore.log(看 Metastore 日志)

  3. 如果前台启动 hiveserver2,最后 20 行输出

这样我就能准确判断问题在哪里了 👍

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 启动时通常会:

  1. ✅ 加载配置

  2. ✅ 连接 Metastore

  3. ⏳ 初始化 Thrift 服务(可能卡在这里)

  4. ⏳ 启动 Web UI(端口 10002)

检查一下其他端口:

bash

# 检查 Hive 相关的所有端口
sudo netstat -tlnp | grep -E "10000|10001|10002|9083"

🚨 可能的原因

从你的情况看,最可能的原因是:

  1. HiveServer2 启动时连接 MySQL 元数据库失败(日志没显示错误,但可能卡在连接阶段)

  2. 内存不足(HiveServer2 启动需要较多内存)

  3. 配置文件问题(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,把结果发过来,我们继续排查 👍

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

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 连接失败,检查:

  1. Windows 防火墙:临时关闭防火墙测试一下

  2. HiveServer2 是否还在运行ps aux | grep hiveserver2

  3. WSL2 IP 是否正确:每次重启 WSL2,IP 可能会变,需要重新获取


🎯 最终确认

执行这个命令,把结果发给我确认:

bash

sudo netstat -tlnp | grep -E "10000|10002" && echo "=== WSL2 IP ===" && hostname -I

如果端口正常,你就可以在 DBeaver 中连接了!🎉

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 连接配置

  1. 打开 DBeaver,点击 新建数据库连接

  2. 选择 Apache Hive

  3. 填写连接信息:

    • 主机/地址:填上一步获取的 IP(如 172.30.98.229

    • 端口10000

    • 用户名hive(随便填,Hive 默认不验证)

    • 密码hive(随便填)

    • 数据库/模式default(或者留空)

  4. 点击 测试连接,应该能看到成功提示


📌 如果连接失败

检查 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,告诉我结果如何!如果遇到报错,把错误信息发给我 👍

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(或留空)

📝 详细操作步骤

  1. 打开 DBeaver → 点击左上角 "新建连接" 图标(插头+文件夹图标)

  2. 在搜索框输入 Hive,选择 Apache Hive,点击下一步

  3. 在 "主要" 选项卡中填写上面的连接信息

  4. 点击 "测试连接" 按钮

  5. 如果提示需要下载驱动,点击 "下载" 即可(DBeaver 会自动下载 Hive JDBC 驱动)


✅ 连接成功后

你可以:

  • 浏览 default 数据库中的表

  • 执行 SQL 查询(如 SHOW TABLES;

  • 创建表、插入数据等学习操作


🔧 如果连接失败

把 DBeaver 的错误提示发给我,常见问题:

  1. 驱动版本不匹配 — DBeaver 自动下载的驱动可能和 Hive 3.1.3 不兼容,需要手动添加驱动

  2. 防火墙阻挡 — Windows 防火墙可能阻止了访问

  3. 连接超时 — IP 地址是否正确

如果遇到错误,把完整的错误信息贴过来,我帮你解决 👍

快去试试吧!🎉

在 DBeaver 中配置连接,选择哪个呢?

从截图看,你当前在 DBeaver Sample Database (SQLite) 示例数据库的界面。要创建新的 Hive 连接,请按以下步骤操作:


🚀 创建新连接的步骤

方法一:使用菜单栏

点击顶部菜单栏的 数据库(D) → 选择 新建连接(N)

text

数据库(D) → 新建连接(N)

方法二:使用工具栏

点击工具栏最左侧的 "新建" 图标(通常是一个带加号的插头图标 📌)

方法三:使用快捷键

直接按 Ctrl + Shift + N(底部状态栏提示的快捷键)


📝 选择 Hive 驱动

在弹出的 "连接到数据库" 窗口中:

  1. 在搜索框输入 hive

  2. 在结果列表中,选择 Apache Hive

    text

    🗂️  All → 搜索 "hive" → 选择 "Apache Hive"
  3. 点击 "下一步"


⚙️ 填写连接参数

在连接配置页面填写:

字段填写内容
主机/地址172.18.230.242
端口10000
用户名hive
密码hive(可留空)
数据库/模式default(可留空)

✅ 测试连接

  1. 点击左下角的 "测试连接" 按钮

  2. 如果提示下载驱动,点击 "下载" 允许 DBeaver 自动下载 Hive JDBC 驱动

  3. 看到 "连接成功" 提示后,点击 "完成"


📌 注意

确保你选的是 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 + 学习使用),选择「新建数据库连接」即可 ✅

理由:

  1. Hive 是 DBeaver 原生支持的数据库类型

  2. 可视化表单更直观,不容易出错

  3. 只需要填写 IP、端口、用户名这 3 个字段

  4. DBeaver 会自动处理驱动兼容性问题


📝 如何选择

情况推荐方式
初学者/常规连接新建数据库连接 ✅
需要添加特殊参数从 JDBC URL 新建
复制别人的连接配置从 JDBC URL 新建
连接 DBeaver 不支持的数据库从 JDBC URL 新建(使用通用 JDBC)

💡 小提示

如果你后续需要添加特殊参数(比如 Hive 的认证方式),可以在「新建数据库连接」方式下,点击 "驱动属性" 或 "高级" 选项卡,以键值对形式添加参数,而不需要手动写 JDBC URL。

所以现在你只需要点击 "新建数据库连接",然后搜索 Apache Hive 就可以了!😊

选择哪个hive

根据你的 Hive 版本(3.1.3),应该选择 Apache Hive 2 ✅


📌 选择说明

选项适用版本你的情况
Apache Hive 2Hive 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

如果遇到这个问题,需要手动更换驱动版本。具体方法是:

  1. 在连接配置窗口点击 "编辑驱动"(通常在左下角)

  2. 切换到 "库" 选项卡

  3. 删除自动下载的驱动,手动添加与 Hive 3.1.3 兼容的 JDBC 驱动包(通常用 hive-jdbc-3.1.3-standalone.jar


✅ 现在操作

  1. 选择 Apache Hive 2

  2. 点击 "下一步"

  3. 填写连接参数:

    • 主机:172.18.230.242

    • 端口:10000

    • 用户名:hive

    • 密码:hive(或留空)

  4. 点击 "测试连接"

如果测试成功,直接点击完成即可 🎉

如果报错,把错误信息发给我,我帮你解决!

下载驱动文件,已经失败了好几次。

驱动下载失败是常见问题,因为 GitHub 在国内访问不稳定。我们手动下载驱动并导入。


📥 方法一:手动下载驱动(推荐)

步骤 1:在 Windows 上下载驱动

用浏览器打开以下链接(选择其中一个能用的):

镜像站下载地址
国内镜像(推荐)https://mirrors.huaweicloud.com/repository/maven/org/apache/hive/hive-jdbc/3.1.3/hive-jdbc-3.1.3-standalone.jar
GitHub 原地址https://github.com/timveil/hive-jdbc-uber/releases/download/v3.1.3/hive-jdbc-uber-3.1.3.jar

或者使用我提供的备用下载方式,在 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 中导入驱动

  1. 在连接配置窗口中,点击 "编辑驱动" 按钮(在"测试连接"按钮附近)

  2. 切换到 "库" 选项卡

  3. 在左侧列表中,删除所有已下载的驱动包(选中后点"删除")

  4. 点击 "添加文件" 按钮

  5. 选择你刚才下载的 hive-jdbc-3.1.3-standalone.jar 文件

  6. 点击 "确定"

  7. 回到连接配置页面,点击 "测试连接"


🔄 方法二:让 DBeaver 使用 WSL2 中的 Hive 库

如果你已经在 WSL2 中有完整的 Hive 安装,可以直接用 Hive 自带的 jar 包:

  1. 点击 "编辑驱动"

  2. 切换到 "库" 选项卡

  3. 删除所有自动下载的包

  4. 点击 "添加文件",然后在路径中输入:

    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,直接用它就行,不需要重新下载。


先去试试下载,把结果告诉我 👍

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 中配置驱动

  1. 在连接配置窗口,点击 "编辑驱动" 按钮

  2. 切换到 "库" 选项卡

  3. 在左侧列表选中所有已下载的驱动包,点击 "删除"

  4. 点击 "添加文件"

  5. 浏览到 C:\hive-jdbc\hive-jdbc-3.1.3-standalone.jar(或你复制到的位置),选中它

  6. 点击 "确定" 保存


✅ 测试连接

回到连接配置主界面:

  • 主机:172.18.230.242

  • 端口:10000

  • 用户名:hive

  • 密码:留空或填 hive

点击 "测试连接",应该就能成功了!🎉


📌 如果还有问题

如果测试连接报错,把错误信息发给我。常见的可能问题:

  1. 缺少依赖包hive-jdbc-standalone.jar 应该包含所有依赖,一般没问题

  2. 版本不匹配:3.1.3 的驱动和你的 Hive 版本完全匹配,没问题

  3. 认证问题:如果报 SASL 相关错误,可以在 JDBC URL 中添加 ;auth=noSasl 参数

去试试吧!👍

驱动文件正在下载中,也不能中间停止吧,不然还有脏文件要清理

你说得对!等它下载完再处理更干净。下载完成后:


📋 下载完成后的操作

1. 在 DBeaver 中替换驱动

下载完成后,连接配置窗口应该会显示"下载完成"。然后:

  1. 点击 "编辑驱动" 按钮

  2. 切换到 "库" 选项卡

  3. 左侧列表里会显示自动下载的驱动包

  4. 点击 "添加文件",选择 WSL2 里的本地驱动:

    • 路径:\\wsl.localhost\Ubuntu\usr\local\hive\jdbc\hive-jdbc-3.1.3-standalone.jar

    • 或者先复制到 C:\hive-jdbc\ 再添加

  5. 勾选本地添加的驱动,取消勾选删除自动下载的驱动

  6. 点击 "确定"


🧹 清理自动下载的文件(可选)

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 成功率最高,兼容性最好。


✅ 如果自动下载的驱动能用呢?

那就直接用,不用替换!

我的建议是:

  1. 先测试连接:用自动下载的驱动直接点"测试连接"

  2. 如果成功 → ✅ 直接用,什么都不用改

  3. 如果报错 → ❌ 再手动替换成本地驱动


🎯 最简单的做法

等下载完成后:

  1. 填好连接信息(主机、端口、用户名)

  2. 直接点 "测试连接"

  3. 成功 → 点"完成",收工 🎉

  4. 失败 → 再按刚才说的替换驱动方案


所以你现在可以:

  1. 耐心等待下载完成

  2. 填写连接参数

  3. 点"测试连接"试一下

把结果告诉我,成功还是失败,我们接着处理 👍

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

或者在 "驱动属性" 选项卡中添加键值对:

authnoSasl

🚀 测试连接

修改用户名后,直接点击 "测试连接",应该就能成功了!

如果还有报错,把新错误信息发给我。但大概率改成 mumu 就搞定了 🎉

这样写对吗

完全正确! ✅ 配置没问题,可以直接点击 "测试连接"


✅ 你的配置摘要

配置项填写内容状态
连接方式主机
主机172.18.230.242
端口10000
数据库/模式default
用户名mumu
密码留空

🚀 现在点击「测试连接」

应该能成功连接了!


如果还是报错

把错误信息截图或文字发给我。最常见的后续问题是:

  1. SASL 认证错误 → 在 JDBC URL 后面加 ;auth=noSasl

  2. 驱动版本问题 → 需要替换成你本地的 hive-jdbc-3.1.3-standalone.jar

  3. 防火墙问题 → Windows 防火墙阻挡了端口 10000


点 "测试连接" 试试看,告诉我结果!🎉

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 层面)

两个一起配置,双重保险。


执行完告诉我结果!这次应该能搞定 👍

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 中:

  1. 浏览 default 数据库中的表

  2. 执行 SQL 查询:SHOW TABLES;

  3. 创建测试表:CREATE TABLE test (id INT);

  4. 插入数据: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星汉灿烂星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值