本教程详细介绍了在Windows11 WSL Ubuntu环境下安装配置Hive 3.1.3的完整流程。


主要内容包括:环境准备(Java8、Hadoop3.3.6、MySQL)、Hive下载安装、MySQL元数据库配置、核心文件设置、Java版本兼容性处理、启动脚本编写以及基础操作测试。


重点解决了常见问题如Java版本冲突、元数据库初始化失败等,并提供了日常使用流程和注意事项。


教程强调必须使用Java8环境,并确保Hadoop和MySQL服务正常运行,最后附有常用命令速查和目录结构说明,帮助用户快速掌握Hive在WSL环境中的部署和使用。


(课堂笔记)Hive 基础

Windows 11 WSL Ubuntu 环境:实际安装 Hive 踩坑实录


在 Windows 11 WSL Ubuntu 上安装和使用 Hive 完整教程

本教程基于你在 WSL Ubuntu 环境中的实际操作经验整理,适用于已经配置好 Hadoop 3.3.6 的环境。


一、环境要求

1.1 已安装的环境

  • ✅ Windows 11 + WSL2 + Ubuntu(22.04 或 24.04)

  • ✅ Hadoop 3.3.6 正常运行

  • ✅ Java 8(Hive 3.1.3 推荐使用 Java 8)

  • ✅ MySQL 作为元数据库

1.2 检查当前环境

bash

# 检查 Java 版本(必须是 Java 8)
java -version

# 检查 Hadoop 是否运行
jps
# 应该看到:NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager

# 如果 Hadoop 未启动
start-all.sh

二、下载并安装 Hive

2.1 下载 Hive 3.1.3

bash

cd ~/downloads

# 使用华为云的镜像源下载
wget https://repo.huaweicloud.com/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

# 文件大小约 312MB,下载完成后验证
ls -lh apache-hive-3.1.3-bin.tar.gz

2.2 解压安装

bash

# 解压到 /usr/local
sudo tar -xzvf apache-hive-3.1.3-bin.tar.gz -C /usr/local/

# 重命名目录
sudo mv /usr/local/apache-hive-3.1.3-bin /usr/local/hive

# 修改权限
sudo chown -R $(whoami):$(whoami) /usr/local/hive

2.3 配置环境变量

bash

# 编辑 .bashrc
vim ~/.bashrc

在文件末尾添加:

bash

# Hive Environment Variables
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin

保存退出后:

bash

# 使配置生效
source ~/.bashrc

# 验证安装
hive --version

预期输出Hive 3.1.3


三、配置 Hive 元数据库(MySQL)

3.1 检查并配置 MySQL

bash

# 检查 MySQL 状态
sudo service mysql status

# 如果未运行,启动 MySQL
sudo service mysql start

3.2 设置 MySQL root 密码(如未设置)

bash

# 无密码登录
sudo mysql

# 在 MySQL 中执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
EXIT;

# 验证登录
mysql -u root -p123456 -e "show databases;"

3.3 下载 MySQL JDBC 驱动

bash

cd ~/downloads

# 下载驱动(注意新版本路径)
wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar

# 复制到 Hive lib 目录
cp mysql-connector-j-8.0.33.jar $HIVE_HOME/lib/

# 验证
ls $HIVE_HOME/lib/mysql-connector*.jar

四、配置 Hive 核心文件

4.1 创建 hive-site.xml

bash

cd $HIVE_HOME/conf

# 创建配置文件
vim hive-site.xml

输入以下内容:

xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <!-- MySQL 数据库连接 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&amp;useSSL=false&amp;serverTimezone=UTC</value>
    </property>
    
    <!-- MySQL JDBC 驱动 -->
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.cj.jdbc.Driver</value>
    </property>
    
    <!-- MySQL 用户名 -->
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    
    <!-- MySQL 密码 -->
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    
    <!-- Hive 数据仓库存储位置 -->
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    
    <!-- Hive 临时目录 -->
    <property>
        <name>hive.exec.scratchdir</name>
        <value>/tmp/hive</value>
    </property>
    
    <!-- 显示当前数据库 -->
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
    
    <!-- 显示字段名称 -->
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
</configuration>

4.2 创建 HDFS 目录

bash

# 创建必要的 HDFS 目录
hdfs dfs -mkdir -p /tmp
hdfs dfs -mkdir -p /user/hive/warehouse

# 设置权限
hdfs dfs -chmod 777 /tmp
hdfs dfs -chmod 777 /user/hive/warehouse

# 验证
hdfs dfs -ls /

4.3 初始化 Hive 元数据库

bash

# 删除旧数据库(如果存在)
mysql -u root -p123456 -e "DROP DATABASE IF EXISTS metastore;"

# 初始化 schema
schematool -dbType mysql -initSchema

预期输出Initialization completed successfully


五、处理 Java 版本兼容性问题

5.1 问题现象

如果使用 Java 11 或 17,可能会遇到:

  • Module java.xml.bind not found

  • ClassCastException 错误

5.2 解决方案:使用 Java 8

bash

# 安装 Java 8
sudo apt update
sudo apt install -y openjdk-8-jdk

# 切换到 Java 8
sudo update-alternatives --config java
# 选择 Java 8(通常选项编号为 2)

# 更新环境变量
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64' >> ~/.bashrc
source ~/.bashrc

# 验证
java -version

5.3 清理 Java 11 残留参数

bash

# 清理所有配置文件中的 --add-modules
sed -i '/--add-modules/d' ~/.bashrc
sed -i '/--add-modules/d' $HADOOP_HOME/etc/hadoop/hadoop-env.sh
sed -i '/--add-modules/d' $HADOOP_HOME/etc/hadoop/yarn-env.sh

