Hive的存储格式如何优化?

news2025/6/5 12:09:43

Hive的存储格式对查询性能、存储成本和数据处理效率有显著影响。以下是主流存储格式的特点、选择标准和优化方法:

一、主流存储格式对比

特性ORC(Optimized Row Columnar)ParquetTextFile(默认)SequenceFile
数据布局列式存储列式存储行式存储行式存储
压缩支持支持(ZLIB、SNAPPY、LZ4等)支持(GZIP、SNAPPY、LZO等)支持(需外部配置)支持(需外部配置)
索引支持行组索引、Bloom Filter支持列级统计、Bloom Filter不支持不支持
查询性能极快(列裁剪、谓词下推)快(列裁剪、谓词下推)慢(全量扫描)中等(需配合压缩)
写入成本高(需排序和聚合)中(需元数据处理)低(直接写入)低(直接写入)
复杂类型支持完整支持(Map、Struct等)完整支持(嵌套结构)需自定义序列化/反序列化需自定义序列化/反序列化
Hive兼容性原生支持,推荐版本0.11+原生支持,推荐版本0.13+完全兼容完全兼容

二、存储格式选择标准

1. 查询模式
  • 列裁剪(Column Pruning)
    若查询频繁访问少数列(如SELECT a, b FROM table WHERE c > 10),选择ORC/Parquet
    示例:

    -- ORC表创建
    CREATE TABLE orc_table (id INT, name STRING, age INT)
    STORED AS ORC;
    
    -- Parquet表创建
    CREATE TABLE parquet_table (id INT, name STRING, age INT)
    STORED AS PARQUET;
    
  • 行级扫描
    若需整行读取(如SELECT *),可考虑SequenceFileORC(ORC在行读取时仍优于行式存储)。

2. 数据类型
  • 复杂类型(嵌套结构)
    ORC/Parquet均支持,但Parquet在嵌套结构查询时性能更优。
    示例:
    CREATE TABLE complex_data (
      id INT,
      name STRING,
      orders ARRAY<STRUCT<order_id:INT, amount:DOUBLE>>
    ) STORED AS PARQUET;
    
3. 压缩需求
  • 存储空间优化
    使用ORC+ZLIB(压缩比高)或Parquet+SNAPPY(读写性能平衡)。
    示例:
    -- ORC + ZLIB
    SET hive.exec.compress.output=true;
    SET orc.compression=ZLIB;
    CREATE TABLE orc_zlib_table STORED AS ORC;
    
    -- Parquet + SNAPPY
    SET parquet.compression=SNAPPY;
    CREATE TABLE parquet_snappy_table STORED AS PARQUET;
    
4. 兼容性
  • 跨引擎使用
    若需同时被Spark、Presto等引擎访问,选择Parquet(社区支持更广泛)。

三、ORC格式优化方法

1. 参数配置
SET orc.block.size=268435456;         -- 块大小(默认256MB)
SET orc.row.index.stride=10000;       -- 行索引步长(默认1万行)
SET orc.compress=SNAPPY;              -- 压缩算法(SNAPPY/LZ4/ZLIB)
SET orc.create.index=true;            -- 启用索引(默认true)
SET orc.bloom.filter.columns=id,name; -- 对指定列启用Bloom Filter
2. 写入优化
  • 批量写入
    使用INSERT OVERWRITE替代逐条插入,减少小文件:

    INSERT OVERWRITE TABLE orc_table
    SELECT * FROM source_table;
    
  • 合并小文件

    SET hive.merge.orcfile.stripe.level=true;  -- 合并ORC文件
    ALTER TABLE orc_table CONCATENATE;         -- 合并小文件
    

四、Parquet格式优化方法

1. 参数配置
SET parquet.block.size=134217728;      -- 块大小(默认128MB)
SET parquet.page.size=1048576;         -- 页大小(默认1MB)
SET parquet.compression=SNAPPY;        -- 压缩算法
SET parquet.enable.dictionary=true;    -- 启用字典编码(默认true)
SET parquet.avro.write-old-list-structure=true;  -- 兼容旧版嵌套结构
2. 分区与分桶
  • 按高频过滤字段分区

    CREATE TABLE parquet_partitioned (id INT, name STRING)
    PARTITIONED BY (dt STRING)
    STORED AS PARQUET;
    
  • 按JOIN键分桶

    CREATE TABLE parquet_bucketed (user_id INT, order_id INT)
    CLUSTERED BY (user_id) INTO 100 BUCKETS
    STORED AS PARQUET;
    

五、存储格式转换方法

1. 从TextFile转换为ORC/Parquet
-- 转换为ORC
CREATE TABLE orc_table STORED AS ORC
AS SELECT * FROM text_table;

