Hive中的文件存储格式和压缩算法有哪些

在 Hive 中,文件存储格式(File Format)压缩算法(Compression Codec) 是影响查询性能、存储成本和 I/O 效率的关键因素。合理选择二者组合,可显著提升数仓整体效能。


✅ 一、Hive 常见文件存储格式

格式类型特点适用场景
TEXTFILE行存默认格式,纯文本,可读性强日志原始数据、临时分析
SEQUENCEFILE行存二进制、支持压缩、可分割已淘汰,基本不用
RCFILE混合先按行分块,再按列存储(早期列存)老系统兼容,新项目不推荐
ORC列存高效压缩 + 谓词下推 + 索引 + ACID 支持Hive 首选(推荐)
Parquet列存跨引擎兼容(Spark/Presto/Impala)、嵌套结构支持好多引擎共享场景

🔍 核心对比(ORC vs Parquet)

特性ORCParquet
Hive 原生优化✅ 极佳(LLAP、向量化)良好
压缩率更高(轻量级编码 + ZSTD)
谓词下推支持(含布隆过滤器)支持
ACID 事务✅ 支持(Hive 3.0+)❌ 不支持
跨引擎兼容性一般(主要 Hive)✅ 极佳(Spark/Presto/Flink)
复杂类型支持✅ 更好(struct/map/array)

📌 建议

  • 纯 Hive 数仓 → 用 ORC
  • 多引擎(Spark + Hive + Presto)→ 用 Parquet

✅ 二、常用压缩算法(Codec)

Hive 支持多种压缩,需与存储格式配合使用:

压缩算法是否可分割压缩率速度Hive 支持情况
None默认
Gzip支持,但不可分割
BZip2很高支持,少用
Snappy极快最常用
LZO✅(需建索引)需额外配置
ZSTD极高Hive 3.0+ 推荐(ORC 默认)

⚠️ 关键注意:

  • 可分割(Splittable):决定 MapTask 能否并行读取。
    Gzip 不可分割,大文件会导致单 MapTask,慎用!
  • ORC 内置压缩:无需额外指定 codec,直接设 TBLPROPERTIES ("orc.compress"="ZSTD")
  • TEXTFILE/Parquet:需显式设置压缩:
    SET hive.exec.compress.output=true;
    SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
    

✅ 三、最佳实践组合推荐

场景存储格式压缩算法说明
Hive 数仓生产表ORCZSTD 或 Snappy高压缩 + 高性能 + 谓词下推
多引擎共享表ParquetSnappy兼容性好,读写快
原始日志(ODS)TEXTFILESnappy(或 LZO)可读 + 可分割
中间临时表ORCSnappy快速处理,节省空间

示例:创建高性能 ORC 表

CREATE TABLE dwd_user_behavior (
  user_id STRING,
  event STRING,
  ts BIGINT
)
PARTITIONED BY (dt STRING)
STORED AS ORC
TBLPROPERTIES (
  "orc.compress" = "ZSTD",
  "orc.create.index" = "true",
  "orc.bloom.filter.columns" = "user_id"
);

✅ 四、如何验证压缩与格式生效?

-- 查看表结构
DESCRIBE FORMATTED dwd_user_behavior;

-- 查看 HDFS 文件大小
hdfs dfs -du -h /user/hive/warehouse/db.db/dwd_user_behavior/dt=20241106

若文件后缀为 .snappy.zst,且体积远小于原始数据,则成功。


📌 面试总结(一句话)

Hive 生产环境首选 ORC + ZSTD/Snappy:列存格式支持谓词下推和高效压缩,ZSTD 提供极致压缩率,Snappy 保证速度;若需多引擎兼容,则选 Parquet + Snappy。避免使用不可分割的 Gzip,尤其对大文件。

这是数仓性能调优的基础,直接影响存储成本与查询效率。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值