1. 首页 > Hadoop教程 > 正文

大数据教程FG042-Hive与HDFS集成实战

内容简介:本文详细介绍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

— 内部表(Managed Table)
— 创建时指定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权限设置
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

— 从HDFS导入数据
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

#!/bin/bash
# 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

联系我们

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

微信号:itpux-com

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