1. 首页 > Hadoop教程 > 正文

大数据教程FG026-Hive数据仓库基础与架构实战

内容简介:本文详细介绍Hive数据仓库基础与架构实战,包括Hive架构原理、数据模型、存储格式、元数据管理等核心内容。风哥教程参考Hive官方文档Getting Started、Data Model等内容。

目录大纲

Part01-基础概念与理论知识
  1.1 Hive架构概述
  1.2 Hive数据模型
  1.3 Hive存储格式
Part02-生产环境规划与建议
  2.1 Hive架构规划
  2.2 元数据存储规划
  2.3 存储格式规划
Part03-生产环境项目实施方案
  3.1 Hive安装配置
  3.2 数据库与表管理
  3.3 数据导入导出
  3.4 元数据管理
Part04-生产案例与实战讲解
  4.1 数据仓库分层案例
  4.2 数据建模案例
  4.3 数据治理案例
Part05-风哥经验总结与分享
  5.1 Hive最佳实践
  5.2 数据仓库经验总结

Part01-基础概念与理论知识

1.1 Hive架构概述

Hive是构建在Hadoop之上的数据仓库工具。更多视频教程www.fgedu.net.cn Hive将结构化数据文件映射为表,提供类SQL查询功能。

风哥提示:Hive的核心是将HQL转换为MapReduce或Tez任务执行,适合离线批处理场景。

1.2 Hive数据模型

Hive数据模型包括数据库、表、分区、桶等概念。学习交流加群风哥微信: itpux-com

Hive数据模型层次:
– Database:数据库,表的命名空间
– Table:表,分为内部表和外部表
– Partition:分区,按列值划分数据
– Bucket:桶,按哈希划分数据

1.3 Hive存储格式

Hive支持多种存储格式。from bigdata视频:www.itpux.com

# 查看支持的存储格式
hive -e “SHOW FORMATS;”

# 存储格式列表
TextFile
SequenceFile
RCFile
ORC
Parquet
Avro
JSON

Part02-生产环境规划与建议

2.1 Hive架构规划

Hive架构规划需要考虑计算引擎和元数据存储。更多学习教程公众号风哥教程itpux_com

Hive架构建议:
– 计算引擎:推荐使用Tez或Spark
– 元数据存储:使用MySQL存储元数据
– 部署模式:HiveServer2 + Metastore分离部署

2.2 元数据存储规划

元数据存储是Hive的核心组件。学习交流加群风哥QQ113257174

# 查看元数据配置
cat /bigdata/app/hive/conf/hive-site.xml | grep -A3 “metastore”

<!– 元数据库配置 –>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://fgedu01:3306/hive_metastore?createDatabaseIfNotExist=true</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>hive</value>
</property>

2.3 存储格式规划

存储格式选择影响查询性能。风哥提示:列式存储格式适合分析场景。

存储格式选择建议:
– ORC:适合Hive原生场景,压缩比高
– Parquet:适合Spark场景,兼容性好
– TextFile:适合数据导入导出
– 分区格式:按日期分区

Part03-生产环境项目实施方案

3.1 Hive安装配置

3.1.1 安装Hive

# 下载Hive
wget https://downloads.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
tar -xzf apache-hive-3.1.3-bin.tar.gz -C /bigdata/app/
ln -s /bigdata/app/apache-hive-3.1.3-bin /bigdata/app/hive

# 配置环境变量
export HIVE_HOME=/bigdata/app/hive
export PATH=$PATH:$HIVE_HOME/bin

# 初始化元数据库
schematool -dbType mysql -initSchema

# 下载解压
# 完成

# 环境变量
# 配置完成

# 初始化元数据
Metastore connection URL: jdbc:mysql://fgedu01:3306/hive_metastore
Metastore Connection Driver: com.mysql.cj.jdbc.Driver
Metastore connection User: hive
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql
Initialization script completed
schemaTool completed

3.1.2 启动Hive服务

# 启动Metastore服务
nohup hive –service metastore > /bigdata/logs/metastore.log 2>&1 &

# 启动HiveServer2服务
nohup hive –service hiveserver2 > /bigdata/logs/hiveserver2.log 2>&1 &

# 验证服务
netstat -tlnp | grep -E “9083|10000”

# 测试连接
beeline -u “jdbc:hive2://fgedu01:10000” -e “SHOW DATABASES;”