-- 转换为Parquet
CREATE TABLE parquet_table STORED AS PARQUET
AS SELECT * FROM text_table;
2. 动态转换(CTAS语句)
CREATE TABLE new_table
STORED AS ORC
TBLPROPERTIES ('orc.compress'='SNAPPY')
AS SELECT * FROM old_table;

六、存储格式选择决策树

列查询为主
行查询为主
选择存储格式
查询类型?
需要跨引擎兼容?
Parquet
需要最高压缩比?
ORC+ZLIB
ORC+SNAPPY
需要压缩?
SequenceFile+压缩
TextFile

七、常见场景推荐配置

场景推荐存储格式关键参数配置
实时数仓ORC+SNAPPYorc.block.size=256MB, orc.row.index.stride=10000
离线批量处理Parquet+SNAPPYparquet.block.size=128MB, parquet.page.size=1MB
高压缩比需求ORC+ZLIBorc.compression=ZLIB
复杂嵌套结构Parquetparquet.avro.write-old-list-structure=true
小文件合并ORCSET hive.merge.orcfile.stripe.level=true
即席查询(Ad-hoc)ORC+Bloom Filterorc.bloom.filter.columns=id,name, orc.compress=SNAPPY

八、性能对比测试

以下是不同存储格式在典型场景下的性能对比(数据量1TB):

