🍋🍋大数据学习🍋🍋

🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞


Hive 作为大数据领域常用的数据仓库工具,其压缩与存储方式的选择对存储成本、查询性能有直接影响。以下是 Hive 支持的压缩格式与存储方式的详细总结:

一、压缩格式

Hive 支持多种压缩算法,通过减少数据体积优化存储和传输效率。常见格式如下:

压缩格式 特点 适用场景
Snappy 平衡压缩比与速度,CPU 占用低,支持分片并行压缩/解压 通用场景,尤其适合需要快速读写的大数据(如 ORC/Parquet 默认集成)
Gzip 压缩率高,但 CPU 占用较高,不支持分片 冷数据归档、日志等长期存储场景
Bzip2 压缩率最高,但速度最慢,支持分片 极压缩率优先的冷数据存储
LZO 支持分片,需额外安装插件,压缩率与速度介于 Snappy 与 Gzip 之间 旧系统兼容场景(需注意 Hadoop 兼容性)
Zstandard(Zstd) 压缩率与速度兼顾,支持分片,可调压缩级别 现代大数据场景(如 Druid、ClickHouse 集成),推荐替代 Snappy 的场景
压缩配置方法
  1. 全局配置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>
  2. 建表时指定

    CREATE TABLE compressed_table (
    id INT,
    name STRING
    ) STORED AS ORC
    TBLPROPERTIES ("orc.compress"="SNAPPY");
  3. 查询时动态压缩

    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,适合需要更新/删除的场景。

三、压缩与存储格式的协同优化

  1. 推荐组合
    • ORC + Snappy:平衡压缩率与查询性能(Hive 默认集成)。
    • Parquet + Zstd:高压缩率场景(如 AWS Athena 集成)。
    • TextFile + Gzip:冷数据归档。
  2. 性能调优示例
    -- 创建 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;

四、注意事项

  1. 压缩开销:高压缩率格式(如 Bzip2)可能增加 CPU 负载,需权衡存储与计算资源。
  2. 分片支持:选择支持分片的压缩格式(如 Snappy、Zstd)以实现并行处理。
  3. 工具链兼容性:确保压缩格式与下游系统(如 Spark、Presto)兼容。

五、常见问题

Hive 视图(View)与临时表(CTE)的区别

问题
视图和 CTE 的主要区别是什么?

答案要点

对比项 视图(View) 临时表(CTE)
存储 仅存储 SQL 定义 执行时生成临时结果
生命周期 永久存在(除非删除) 查询结束后销毁
性能 每次查询重新计算 结果可复用(优化器决定)
适用场景 复杂查询封装 一次性查询片段
Hive 压缩与存储格式

问题
Hive 常用的压缩格式和存储格式有哪些?如何选择?

答案要点

  • 压缩格式

    格式 压缩比 可分割性 适用场景
    Gzip 小文件
    Snappy 实时查询
    LZO 需索引支持
  • 存储格式

    格式 优点 适用场景
    TextFile 兼容性好 临时数据
    ORC 高性能,支持索引 生产环境
    Parquet 列式存储,适合嵌套 大数据分析
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