本文详细介绍了在WSL Ubuntu环境下安装配置Hive 3.1.3的完整流程。
主要内容包括:
1)环境准备,确认Hadoop 3.3.6和Java 11已正确安装;
2)下载解压Hive并配置环境变量;
3)创建HDFS目录并设置权限;
4)安装MySQL作为元数据库并配置JDBC连接;
5)初始化Hive元数据;
6)启动Hive并进行基础操作演示(建库、建表、数据导入等);
7)提供常见问题解决方案和快速复现命令。
文中还包含创建内部表/外部表、数据更新删除等进阶操作,以及启动脚本的编写建议,帮助用户快速搭建Hive环境并开展实践练习。
在 WSL Ubuntu 上安装和使用 Hive
根据你的课堂笔记,以下是在你已配置好的 Hadoop 环境上安装和使用 Hive 的完整步骤。
一、环境确认
你已经完成:
-
✅ Hadoop 3.3.6 运行正常
-
✅ Java 11 已配置
-
✅ WSL Ubuntu 环境
bash
# 确认 Hadoop 运行正常
jps
# 应该看到 NameNode, DataNode, ResourceManager, NodeManager
二、下载并安装 Hive
2.1 下载 Hive
bash
cd ~/downloads
# 使用清华镜像下载 Hive 3.1.3(稳定版本,与 Hadoop 3.3.x 兼容)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
# 查看下载文件
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
nano ~/.bashrc
在文件末尾添加:
bash
# Hive 环境变量
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
保存退出(Ctrl+O,Enter,Ctrl+X)
bash
# 使配置生效
source ~/.bashrc
# 验证
hive --version
三、配置 Hive
3.1 创建 Hive 所需目录(在 HDFS 中)
bash
# 创建 Hive 在 HDFS 中的 warehouse 目录
hdfs dfs -mkdir -p /user/hive/warehouse
# 创建临时目录
hdfs dfs -mkdir -p /tmp
# 设置权限(允许 hive 用户读写)
hdfs dfs -chmod 777 /tmp
hdfs dfs -chmod 777 /user/hive/warehouse
3.2 配置 Hive 元数据库(使用 MySQL)
bash
# 安装 MySQL(如果还没安装)
sudo apt update
sudo apt install -y mysql-server
# 启动 MySQL
sudo service mysql start
# 设置 MySQL root 密码(可选)
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';"
3.3 下载 MySQL JDBC 驱动
bash
cd ~/downloads
# 下载 MySQL JDBC 驱动
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar
# 复制到 Hive 的 lib 目录
cp mysql-connector-java-8.0.33.jar $HIVE_HOME/lib/
3.4 创建 Hive 配置文件
bash
# 进入 Hive 配置目录
cd $HIVE_HOME/conf
# 复制模板文件
cp hive-default.xml.template hive-site.xml
cp hive-env.sh.template hive-env.sh
cp hive-log4j2.properties.template hive-log4j2.properties
3.5 编辑 hive-site.xml
bash
nano hive-site.xml
找到并修改以下配置 (可以用 Ctrl+W 搜索):
xml
<!-- 配置 MySQL 作为元数据库 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=UTC</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- Hive 数据仓库在 HDFS 中的位置 -->
<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>
3.6 初始化 Hive 元数据库
bash
# 初始化 schema
schematool -dbType mysql -initSchema
看到 Initialization completed successfully 表示成功。
四、启动 Hive
4.1 启动 Hive 服务
bash
# 1. 确认 Hadoop 已启动
start-all.sh
jps
# 2. 确认 MySQL 已启动
sudo service mysql start
# 3. 启动 Hive
hive
4.2 启动成功标志
text
hive>
五、按照课堂笔记练习
5.1 基础操作
sql
-- 查看数据库
show databases;
-- 创建数据库
create database mydb;
-- 切换数据库
use mydb;
-- 创建表
create table t_score(
sno int,
sname string,
class string,
score float
)
row format delimited fields terminated by '-';
-- 查看所有表
show tables;
-- 查看表结构
desc t_score;
5.2 创建数据文件并导入
在 WSL 终端(Linux 命令行)创建数据文件:
bash
# 创建数据文件
cd ~
cat > score.txt << 'EOF'
101-zhangsan-yuwen-90
102-lisi-shuxue-85
103-wangwu-yingyu-88
EOF
# 上传到 HDFS(Hive 会自动读取 HDFS 路径)
hdfs dfs -mkdir -p /user/mumu/data
hdfs dfs -put score.txt /user/mumu/data/
回到 Hive 窗口:
sql
-- 加载数据到表
load data inpath '/user/mumu/data/score.txt' into table t_score;
-- 查询数据
select * from t_score;
5.3 练习:导入 emp 表
步骤一:创建 emp 数据文件
在 WSL 终端执行:
bash
# 创建 emp 数据文件
cat > ~/emp.txt << 'EOF'
7369 SMITH CLERK 7902 1980-12-17 800.0 20
7499 ALLEN SALESMAN 7698 1981-02-20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-02-22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-04-02 2975.0 20
7654 MARTIN SALESMAN 7698 1981-09-28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-05-01 2850.0 30
7782 CLARK MANAGER 7839 1981-06-09 2450.0 10
7788 SCOTT ANALYST 7566 1987-04-19 3000.0 20
7839 KING PRESIDENT 1981-11-17 5000.0 10
7844 TURNER SALESMAN 7698 1981-09-08 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-05-23 1100.0 20
7900 JAMES CLERK 7698 1981-12-03 950.0 30
7902 FORD ANALYST 7566 1981-12-03 3000.0 20
7934 MILLER CLERK 7782 1982-01-23 1300.0 10
EOF
# 上传到 HDFS
hdfs dfs -put ~/emp.txt /user/mumu/data/
在 Hive 窗口执行:
sql
-- 创建 emp 表
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal float,
comm float,
deptno int
)
row format delimited fields terminated by '\t';
-- 导入数据
load data inpath '/user/mumu/data/emp.txt' into table emp;
-- 查询验证
select * from emp limit 5;
5.4 练习:创建 dept 表
bash
# 在 WSL 终端创建 dept 数据文件
cat > ~/dept.txt << 'EOF'
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
EOF
hdfs dfs -put ~/dept.txt /user/mumu/data/
在 Hive 窗口执行:
sql
-- 创建 dept 表
create table dept(
deptno int,
dname string,
loc string
)
row format delimited fields terminated by '\t';
-- 导入数据
load data inpath '/user/mumu/data/dept.txt' into table dept;
-- 查询
select * from dept;
六、练习课堂笔记中的操作
6.1 更新操作(使用 OVERWRITE)
sql
-- 更新所有10号部门的员工薪资,上调999
insert overwrite table emp
select
empno, ename, job, mgr, hiredate,
case when deptno = 10 then sal + 999 else sal end as sal,
comm, deptno
from emp;
-- 查看更新结果
select deptno, sal from emp;
6.2 删除操作
sql
-- 删除所有岗位是 SALESMAN 的员工
insert overwrite table emp
select * from emp
where job <> 'SALESMAN';
-- 验证
select job, count(*) from emp group by job;
6.3 创建内部表和外部表
sql
-- 创建内部表
create table t_neibu(id int);
-- 创建外部表
create external table t_waibu(id int)
row format delimited fields terminated by '\t';
-- 查看表类型
desc formatted t_neibu;
desc formatted t_waibu;
七、启动/停止脚本更新
7.1 更新启动脚本
bash
nano ~/bin/start-hadoop.sh
添加 Hive 相关服务:
bash
#!/bin/bash
echo "========================================="
echo "Starting Hadoop Cluster"
echo "========================================="
# 启动 SSH
echo "1. Starting SSH service..."
sudo service ssh start
# 启动 MySQL
echo "2. Starting MySQL service..."
sudo service mysql start
# 启动 Hadoop
echo "3. Starting Hadoop..."
start-all.sh
# 等待服务启动
echo "4. Waiting 30 seconds for services..."
sleep 30
# 显示进程
echo "5. Checking processes..."
jps
echo ""
echo "========================================="
echo "✅ All services are ready!"
echo " - HDFS UI: http://localhost:9870"
echo " - YARN UI: http://localhost:8088"
echo " - Hive: type 'hive' to start"
echo "========================================="
7.2 创建 Hive 专用脚本
bash
# 创建启动 Hive 的脚本
cat > ~/bin/start-hive.sh << 'EOF'
#!/bin/bash
echo "========================================="
echo "Starting Hive"
echo "========================================="
# 确保 Hadoop 已启动
if ! jps | grep -q "NameNode"; then
echo "Hadoop is not running. Starting Hadoop first..."
start-hadoop.sh
fi
# 启动 Hive
echo "Starting Hive CLI..."
hive
EOF
chmod +x ~/bin/start-hive.sh
八、常见问题解决
问题1:schematool: command not found
bash
# 确保 Hive 环境变量已配置
source ~/.bashrc
echo $HIVE_HOME
问题2:MetaException (message:Version information not found in metastore)
bash
# 重新初始化
schematool -dbType mysql -initSchema
问题3:Hive: command not found
bash
# 检查环境变量
echo $HIVE_HOME
ls $HIVE_HOME/bin/hive
# 重新加载
source ~/.bashrc
问题4:MySQL 连接失败
bash
# 启动 MySQL
sudo service mysql start
# 测试连接
mysql -u root -p -e "show databases;"
九、快速复现命令汇总
bash
# ============ 一键安装 Hive ============
# 1. 下载并安装
cd ~/downloads
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
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. 配置环境变量
echo '' >> ~/.bashrc
echo '# Hive' >> ~/.bashrc
echo 'export HIVE_HOME=/usr/local/hive' >> ~/.bashrc
echo 'export PATH=$PATH:$HIVE_HOME/bin' >> ~/.bashrc
source ~/.bashrc
# 3. 创建 HDFS 目录
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /tmp
hdfs dfs -chmod 777 /tmp
hdfs dfs -chmod 777 /user/hive/warehouse
# 4. 安装 MySQL
sudo apt install -y mysql-server
sudo service mysql start
# 5. 下载 JDBC 驱动
wget -P $HIVE_HOME/lib/ https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.33/mysql-connector-java-8.0.33.jar
# 6. 配置 hive-site.xml
cd $HIVE_HOME/conf
cp hive-default.xml.template hive-site.xml
# 编辑 hive-site.xml(参考上面的配置内容)
# 7. 初始化元数据库
schematool -dbType mysql -initSchema
# 8. 启动 Hive
hive
十、目录结构总览
text
/usr/local/
├── hadoop/ # Hadoop 安装目录
└── hive/ # Hive 安装目录
├── bin/ # Hive 可执行文件
├── conf/ # Hive 配置文件
└── lib/ # Hive 依赖库(含 MySQL 驱动)
~/bin/
├── start-hadoop.sh # Hadoop 启动脚本
├── stop-hadoop.sh # Hadoop 停止脚本
└── start-hive.sh # Hive 启动脚本
现在你可以:
-
启动 Hadoop:
start-hadoop.sh -
启动 Hive:
hive -
按照课堂笔记练习 Hive SQL
有任何问题随时问我!