测试场景TextFileORC+SNAPPYParquet+SNAPPY
*全量扫描(SELECT 120秒45秒50秒
列裁剪(SELECT a,b)110秒20秒22秒
过滤查询(WHERE c>10)105秒15秒18秒
存储空间1TB350GB380GB

通过合理选择存储格式,查询性能可提升3-6倍,存储空间可减少60%-70%。

九、监控与调优建议

  1. 定期分析查询模式
    通过Hive日志统计高频查询的字段和过滤条件,针对性选择存储格式。

  2. 监控文件大小
    避免产生大量小文件(<100MB),定期合并:

    SET hive.merge.size.per.task=256000000;  -- 合并后文件大小
    ALTER TABLE table_name CONCATENATE;      -- 手动合并
    
  3. 验证压缩效果
    对比不同压缩算法的存储成本和查询性能,选择平衡点。

  4. 测试索引效果
    对高频过滤字段启用Bloom Filter,验证性能提升:

    ALTER TABLE orc_table SET TBLPROPERTIES ('orc.bloom.filter.columns'='id');
    

通过以上优化策略,可显著提升Hive的存储效率和查询性能。实际应用中需根据业务场景灵活选择存储格式和参数配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2397427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在部署了一台mysql5.7的机器上部署mysql8.0.35

在已部署 MySQL 5.7 的机器上部署 MySQL 8.0.35 的完整指南 在同一台服务器上部署多个 MySQL 版本需要谨慎规划&#xff0c;避免端口冲突和数据混淆。以下是详细的部署步骤&#xff1a; 一、规划配置 端口分配 MySQL 5.7&#xff1a;使用默认端口 3306MySQL 8.0.35&#xff1…

QT入门学习(一)---新建工程与、信号与槽

一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件&#xff0c;下面来看代码解析 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11TARGET main# The following define makes your compiler emit warnings if you use # any Qt feature …

UE5.4.4+Rider2024.3.7开发环境配置

文章目录 一、UE5安装 安装有两种方式一种的源码编译安装、一种是EPIC安装&#xff0c;推荐后者&#xff0c;只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…

Windows环境下PHP,在PowerShell控制台输出中文乱码

解决方法&#xff1a; 以管理员运行PowerShell , 输入&#xff1a; chcp 65001 重启控制台&#xff1b;然后就正常输出中文&#xff1b;

性能优化 - 理论篇:性能优化的七类技术手段

文章目录 Pre引言性能优化的七类技术手段性能优化策略一览表1. 复用优化2. 计算优化2.1 并行执行2.2 变同步为异步2.3 惰性加载 3. 结果集优化3.1 数据格式与协议选择3.2 字段精简与按需返回3.3 批量处理与分页3.4 索引与位图加速 4. 资源冲突优化4.1 锁的分类与特点4.2 无锁与…

华为IP(7)

端口隔离技术 产生的背景 1.以太交换网络中为了实现报文之间的二层隔离&#xff0c;用户通常将不同的端口加入不同的VLAN&#xff0c;实现二层广播域的隔离。 2.大型网络中&#xff0c;业务需求种类繁多&#xff0c;只通过VLAN实现二层隔离&#xff0c;会浪费有限的VLAN资源…

AIGC与影视制作:技术革命、产业重构与未来图景

文章目录 一、AIGC技术全景&#xff1a;从算法突破到产业赋能1. **技术底座&#xff1a;多模态大模型的进化路径**2. **核心算法&#xff1a;从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作&#xff1a;从“灵感枯竭”到“创意井喷”**2…

Cursor 玩转 腾讯地图 MCP Server

腾讯地图WebService API 服务简介 腾讯地图WebService API 是基于HTTPS/HTTP协议构建的标准化地理数据服务接口。该接口支持跨平台调用&#xff0c;开发者可使用任意客户端、服务器端技术及编程语言&#xff0c;遵循API规范发起HTTPS请求&#xff0c;获取地理信息服务&#xf…

2025年中国电商618年中大促策略分析:存量博弈与生态重构

图片来源&#xff1a;Photo by Samuel Regan-Asante on Unsplash 中国电商行业正经历一场从「增量扩张」到「存量深耕」的深刻转型。 随着网络购物用户规模突破9.74亿、线上消费渗透率逼近30%的临界点&#xff0c;传统流量红利逐渐消退&#xff0c;行业竞争已从「切蛋糕」转向…

Deepseek给出的8255显示例程

#include <stdio.h> #include <conio.h> #include <dos.h>// 定义8255端口地址 (根据原理图译码确定) #define PORT_8255_A 0x8000 // PA端口地址 #define PORT_8255_B 0x8001 // PB端口地址 #define PORT_8255_C 0x8002 // PC端口地址 #define PORT_8255…

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会

5月22至25日&#xff0c;广西国际矿业展览会&#xff08;以下简称 “矿业展”&#xff09;在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术&#xff0c;以及视频孪生智慧矿山解决方案参会&#xff0c;为矿山行业数字化…

力扣每日一题——连接两棵树后最大目标节点数目 ||

目录 题目链接&#xff1a;3373. 连接两棵树后最大目标节点数目 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 解法一&#xff1a;​​双树贡献分离法​​ Java写法&#xff1a; C写法&#xff1a; 运行时间 时间复杂度和空间复杂度 总结 题目链接&#xff1a;…

【学习笔记】Sparse Crosscoders for Cross-Layer Features and Model Diffing

Sparse Crosscoders for Cross-Layer Features and Model Diffing Abstract 本说明介绍了稀疏跨编码器(sparse crosscoders)&#xff0c;它是一种稀疏自编码器(sparse autoencoders)或transcoders的变体&#xff0c;旨在用于理解叠加中的模型结构。SAEs是在单一层中编码和预测…

VSCode无法转到定义python源码(ctrl加单击不跳转)

已经尝试的方案&#xff1a; 1.确保对应python环境正确激活 在 VSCode 中&#xff0c;打开命令面板&#xff08;CtrlShiftP&#xff09;&#xff0c;输入并选择 Python: Select Interpreter&#xff0c;然后从列表中选择正确的 Python 解释器。 2.重新卸载Python插件再重新安装…

【华为战报】4月、5月 HCIP考试战报!

了解更多往期考试→点 【考试战报】 华为认证 HCIP 4、5月微思 | HCIP 考试战报 学员成绩单 华为认证 最新开班 厦门面授 全国直播 新生代网工必看&#xff1a;华为模拟器eNSP安装教程&#xff08;附下载链接&#xff09;

AIGC工具平台-GPT-SoVITS-v4-TTS音频推理克隆

声音克隆与语音合成的结合&#xff0c;是近年来生成式AI在多模态方向上的重要落地场景之一。随着预训练模型能力的增强&#xff0c;结合语音识别、音素映射与TTS合成的端到端系统成为初学者可以上手实践的全流程方案。 围绕 GPT-SoVITS-v4-TTS 模块&#xff0c;介绍了其在整合…

el-table配置表头固定而且高度变化

根据官网提示只要在 el-table 元素中定义了 height 属性&#xff0c;即可实现固定表头的表格&#xff0c;而不需要额外的代码。 如果你想既要固定表头&#xff0c;又要下方表格高度自适应&#xff0c;可以设置为 height"100%" &#xff1a; 然后外层设置scroll:

设计模式——组合设计模式(结构型)

摘要 组合设计模式是一种结构型设计模式&#xff0c;用于将对象组合成树形结构以表示“部分-整体”的层次结构&#xff0c;使客户端对单个对象和组合对象具有一致的访问方式。它包含抽象组件、叶子节点和组合节点&#xff0c;具有统一处理、支持递归结构和易扩展等优点&#x…

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成

今天带来EMO2&#xff08;全称End-Effector Guided Audio-Driven Avatar Video Generation&#xff09;是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片&#xff0c;生成高度逼真且富有表现力的动态视频内容&#xff0c;值得…

Python打卡训练营Day43

DAY 43 复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 数据集地址&#xff1a;Lung Nodule Malignancy 肺结核良恶性判断 进阶&#xff1a;并拆分成多个文件 import os import pandas as pd import numpy as np from…