Hive的存储格式如何优化?
Hive的存储格式对查询性能、存储成本和数据处理效率有显著影响。以下是主流存储格式的特点、选择标准和优化方法:
一、主流存储格式对比
特性 | ORC(Optimized Row Columnar) | Parquet | TextFile(默认) | 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 *
),可考虑SequenceFile或ORC(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;
六、存储格式选择决策树
七、常见场景推荐配置
场景 | 推荐存储格式 | 关键参数配置 |
---|---|---|
实时数仓 | ORC+SNAPPY | orc.block.size=256MB , orc.row.index.stride=10000 |
离线批量处理 | Parquet+SNAPPY | parquet.block.size=128MB , parquet.page.size=1MB |
高压缩比需求 | ORC+ZLIB | orc.compression=ZLIB |
复杂嵌套结构 | Parquet | parquet.avro.write-old-list-structure=true |
小文件合并 | ORC | SET hive.merge.orcfile.stripe.level=true |
即席查询(Ad-hoc) | ORC+Bloom Filter | orc.bloom.filter.columns=id,name , orc.compress=SNAPPY |
八、性能对比测试
以下是不同存储格式在典型场景下的性能对比(数据量1TB):
测试场景 | TextFile | ORC+SNAPPY | Parquet+SNAPPY |
---|---|---|---|
*全量扫描(SELECT ) | 120秒 | 45秒 | 50秒 |
列裁剪(SELECT a,b) | 110秒 | 20秒 | 22秒 |
过滤查询(WHERE c>10) | 105秒 | 15秒 | 18秒 |
存储空间 | 1TB | 350GB | 380GB |
通过合理选择存储格式,查询性能可提升3-6倍,存储空间可减少60%-70%。
九、监控与调优建议
-
定期分析查询模式:
通过Hive日志统计高频查询的字段和过滤条件,针对性选择存储格式。 -
监控文件大小:
避免产生大量小文件(<100MB),定期合并:SET hive.merge.size.per.task=256000000; -- 合并后文件大小 ALTER TABLE table_name CONCATENATE; -- 手动合并
-
验证压缩效果:
对比不同压缩算法的存储成本和查询性能,选择平衡点。 -
测试索引效果:
对高频过滤字段启用Bloom Filter,验证性能提升:ALTER TABLE orc_table SET TBLPROPERTIES ('orc.bloom.filter.columns'='id');
通过以上优化策略,可显著提升Hive的存储效率和查询性能。实际应用中需根据业务场景灵活选择存储格式和参数配置。
相关文章:
Hive的存储格式如何优化?
Hive的存储格式对查询性能、存储成本和数据处理效率有显著影响。以下是主流存储格式的特点、选择标准和优化方法: 一、主流存储格式对比 特性ORC(Optimized Row Columnar)ParquetTextFile(默认)SequenceFile数据布局…...

在部署了一台mysql5.7的机器上部署mysql8.0.35
在已部署 MySQL 5.7 的机器上部署 MySQL 8.0.35 的完整指南 在同一台服务器上部署多个 MySQL 版本需要谨慎规划,避免端口冲突和数据混淆。以下是详细的部署步骤: 一、规划配置 端口分配 MySQL 5.7:使用默认端口 3306MySQL 8.0.35࿱…...
OpenCV CUDA模块结构分析与形状描述符------在 GPU 上计算图像的原始矩(spatial moments)函数spatialMoments()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上计算图像的原始矩(spatial moments)。这些矩可用于描述图像中物体的形状特征,如面积、质…...

QT入门学习(一)---新建工程与、信号与槽
一: 新建QT项目 二:QT文件构成 2.1 first.pro 项目管理文件,下面来看代码解析 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安装,推荐后者,只需要注册一个EPIC账号就可以一键安装。 二、C环境安装 1.下载VisualStudioSetup 下载链接如下下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 选择社…...

Windows环境下PHP,在PowerShell控制台输出中文乱码
解决方法: 以管理员运行PowerShell , 输入: chcp 65001 重启控制台;然后就正常输出中文;...
第2篇:数据库连接池原理与自定义连接池开发实践
2.1 什么是数据库连接池? 数据库连接池(Connection Pool)是一种用于管理数据库连接对象的复用机制。它的主要目标是: 减少频繁创建/销毁连接的开销 提高系统对数据库资源的使用效率 支持连接复用、并发控制和连接健康检查 连接…...

性能优化 - 理论篇:性能优化的七类技术手段
文章目录 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.以太交换网络中为了实现报文之间的二层隔离,用户通常将不同的端口加入不同的VLAN,实现二层广播域的隔离。 2.大型网络中,业务需求种类繁多,只通过VLAN实现二层隔离,会浪费有限的VLAN资源…...

AIGC与影视制作:技术革命、产业重构与未来图景
文章目录 一、AIGC技术全景:从算法突破到产业赋能1. **技术底座:多模态大模型的进化路径**2. **核心算法:从生成对抗网络到扩散模型的迭代** 二、AIGC在影视制作全流程中的深度应用1. **剧本创作:从“灵感枯竭”到“创意井喷”**2…...
spring-cloud-alibaba-sentinel-gateway
Spring Cloud Alibaba Sentinel Gateway 是阿里巴巴开源组件 Sentinel 与 Spring Cloud Gateway 的整合模块,主要用于在微服务架构中对网关层的流量进行控制、保护和监控。以下是它的详细说明: 一. 核心用途 网关层流量治理:在 API 网关&…...

Cursor 玩转 腾讯地图 MCP Server
腾讯地图WebService API 服务简介 腾讯地图WebService API 是基于HTTPS/HTTP协议构建的标准化地理数据服务接口。该接口支持跨平台调用,开发者可使用任意客户端、服务器端技术及编程语言,遵循API规范发起HTTPS请求,获取地理信息服务…...
【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案
一、跨平台编译与适配问题 1. 平台特定API不兼容 问题现象:使用Router模块的replaceUrl或startAbility等鸿蒙专属API时,编译跨平台工程报错cant support crossplatform application。 解决方案: 改用ohos.router的跨平台封装API&a…...

2025年中国电商618年中大促策略分析:存量博弈与生态重构
图片来源:Photo by Samuel Regan-Asante on Unsplash 中国电商行业正经历一场从「增量扩张」到「存量深耕」的深刻转型。 随着网络购物用户规模突破9.74亿、线上消费渗透率逼近30%的临界点,传统流量红利逐渐消退,行业竞争已从「切蛋糕」转向…...

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…...
React+Antd全局加载遮罩工具
下面是全局加载遮罩工具,功能:提供show和showWithDelay/hide方法用于显示/延时显示/隐藏遮罩,它还提供loading属性返回是否正在loading。通常用于耗时较长的操作,比如远端api调用。 如何用它,下面是个例子,…...
Qt OpenGL 光照实现
Qt 中使用 OpenGL 实现光照效果主要基于 OpenGL 的光照模型和着色器编程。以下是 Qt OpenGL 光照实现的核心原理: 一. 光照模型基础 OpenGL 使用 Phong 光照模型,包含三个主要光照分量: 环境光(Ambient):场景中的基础光照,没有方向性 漫反射光(Diffuse):与表面法线和光…...

智汇云舟携最新无人机2D地图快速重建技术亮相广西国际矿业展览会
5月22至25日,广西国际矿业展览会(以下简称 “矿业展”)在南宁国际会展中心成功举办。智汇云舟与合作伙伴广西空驭数智信息技术有限公司携无人机 2D地图快速重建技术,以及视频孪生智慧矿山解决方案参会,为矿山行业数字化…...
Rust: CString、CStr和String、str
在FFI与C交互中,少不了与C中字符串交互。在Rust中,有 各种String存在的意义: OsString:因为要与操作系统等复杂的世界交互; 因为Rust世界中的Strings 始终是有效的 UTF-8。对于非 UTF-8 字符串,可以用到OsString。 CSt…...

力扣每日一题——连接两棵树后最大目标节点数目 ||
目录 题目链接:3373. 连接两棵树后最大目标节点数目 II - 力扣(LeetCode) 题目描述 解法一:双树贡献分离法 Java写法: C写法: 运行时间 时间复杂度和空间复杂度 总结 题目链接:…...

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

VSCode无法转到定义python源码(ctrl加单击不跳转)
已经尝试的方案: 1.确保对应python环境正确激活 在 VSCode 中,打开命令面板(CtrlShiftP),输入并选择 Python: Select Interpreter,然后从列表中选择正确的 Python 解释器。 2.重新卸载Python插件再重新安装…...

【华为战报】4月、5月 HCIP考试战报!
了解更多往期考试→点 【考试战报】 华为认证 HCIP 4、5月微思 | HCIP 考试战报 学员成绩单 华为认证 最新开班 厦门面授 全国直播 新生代网工必看:华为模拟器eNSP安装教程(附下载链接)...
开发指南120-表格(el-table)斑马纹
el-table实现斑马纹简单否,看起来很简单,网上给的例子都是加stripe,例如 <el-table :data"tableData" stripe>连官网上的例子都是这样。然并卵。也许是版本问题。这么写,怎么折腾都没有效果。 必须这样写才行 …...
数字化转型全场景安全解析:从产品到管理的防线构建与实施要点
在数字化转型中,安全已从“可选配置” 升级为 “必需底座”,贯穿于产品生命周期、生产过程、供应链及管理决策全场景。以下从南京市场景清单出发,结合技术实践与政策要求,分析安全在各核心场景中的具体内涵与实施要点:…...

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

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

设计模式——组合设计模式(结构型)
摘要 组合设计模式是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构,使客户端对单个对象和组合对象具有一致的访问方式。它包含抽象组件、叶子节点和组合节点,具有统一处理、支持递归结构和易扩展等优点&#x…...
PostgreSQL 在生物信息学中的应用
PostgreSQL(简称PG)是一种强大的开源关系型数据库管理系统,因其高可靠性、扩展性和支持复杂查询的特性,在生物信息学领域得到广泛应用。以下是其核心应用场景及优势分析: 一、生物数据存储与管理 生物信息学涉及海量…...

EMO2:基于末端执行器引导的音频驱动虚拟形象视频生成
今天带来EMO2(全称End-Effector Guided Audio-Driven Avatar Video Generation)是阿里巴巴智能计算研究院研发的创新型音频驱动视频生成技术。该技术通过结合音频输入和静态人像照片,生成高度逼真且富有表现力的动态视频内容,值得…...