# 服务启动
# Metastore启动成功
# HiveServer2启动成功

# 服务验证
tcp 0 0 0.0.0.0:9083 0.0.0.0:* LISTEN 12345/java
tcp 0 0 0.0.0.0:10000 0.0.0.0:* LISTEN 12346/java

# 连接测试
Connecting to jdbc:hive2://fgedu01:10000
Connected to: Apache Hive
+—————-+
| database_name |
+—————-+
| default |
+—————-+
1 row selected (0.5 seconds)

3.2 数据库与表管理

3.2.1 创建数据库

# 创建数据库
hive -e “CREATE DATABASE IF NOT EXISTS fgedudb LOCATION ‘/bigdata/warehouse/fgedudb.db’;”

# 查看数据库
hive -e “SHOW DATABASES;”

# 查看数据库属性
hive -e “DESCRIBE DATABASE EXTENDED fgedudb;”

# 创建数据库
OK
Time taken: 0.5 seconds

# 数据库列表
default
fgedudb
Time taken: 0.3 seconds

# 数据库属性
db_name: fgedudb
location: hdfs://fgedu01:9000/bigdata/warehouse/fgedudb.db
owner_name: fgedu
owner_type: USER

3.2.2 创建表

# 创建内部表
hive -e “
CREATE TABLE IF NOT EXISTS fgedudb.fgedu_user (
user_id BIGINT,
user_name STRING,
age INT,
gender STRING,
create_time TIMESTAMP
)
COMMENT ‘用户信息表’
PARTITIONED BY (dt STRING)
STORED AS ORC
TBLPROPERTIES (‘orc.compress’=’SNAPPY’);

# 创建外部表
hive -e “
CREATE EXTERNAL TABLE IF NOT EXISTS fgedudb.fgedu_order (
order_id BIGINT,
user_id BIGINT,
order_amount DECIMAL(10,2),
order_time TIMESTAMP
)
COMMENT ‘订单信息表’
PARTITIONED BY (dt STRING)
STORED AS PARQUET
LOCATION ‘/bigdata/warehouse/fgedudb.db/fgedu_order’;

# 查看表结构
hive -e “DESCRIBE FORMATTED fgedudb.fgedu_user;”

# 创建内部表
OK
Time taken: 1.5 seconds

# 创建外部表
OK
Time taken: 1.2 seconds

# 表结构
# col_name data_type comment
user_id bigint
user_name string
age int
gender string
create_time timestamp

# Partition Information
# col_name data_type comment
dt string

# Detailed Table Information
Table Type: MANAGED_TABLE
Storage Format: ORC
Compression: SNAPPY

3.3 数据导入导出

3.3.1 数据导入

# 从本地导入数据
hive -e “
LOAD DATA LOCAL INPATH ‘/bigdata/data/users.csv’
OVERWRITE INTO TABLE fgedudb.fgedu_user PARTITION(dt=’20240118′);

# 从HDFS导入数据
hive -e “
LOAD DATA INPATH ‘/bigdata/warehouse/staging/orders/’
OVERWRITE INTO TABLE fgedudb.fgedu_order PARTITION(dt=’20240118′);

# 使用INSERT导入数据
hive -e “
INSERT OVERWRITE TABLE fgedudb.fgedu_user PARTITION(dt=’20240118′)
SELECT user_id, user_name, age, gender, create_time
FROM fgedudb.fgedu_user_staging;

# 查看数据
hive -e “SELECT COUNT(*) FROM fgedudb.fgedu_user WHERE dt=’20240118′;”

# 本地导入
Loading data to table fgedudb.fgedu_user partition (dt=20240118)
OK
Time taken: 5.0 seconds

# HDFS导入
Loading data to table fgedudb.fgedu_order partition (dt=20240118)
OK
Time taken: 3.0 seconds

# INSERT导入
Loading data to table fgedudb.fgedu_user partition (dt=20240118)
OK
Time taken: 30.0 seconds

# 数据统计
1000000
Time taken: 10.0 seconds

3.3.2 数据导出

# 导出到本地
hive -e “
INSERT OVERWRITE LOCAL DIRECTORY ‘/bigdata/export/users/’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’
SELECT * FROM fgedudb.fgedu_user WHERE dt=’20240118′;