# 清空环境变量
unset HADOOP_OPTS
export HADOOP_OPTS=""

# 重启 Hadoop
stop-all.sh
start-all.sh

六、启动 Hive

6.1 确保服务正常运行

bash

# 1. 检查 Hadoop 进程
jps
# 应该看到:NameNode, DataNode, SecondaryNameNode, ResourceManager, NodeManager

# 2. 检查 MySQL
sudo service mysql status

# 3. 清空环境变量
unset HADOOP_OPTS
export HADOOP_OPTS=""

6.2 启动 Hive

bash

hive

预期看到

text

hive (default)>

七、创建启动脚本(推荐)

7.1 创建 Hadoop + Hive 启动脚本

bash

# 创建启动脚本
cat > ~/bin/start-hive.sh << 'EOF'
#!/bin/bash

# 清空 Java 11 兼容性参数
unset HADOOP_OPTS
unset HADOOP_CLIENT_OPTS
unset HIVE_OPTS
export HADOOP_OPTS=""

echo "========================================="
echo "Starting Hive"
echo "========================================="

# 确保 Hadoop 已运行
if ! jps | grep -q "NameNode"; then
    echo "Hadoop is not running. Please run start-hadoop.sh first"
    exit 1
fi

# 启动 MySQL
sudo service mysql start

# 启动 Hive CLI
hive
EOF

chmod +x ~/bin/start-hive.sh

7.2 使用脚本

bash

# 先启动 Hadoop
start-hadoop.sh

# 再启动 Hive
start-hive.sh

八、Hive 基础操作测试

8.1 基本命令

sql

-- 查看数据库
show databases;

-- 创建数据库
create database mydb;

-- 切换数据库
use mydb;

-- 创建表
create table test(id int, name string);

-- 查看表
show tables;

-- 插入数据
insert into test values(1, 'hello');

-- 查询数据
select * from test;

-- 退出
exit;

8.2 按照课堂笔记练习

sql

-- 创建 t_score 表
create table t_score(
    sno int,
    sname string,
    class string,
    score float
)
row format delimited fields terminated by '-';

8.3 导入数据文件

在另一个 SSH 窗口中:

bash

# 创建数据文件
cat > ~/score.txt << 'EOF'
101-zhangsan-yuwen-90
102-lisi-shuxue-85
103-wangwu-yingyu-88
EOF

# 上传到 HDFS
hdfs dfs -mkdir -p /user/mumu
hdfs dfs -put ~/score.txt /user/mumu/

回到 Hive:

sql

-- 加载数据
load data inpath '/user/mumu/score.txt' into table t_score;

-- 查询验证
select * from t_score;

九、常见问题及解决

9.1 Hive 启动报错 Module java.xml.bind not found

原因:使用了 Java 11/17,Hive 3.1.3 不兼容

解决:切换到 Java 8

bash

sudo update-alternatives --config java
# 选择 Java 8

9.2 Unable to instantiate SessionHiveMetaStoreClient

原因:元数据库未正确初始化

解决

bash

mysql -u root -p123456 -e "DROP DATABASE IF EXISTS metastore;"
schematool -dbType mysql -initSchema

9.3 Connection refused 连接 HDFS 失败

原因:Hadoop 未启动或 NameNode 未运行

解决

bash

jps  # 检查进程
start-all.sh  # 重启 Hadoop

9.4 JDBC 驱动下载 404

原因:Maven 仓库路径变更

解决:使用新路径

bash

wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.33/mysql-connector-j-8.0.33.jar

十、Hive 常用命令速查

命令 说明
show databases; 查看所有数据库
create database 数据库名; 创建数据库
use 数据库名; 切换数据库
show tables; 查看当前数据库的所有表
desc 表名; 查看表结构
create table ... 创建表
load data inpath '路径' into table 表名; 加载数据
select * from 表名; 查询数据
drop table 表名; 删除表
exit; 退出 Hive

十一、目录结构总览

text

/usr/local/
├── hadoop/          # Hadoop 安装目录
│   ├── bin/
│   ├── etc/
│   ├── logs/
│   └── sbin/
└── hive/            # Hive 安装目录
    ├── bin/         # Hive 可执行文件
    ├── conf/        # Hive 配置文件
    │   └── hive-site.xml
    └── lib/         # Hive 依赖库
        └── mysql-connector-j-8.0.33.jar

~/bin/
├── start-hadoop.sh  # Hadoop 启动脚本
├── stop-hadoop.sh   # Hadoop 停止脚本
└── start-hive.sh    # Hive 启动脚本

十二、日常使用流程

12.1 启动所有服务

bash

# 方法一:分步启动
start-hadoop.sh    # 启动 Hadoop
start-hive.sh      # 启动 Hive

# 方法二:直接启动 Hive(会检查 Hadoop 状态)
start-hive.sh

12.2 停止服务

bash

stop-hadoop.sh     # 停止 Hadoop

12.3 验证服务状态

bash

jps               # 查看 Java 进程
hdfs dfs -ls /    # 测试 HDFS

十三、注意事项

项目 说明
Java 版本 Hive 3.1.3 必须使用 Java 8,否则会有兼容性问题
Hadoop 状态 启动 Hive 前确保 Hadoop 正在运行
MySQL 服务 确保 MySQL 已启动:sudo service mysql start
环境变量 启动前清空 HADOOP_OPTSunset HADOOP_OPTS
SLF4J 警告 可以忽略,不影响使用
Hive-on-MR 警告 表示使用 MapReduce,正常现象

恭喜!你已经成功在 WSL Ubuntu 上安装并配置了 Hive,可以开始按照课堂笔记练习了!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