问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文搞懂Hive存储格式及压缩格式,太清晰了!

创作时间:
作者:
@小白创作中心

一文搞懂Hive存储格式及压缩格式,太清晰了!

引用
1
来源
1.
https://blog.baispace.cn/article/hive-knowledge-storage-format.html

在大数据处理领域,Hive作为Hadoop生态系统中的重要组件,其存储格式和压缩格式的选择对性能优化至关重要。本文将深入探讨Hive支持的各种存储格式及其压缩方式,通过对比分析帮助读者理解不同场景下的最佳实践,并结合实际案例进行详细讲解。

Hive 存储格式有哪些?

Hive支持多种文件存储格式,主要包括:

  • TEXTFILE:默认的行式存储格式,数据不压缩,磁盘开销大,解析开销大,不支持数据分片。
  • SEQUENCEFILE:二进制序列化文件,支持行式存储,压缩选项包括NONE、RECORD、BLOCK,其中BLOCK压缩性能最佳。
  • RCFILE:行列存储相结合的格式,已被ORCFILE替代。
  • ORCFILE:Hive特有的行列存储格式,支持ZLIB和SNAPPY压缩,具有较好的压缩比和查询性能。
  • Parquet:面向分析型业务的列式存储格式,支持Snappy和Gzip压缩,默认使用Snappy。

行式存储和列式存储

上图中左边为行存储,右边为列存储:

  • 行存储适合查询整行数据,列存储适合查询特定列数据。
  • 列存储在数据压缩方面更具优势,占用空间相对较小。

存储格式使用建议

  • TEXTFILE:适用于数据贴源层(ODS或STG层),需要使用脚本加载数据的场景。
  • Parquet:适用于Impala和Hive共享数据的场景,支持多种语言和组件。
  • ORC:推荐用于大多数场景,但以下情况除外:
  • 文本文件加载到ORC格式的Hive表,会消耗较高CPU资源。
  • Hive表作为计算结果数据,导出给外部系统读取,因为ORC格式的易读性较低。

Hive压缩格式有哪些?

常见的压缩格式包括Gzip、Bzip2、LZO、Snappy等,它们在压缩比、压缩速度和解压缩速度方面各有优劣:

压缩方式
压缩比
压缩速度
解压缩速度
是否可分割
gzip
13.4%
21 MB/s
118 MB/s
bzip2
13.2%
2.4MB/s
9.5MB/s
lzo
20.5%
135 MB/s
410 MB/s
snappy
22.2%
172 MB/s
409 MB/s

压缩格式评价标准

  • 压缩比:越高越好
  • 压缩时间:越快越好
  • 可分割性:支持分割的格式可以更好地并行处理

Hive数据存储格式及压缩格式使用案例

ORC 使用案例

-- SQL 建表语句
CREATE TABLE temperature_orc(
    id          string,
    year        string,
    temperature int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC
TBLPROPERTIES ("orc.compress"="NONE");

-- 加载数据
INSERT OVERWRITE TABLE temperature_orc
SELECT id, year, temperature FROM temperature;

ORC+Snappy 使用案例

-- SQL 建表语句
CREATE TABLE temperature_orc_snappy(
    id          string,
    year        string,
    temperature int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS ORC
TBLPROPERTIES ("orc.compress"="SNAPPY");

-- 加载数据
INSERT OVERWRITE TABLE temperature_orc_snappy
SELECT id, year, temperature FROM temperature;

-- 查看结果
SELECT * FROM temperature_orc_snappy;

Parquet+Snappy 使用案例

-- SQL 建表语句
CREATE TABLE temperature_parquet_snappy(
    id          string,
    year        string,
    temperature int
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS PARQUET
TBLPROPERTIES("parquet.compression"="SNAPPY");

-- 配置压缩的另外一种方式:命令行执行
set parquet.compression=snappy;

-- 加载数据
INSERT OVERWRITE TABLE temperature_parquet_snappy
SELECT id, year, temperature FROM temperature;

-- 查看结果
SELECT * FROM temperature_parquet_snappy;

实际工作中对于Hive存储格式和压缩方式的使用总结

在实际应用中,选择存储格式和压缩方式需要综合考虑以下因素:

  • 数据倾斜问题:Snappy等不支持文件分割的压缩格式可能导致数据倾斜,特别是在处理大文件时。
  • 性能优化:在Hive on Spark等分布式架构中,支持文件分割的压缩格式可以提高并行处理效率。
  • 场景适配:数据源表适合使用TEXTFILE以节省磁盘空间,大数据量场景推荐使用Parquet+LZO,小数据量场景可选择ORC+Snappy。

总结:在实际项目开发中,Hive表的数据存储格式一般选择ORC或Parquet,压缩方式则根据具体场景选择Snappy、LZO等。建议除接口表外,其他表的存储格式与压缩格式保持一致,以简化管理和优化性能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号