# 导出到HDFS
hive -e “
INSERT OVERWRITE DIRECTORY ‘/bigdata/export/orders/’
STORED AS PARQUET
SELECT * FROM fgedudb.fgedu_order WHERE dt=’20240118′;

# 验证导出
hdfs dfs -ls /bigdata/export/orders/

# 本地导出
OK
Time taken: 15.0 seconds

# HDFS导出
OK
Time taken: 10.0 seconds

# 导出验证
Found 1 items
-rwxr-xr-x 3 fgedu fgedu 52428800 2024-01-18 10:00 /bigdata/export/orders/000000_0

3.4 元数据管理

3.4.1 查看元数据

# 查看表信息
hive -e “SHOW TABLES IN fgedudb;”

# 查看分区信息
hive -e “SHOW PARTITIONS fgedudb.fgedu_user;”

# 查看表统计信息
hive -e “ANALYZE TABLE fgedudb.fgedu_user COMPUTE STATISTICS;”
hive -e “DESCRIBE EXTENDED fgedudb.fgedu_user;”

# 查看列统计信息
hive -e “ANALYZE TABLE fgedudb.fgedu_user COMPUTE STATISTICS FOR COLUMNS;”

# 表列表
fgedu_order
fgedu_user
Time taken: 0.3 seconds

# 分区列表
dt=20240117
dt=20240118
Time taken: 0.2 seconds

# 表统计
Table: fgedudb.fgedu_user
numRows: 1000000
rawDataSize: 100000000
totalSize: 52428800

# 列统计
Column: user_id
min: 1
max: 1000000
ndv: 1000000

3.4.2 元数据备份

# 备份元数据库
mysqldump -h fgedu01 -u hive -p hive_metastore > /backup/hive/metastore_$(date +%Y%m%d).sql

# 备份表结构
hive -e “SHOW CREATE TABLE fgedudb.fgedu_user;” > /backup/hive/fgedu_user_ddl.sql

# 验证备份
ls -la /backup/hive/

# 元数据备份
# 备份完成

# 表结构备份
# 备份完成

# 备份验证
total 10240
-rw-r–r– 1 root root 5242880 Jan 18 10:30 metastore_20240118.sql
-rw-r–r– 1 root root 2048 Jan 18 10:30 fgedu_user_ddl.sql

Part04-生产案例与实战讲解

4.1 数据仓库分层案例

数据仓库分层是数据治理的重要手段。更多视频教程www.fgedu.net.cn

# 创建ODS层
hive -e “CREATE DATABASE IF NOT EXISTS ods LOCATION ‘/bigdata/warehouse/ods.db’;”

# 创建DWD层
hive -e “CREATE DATABASE IF NOT EXISTS dwd LOCATION ‘/bigdata/warehouse/dwd.db’;”

# 创建DWS层
hive -e “CREATE DATABASE IF NOT EXISTS dws LOCATION ‘/bigdata/warehouse/dws.db’;”

# 创建ADS层
hive -e “CREATE DATABASE IF NOT EXISTS ads LOCATION ‘/bigdata/warehouse/ads.db’;”

# 查看数据库
hive -e “SHOW DATABASES;”

# 创建分层
OK
OK
OK
OK

# 数据库列表
default
ods
dwd
dws
ads
fgedudb
Time taken: 0.5 seconds

4.2 数据建模案例

数据建模是数据仓库的核心工作。学习交流加群风哥微信: itpux-com

# 创建维度表
hive -e “
CREATE TABLE IF NOT EXISTS dwd.dim_user (
user_id BIGINT,
user_name STRING,
gender STRING,
age INT,
city STRING,
register_time TIMESTAMP,
etl_time TIMESTAMP
)
COMMENT ‘用户维度表’
STORED AS ORC;

# 创建事实表
hive -e “
CREATE TABLE IF NOT EXISTS dwd.fact_order (
order_id BIGINT,
user_id BIGINT,
product_id BIGINT,
order_amount DECIMAL(10,2),
order_quantity INT,
order_time TIMESTAMP,
etl_time TIMESTAMP
)
COMMENT ‘订单事实表’
PARTITIONED BY (dt STRING)
STORED AS ORC;

