内容简介:本文详细介绍Hive与HDFS集成的核心方法与生产实战应用。风哥教程参考Hive官方文档HDFS Integration、Storage Handlers等内容,涵盖外部表管理、数据导入导出、存储路径优化等核心知识点,结合生产环境实际案例,帮助读者掌握Hive与HDFS深度集成的实战技能。
目录大纲
Part01-基础概念与理论知识
1.1 Hive与HDFS关系概述
1.2 内部表与外部表区别
1.3 存储路径管理
Part02-生产环境规划与建议
2.1 存储路径规划
2.2 外部表设计策略
2.3 数据安全策略
Part03-生产环境项目实施方案
3.1 外部表创建与管理
3.2 数据导入导出实战
3.3 存储优化配置
Part04-生产案例与实战讲解
4.1 多源数据集成案例
4.2 数据迁移案例
4.3 数据共享案例
Part05-风哥经验总结与分享
5.1 集成最佳实践
5.2 常见问题与解决方案
5.3 生产环境注意事项
Part01-基础概念与理论知识
1.1 Hive与HDFS关系概述
Hive是构建在HDFS之上的数据仓库工具,HDFS为Hive提供底层存储服务。更多视频教程www.fgedu.net.cn
Hive与HDFS的关系:
1. Hive表数据存储在HDFS上
2. Hive元数据记录HDFS路径信息
3. Hive通过HDFS API读写数据
4. HDFS为Hive提供高可靠存储保障
默认存储路径:
SET hive.metastore.warehouse.dir;
— 默认值
/user/hive/warehouse
— 表存储路径
/user/hive/warehouse/database_name.db/table_name/
1.2 内部表与外部表区别
内部表和外部表是Hive表的两种类型,核心区别在于数据管理方式。学习交流加群风哥微信: itpux-com
— 创建时指定LOCATION或不指定
CREATE TABLE fgedu_managed_table (
id INT,
name STRING
);
— 外部表(External Table)
— 必须指定EXTERNAL关键字
CREATE EXTERNAL TABLE fgedu_external_table (
id INT,
name STRING
) LOCATION ‘/data/fgedu/external_table’;
— 核心区别
— 内部表:DROP TABLE会删除元数据和数据
— 外部表:DROP TABLE只删除元数据,数据保留
1.3 存储路径管理
合理的存储路径管理是数据治理的基础:
/data/
├── ods/ # ODS层数据
│ ├── trade/
│ └── user/
├── dwd/ # DWD层数据
├── dws/ # DWS层数据
├── ads/ # ADS层数据
├── dim/ # 维度数据
└── tmp/ # 临时数据
— 创建指定路径的表
CREATE TABLE dwd_trade.dwd_order_di (
order_id STRING,
user_id STRING
) PARTITIONED BY (dt STRING)
LOCATION ‘/data/dwd/trade/order’;
Part02-生产环境规划与建议
2.1 存储路径规划
存储路径规划需要考虑数据分层和访问权限。风哥提示:合理的路径规划便于数据管理和权限控制。
— 1. 按数据层次划分目录
— 2. 按业务域划分子目录
— 3. 便于权限管理
— 4. 便于数据清理
— 设置数据库默认路径
CREATE DATABASE dwd_trade
LOCATION ‘/data/dwd/trade’;
— 设置表路径
CREATE TABLE dwd_trade.dwd_order_di
LOCATION ‘/data/dwd/trade/order’;
2.2 外部表设计策略
外部表设计策略需要根据数据特点选择:更多学习教程公众号风哥教程itpux_com
— 1. 多系统共享数据
— 2. 数据由其他系统管理
— 3. 需要保留原始数据
— 4. 数据迁移场景
— 创建外部表
CREATE EXTERNAL TABLE fgedu_log_external (
log_time STRING,
log_level STRING,
log_message STRING
) PARTITIONED BY (dt STRING, hour STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
STORED AS TEXTFILE
LOCATION ‘/data/logs/fgedu_app’;
2.3 数据安全策略
数据安全是HDFS集成的重要考虑因素:
hdfs dfs -chmod -R 750 /data/dwd
hdfs dfs -chown -R hive:hive /data/dwd
— ACL权限设置
hdfs dfs -setfacl -R -m user:fgedu:rwx /data/dwd/trade
— 查看权限
hdfs dfs -ls -R /data/dwd | head -20;
Part03-生产环境项目实施方案
3.1 外部表创建与管理
外部表创建与管理是HDFS集成的核心操作。from bigdata视频:www.itpux.com
CREATE EXTERNAL TABLE fgedu_access_log (
ip STRING COMMENT ‘IP地址’,
user_id STRING COMMENT ‘用户ID’,
request_time STRING COMMENT ‘请求时间’,
request_url STRING COMMENT ‘请求URL’,
status_code INT COMMENT ‘状态码’,
response_size BIGINT COMMENT ‘响应大小’
) PARTITIONED BY (dt STRING COMMENT ‘日期分区’)
ROW FORMAT SERDE ‘org.apache.hadoop.hive.serde2.RegexSerDe’
WITH SERDEPROPERTIES (
‘input.regex’ = ‘^(\\S+) (\\S+) \\[([^\\]]+)\\] “(\\S+)” (\\d+) (\\d+)’
) STORED AS TEXTFILE
LOCATION ‘/data/logs/access’
TBLPROPERTIES (‘external.table.purge’=’false’);
— 添加分区
ALTER TABLE fgedu_access_log ADD PARTITION(dt=’2024-01-19′);
— 修复分区
MSCK REPAIR TABLE fgedu_access_log;
OK
Time taken: 0.234 seconds
# 添加分区
OK
Time taken: 0.123 seconds
# 修复分区
Partitions not in metastore: dt=2024-01-18 dt=2024-01-19
Partitions recovered: 2
OK
3.2 数据导入导出实战
数据导入导出是Hive与HDFS交互的常用操作。学习交流加群风哥QQ113257174
LOAD DATA INPATH ‘/data/source/orders.csv’
OVERWRITE INTO TABLE fgedu_orders
PARTITION(dt=’2024-01-19′);
— 导出数据到HDFS
INSERT OVERWRITE DIRECTORY ‘/data/export/orders’
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
SELECT * FROM fgedu_orders WHERE dt=’2024-01-19′;
— 使用hdfs命令操作
hdfs dfs -put /local/data/orders.csv /data/import/;
hdfs dfs -get /data/export/orders /local/backup/;
3.3 存储优化配置
存储优化配置可以提升Hive与HDFS的交互效率:
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
— 小文件合并
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.merge.size.per.task=256000000;
— 分区优化
SET hive.exec.max.dynamic.partitions=10000;
SET hive.exec.max.dynamic.partitions.pernode=1000;
Part04-生产案例与实战讲解
4.1 多源数据集成案例
本案例演示多源数据通过HDFS集成到Hive。更多视频教程www.fgedu.net.cn
# multi_source_integration.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== 多源数据集成 ===”
echo “Date: $(date)”
# 创建外部表映射各数据源
hive -e “
— 日志数据外部表
CREATE EXTERNAL TABLE IF NOT EXISTS fgedu_app_log (
log_time TIMESTAMP,
user_id STRING,
action STRING,
page_id STRING
) PARTITIONED BY (dt STRING)
STORED AS ORC
LOCATION ‘/data/logs/app’;
— 业务数据外部表
CREATE EXTERNAL TABLE IF NOT EXISTS fgedu_business_data (
record_id STRING,
data_type STRING,
content STRING
) PARTITIONED BY (dt STRING)
STORED AS PARQUET
LOCATION ‘/data/business/raw’;
“
# 同步数据到HDFS
hdfs dfs -put -f /data/flume/logs/* /data/logs/app/dt=$(date -d ‘-1 day’ +%Y-%m-%d)/
# 修复分区
hive -e “MSCK REPAIR TABLE fgedu_app_log;”
echo “=== 集成完成 ===”
Date: Fri Jan 19 10:00:00 CST 2024
# 创建外部表
OK
Time taken: 0.345 seconds
# 数据同步
# 上传成功
# 修复分区
Partitions recovered: 1
OK
=== 集成完成 ===
4.2 数据迁移案例
数据迁移案例演示使用外部表实现数据迁移。学习交流加群风哥微信: itpux-com
— 将内部表数据迁移到外部表
— Step 1: 创建外部表
CREATE EXTERNAL TABLE fgedu_order_external
LIKE fgedu_order_internal
LOCATION ‘/data/migrated/orders’;
— Step 2: 导出数据
INSERT OVERWRITE TABLE fgedu_order_external
SELECT * FROM fgedu_order_internal;
— Step 3: 验证数据
SELECT COUNT(*) FROM fgedu_order_external;
SELECT COUNT(*) FROM fgedu_order_internal;
— Step 4: 删除内部表(数据保留在外部表)
DROP TABLE fgedu_order_internal;
4.3 数据共享案例
数据共享案例演示多系统共享HDFS数据。风哥提示:外部表是实现数据共享的有效方式。
— Spark和Hive共享同一份数据
— Hive创建外部表
CREATE EXTERNAL TABLE fgedu_shared_data (
id STRING,
name STRING,
value DOUBLE
) STORED AS PARQUET
LOCATION ‘/data/shared/fgedu_metrics’;
— Spark读取同一数据
— spark.read.parquet(“/data/shared/fgedu_metrics”)
— 验证数据一致性
SELECT COUNT(*) AS hive_count FROM fgedu_shared_data;
Part05-风哥经验总结与分享
5.1 集成最佳实践
风哥在生产环境中的HDFS集成经验总结:from bigdata视频:www.itpux.com
1. 表类型选择:
ODS层使用外部表,DWD/DWS层使用内部表
2. 路径规划:
统一规划存储路径,便于管理和权限控制
3. 数据格式:
优先使用ORC或Parquet格式,提高存储和查询效率
5.2 常见问题与解决方案
问题1:分区丢失
解决方案:定期执行MSCK REPAIR或使用ALTER TABLE ADD PARTITION。
MSCK REPAIR TABLE fgedu_external_table;
问题2:权限不足
解决方案:检查HDFS权限,确保Hive用户有读写权限。学习交流加群风哥QQ113257174
5.3 生产环境注意事项
1. 数据备份:重要数据定期备份,建立恢复机制。
2. 权限管理:合理设置HDFS权限,保障数据安全。
3. 监控告警:监控存储空间使用,及时清理过期数据。
风哥提示:Hive与HDFS的深度集成是大数据平台建设的基础。在生产环境中,要合理规划存储路径,选择合适的表类型,建立完善的数据管理和安全机制,确保数据的安全性和可用性。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
