大数据学习(123)-hive压缩与存储方式
🍋🍋🍋🍋Hive 作为大数据领域常用的数据仓库工具,其压缩与存储方式的选择对存储成本、查询性能有直接影响。Hive 支持多种压缩算法,通过减少数据体积优化存储和传输效率。
·
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
Hive 作为大数据领域常用的数据仓库工具,其压缩与存储方式的选择对存储成本、查询性能有直接影响。以下是 Hive 支持的压缩格式与存储方式的详细总结:
一、压缩格式
Hive 支持多种压缩算法,通过减少数据体积优化存储和传输效率。常见格式如下:
压缩格式 | 特点 | 适用场景 |
---|---|---|
Snappy | 平衡压缩比与速度,CPU 占用低,支持分片并行压缩/解压 | 通用场景,尤其适合需要快速读写的大数据(如 ORC/Parquet 默认集成) |
Gzip | 压缩率高,但 CPU 占用较高,不支持分片 | 冷数据归档、日志等长期存储场景 |
Bzip2 | 压缩率最高,但速度最慢,支持分片 | 极压缩率优先的冷数据存储 |
LZO | 支持分片,需额外安装插件,压缩率与速度介于 Snappy 与 Gzip 之间 | 旧系统兼容场景(需注意 Hadoop 兼容性) |
Zstandard(Zstd) | 压缩率与速度兼顾,支持分片,可调压缩级别 | 现代大数据场景(如 Druid、ClickHouse 集成),推荐替代 Snappy 的场景 |
压缩配置方法
-
全局配置(
hive-site.xml
):<!-- 输入/输出压缩 -->
<property>
<name>hive.exec.compress.intermediate</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
-
建表时指定:
CREATE TABLE compressed_table (
id INT,
name STRING
) STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");
-
查询时动态压缩:
SET hive.exec.compress.output=true;
SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
INSERT OVERWRITE DIRECTORY '/output/path' SELECT * FROM source_table;
二、存储格式
Hive 支持多种列式/行式存储格式,直接影响查询性能与存储效率:
存储格式 | 类型 | 特点 | 适用场景 |
---|---|---|---|
TextFile | 行式 | 默认格式,无压缩,可读性好但效率低 | 测试/临时数据,需直接查看文件的场景 |
SequenceFile | 行式 | 二进制格式,支持压缩,可分块 | 旧系统迁移,需兼容 MapReduce 作业的场景 |
ORC | 列式 | 高压缩比,支持 ACID,内置索引,支持谓词下推 | 复杂查询、高压缩率需求场景(如数据仓库) |
Parquet | 列式 | 高压缩比,支持嵌套结构,与 Spark/Impala 兼容性好 | 实时查询、机器学习场景(如 Druid、Presto 集成) |
Avro | 行式 | 支持模式演化,跨语言兼容 | 需模式演化的数据交换场景(如 Kafka 集成) |
存储格式选择建议
- 列式优先:ORC/Parquet 适合分析型查询(压缩率高、支持列裁剪)。
- 嵌套数据:Parquet 对复杂类型(如 Array、Map)支持更优。
- 事务需求:ORC 支持 ACID,适合需要更新/删除的场景。
三、压缩与存储格式的协同优化
- 推荐组合:
- ORC + Snappy:平衡压缩率与查询性能(Hive 默认集成)。
- Parquet + Zstd:高压缩率场景(如 AWS Athena 集成)。
- TextFile + Gzip:冷数据归档。
- 性能调优示例:
-- 创建 ORC 表并指定 Snappy 压缩
CREATE TABLE sales_data (
order_id BIGINT,
amount DOUBLE,
product STRING
) STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY", "orc.stripe.size"="67108864"); -- 调整条带大小优化查询
-- 插入数据时启用压缩
SET hive.exec.compress.intermediate=true;
INSERT INTO sales_data SELECT * FROM raw_sales;
四、注意事项
- 压缩开销:高压缩率格式(如 Bzip2)可能增加 CPU 负载,需权衡存储与计算资源。
- 分片支持:选择支持分片的压缩格式(如 Snappy、Zstd)以实现并行处理。
- 工具链兼容性:确保压缩格式与下游系统(如 Spark、Presto)兼容。
五、常见问题
Hive 视图(View)与临时表(CTE)的区别
问题:
视图和 CTE 的主要区别是什么?
答案要点:
对比项 | 视图(View) | 临时表(CTE) |
---|---|---|
存储 | 仅存储 SQL 定义 | 执行时生成临时结果 |
生命周期 | 永久存在(除非删除) | 查询结束后销毁 |
性能 | 每次查询重新计算 | 结果可复用(优化器决定) |
适用场景 | 复杂查询封装 | 一次性查询片段 |
Hive 压缩与存储格式
问题:
Hive 常用的压缩格式和存储格式有哪些?如何选择?
答案要点:
-
压缩格式:
格式 压缩比 可分割性 适用场景 Gzip 高 否 小文件 Snappy 中 是 实时查询 LZO 中 是 需索引支持 -
存储格式:
格式 优点 适用场景 TextFile 兼容性好 临时数据 ORC 高性能,支持索引 生产环境 Parquet 列式存储,适合嵌套 大数据分析
更多推荐
所有评论(0)