# 创建汇总表
hive -e “
CREATE TABLE IF NOT EXISTS dws.agg_user_order (
user_id BIGINT,
order_count BIGINT,
order_amount DECIMAL(15,2),
first_order_time TIMESTAMP,
last_order_time TIMESTAMP,
etl_time TIMESTAMP
)
COMMENT ‘用户订单汇总表’
PARTITIONED BY (dt STRING)
STORED AS ORC;

# 创建维度表
OK
Time taken: 1.5 seconds

# 创建事实表
OK
Time taken: 1.2 seconds

# 创建汇总表
OK
Time taken: 1.0 seconds

4.3 数据治理案例

4.3.1 数据质量检查

# 检查数据完整性
hive -e “
SELECT ‘total_records’ AS metric, COUNT(*) AS value FROM dwd.fact_order WHERE dt=’20240118′
UNION ALL
SELECT ‘null_user_id’, COUNT(*) FROM dwd.fact_order WHERE dt=’20240118′ AND user_id IS NULL
UNION ALL
SELECT ‘null_order_amount’, COUNT(*) FROM dwd.fact_order WHERE dt=’20240118′ AND order_amount IS NULL;

# 检查数据一致性
hive -e “
SELECT COUNT(*) AS orphan_records
FROM dwd.fact_order o
LEFT JOIN dwd.dim_user u ON o.user_id = u.user_id
WHERE o.dt=’20240118′ AND u.user_id IS NULL;

# 数据完整性检查
total_records 1000000
null_user_id 0
null_order_amount 0
Time taken: 30.0 seconds

# 数据一致性检查
orphan_records 0
Time taken: 60.0 seconds

4.3.2 数据生命周期管理

# 设置表属性
hive -e “
ALTER TABLE dwd.fact_order SET TBLPROPERTIES (
‘retention’=’365’,
‘auto.purge’=’true’
);

# 清理过期分区
hive -e “
ALTER TABLE dwd.fact_order DROP IF EXISTS PARTITION (dt < '20230101');

# 查看分区
hive -e “SHOW PARTITIONS dwd.fact_order;”

# 设置属性
OK
Time taken: 0.5 seconds

# 清理分区
Dropping partition dt=20221201
Dropping partition dt=20221202

OK
Time taken: 10.0 seconds

# 分区列表
dt=20240101
dt=20240102

dt=20240118
Time taken: 0.3 seconds

Part05-风哥经验总结与分享

5.1 Hive最佳实践

在实际生产环境中,Hive使用需要注意以下几点:from bigdata视频:www.itpux.com

风哥经验总结:
1. 使用分区表提高查询效率
2. 选择合适的存储格式
3. 定期收集统计信息
4. 合理设置并行度
5. 做好数据生命周期管理

5.2 数据仓库经验总结

5.2.1 数据仓库建议

风哥提示:数据仓库建设是一个长期过程,需要持续优化和完善。

数据仓库注意事项:
– 建立清晰的分层架构
– 制定数据规范
– 做好数据质量管控
– 定期优化表结构
– 建立数据字典

5.2.2 Hive运维脚本

#!/bin/bash
# hive_maintenance.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “=== Hive Maintenance ===”
echo “Date: $(date)”

# 1. 收集统计信息
echo “=== Collect Statistics ===”
hive -e “ANALYZE TABLE dwd.fact_order COMPUTE STATISTICS FOR COLUMNS;”

# 2. 清理过期数据
echo “=== Cleanup Old Data ===”
OLD_DATE=$(date -d “365 days ago” +%Y%m%d)
hive -e “ALTER TABLE dwd.fact_order DROP IF EXISTS PARTITION (dt < '${OLD_DATE}');" # 3. 压缩表
echo “=== Compact Tables ===”
hive -e “ALTER TABLE dwd.fact_order COMPACT ‘major’;”

# 4. 备份元数据
echo “=== Backup Metadata ===”
mysqldump -h fgedu01 -u hive -p hive_metastore > /backup/hive/metastore_$(date +%Y%m%d).sql

echo “=== Maintenance Completed ===”

# 维护执行
./hive_maintenance.sh
=== Hive Maintenance ===
Date: Thu Jan 18 11:00:00 CST 2024

=== Collect Statistics ===
OK

=== Cleanup Old Data ===
OK

=== Compact Tables ===
Compaction enqueued

=== Backup Metadata ===
# 备份完成

=== Maintenance Completed ===

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息