在 WSL Ubuntu 上安装和使用 Hive

本文详细介绍了在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环境并开展实践练习。


(课堂笔记)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+OEnterCtrl+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&amp;useSSL=false&amp;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 启动脚本

现在你可以:

  1. 启动 Hadoop:start-hadoop.sh

  2. 启动 Hive:hive

  3. 按照课堂笔记练习 Hive SQL

有任何问题随时问我!

相关推荐
我叫张小白。8 小时前
CentOS 7 安装 MySQL 8.0 完整指南(含远程连接配置)
linux·mysql·centos
ABILI .8 小时前
Linux上安装部署k8s单机版(minikube)
linux·运维·kubernetes
量子炒饭大师8 小时前
【Linux系统编程】——【自动化构建-make/Makefile】拒绝手动编译!构建你的赛博代码加工厂,重塑逻辑矩阵效率极限
linux·运维·自动化·makefile·make·自动化构建
eggrall9 小时前
Linux信号——信号产生
linux·运维·服务器
zincsweet9 小时前
虚拟地址空间
linux
Ha_To9 小时前
26.5.19 未授权漏洞
linux·服务器·网络
ZGUIZ9 小时前
Ubuntu 25.10 蓝牙Wifi不可用解决流程
linux·运维·ubuntu
Irene19919 小时前
Windows 11 WSL Ubuntu 环境:安装 Hadoop 完整指南
hadoop·ubuntu
rising start9 小时前
Linux入门及相关命令
linux·运维·服务器