本文是大数据系列第 12 篇,介绍 Hive 数据仓库的基本概念、架构原理,以及在三节点 Hadoop 集群上安装 Hive 2.3.9 的完整操作步骤。
什么是 Hive
Hive 是基于 Hadoop 的数据仓库工具,核心能力是将结构化数据文件映射为数据库表,并提供类 SQL 的查询语言(HiveQL),底层将 HQL 自动转换为 MapReduce 任务执行。
Hive 不是数据库,它没有自己的存储引擎——数据存在 HDFS,计算依赖 MapReduce/Tez/Spark。
核心特征
- 读多写少:一次写入、多次读取,适合批量离线分析
- SQL 方言:HiveQL 语法接近标准 SQL,降低学习门槛
- 可扩展:支持自定义函数(UDF/UDAF/UDTF)
- 容错:依托 HDFS 和 YARN 的容错机制
Hive 架构
客户端(CLI / JDBC / Web UI)
↓
HiveServer2(Thrift 服务)
↓
Driver(解析 → 编译 → 优化 → 执行)
↓
Metastore(元数据:表结构、分区、HDFS 路径)
↓
执行引擎(MapReduce / Tez / Spark)
↓
HDFS(实际数据存储)
| 组件 | 职责 |
|---|---|
| Driver | SQL 解析、逻辑/物理计划生成 |
| Metastore | 存储元数据(默认 MySQL/MariaDB) |
| HiveServer2 | 对外暴露 JDBC/Thrift 接口 |
| 执行引擎 | 将物理计划提交到 YARN 执行 |
优缺点分析
优点
- 学习成本低,SQL 工程师可快速上手
- 可处理 PB 级数据(MapReduce 水平扩展)
- 支持 UDF,灵活扩展业务逻辑
- 统一元数据管理,与 Spark/Impala 共享 Metastore
缺点
- HQL 表达能力有限,复杂迭代计算难实现
- MapReduce 执行效率低,延迟高(分钟级)
- 自动生成的 MR 代码缺乏针对性优化
- 调优困难,需要深入理解底层机制
安装 Hive 2.3.9
1. 下载与解压
tar -zxvf apache-hive-2.3.9-bin.tar.gz -C /opt/servers/
2. 配置环境变量
编辑 /etc/profile,添加:
export HIVE_HOME=/opt/servers/apache-hive-2.3.9-bin
export PATH=$PATH:$HIVE_HOME/bin
生效:
source /etc/profile
3. 安装并配置 MariaDB(存储元数据)
# 安装 MariaDB
sudo apt install mariadb-server -y
# 配置远程访问(修改绑定地址)
# 编辑 /etc/mysql/mariadb.conf.d/50-server.cnf
# 将 bind-address = 127.0.0.1 改为 0.0.0.0
# 创建 Hive 元数据库和用户
mysql -u root -p
CREATE DATABASE hive_meta DEFAULT CHARACTER SET utf8;
CREATE USER 'hive'@'%' IDENTIFIED BY 'hive123';
GRANT ALL ON hive_meta.* TO 'hive'@'%';
FLUSH PRIVILEGES;
4. 配置 hive-site.xml
在 $HIVE_HOME/conf/ 目录下创建 hive-site.xml:
<configuration>
<!-- 元数据库连接 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://h121.wzk.icu:3306/hive_meta?useSSL=false&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive123</value>
</property>
<!-- Hive 数据仓库路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- CLI 显示优化 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
</configuration>
5. 安装 MySQL JDBC 驱动
将 mysql-connector-java-5.1.x.jar 复制到 $HIVE_HOME/lib/。
6. 初始化元数据 Schema
schematool -dbType mysql -initSchema
成功后会在 MariaDB 中创建约 70 张 Hive 元数据表。
7. 验证安装
hive
# 进入 Hive CLI
hive> show databases;
# 输出: default
数据仓库默认路径
Hive 默认将数据存储在 HDFS 的 /user/hive/warehouse/ 目录下:
- 数据库:
/user/hive/warehouse/<db_name>.db/ - 表:
/user/hive/warehouse/<db_name>.db/<table_name>/
下一篇将介绍 Hive 的 DDL/DML 操作,包括建库、建表、数据导入等基础操作。