Hive存储格式对比

本文详细介绍了Apache Hive中支持的多种文件存储格式,包括TextFile、SequenceFile、RCFile、AVRO、ORC和Parquet格式的特点及适用场景。对比不同格式在存储空间、查询效率和压缩方式上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Apache Hive支持Apache Hadoop中使用的几种熟悉的文件格式,如 TextFile,RCFile,SequenceFile,AVRO,ORC和Parquet 格式。Cloudera Impala也支持这些文件格式。 在建表时使用 STORED AS ( TextFile|RCFile|SequenceFile|AVRO|ORC|Parquet ) 来指定存储格式
TextFile 每一行都是一条记录,每行都以换行符(\ n)结尾。 数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。
SequenceFile 是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。
RCFile 是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。
AVRO 是开源项目,为Hadoop提供数据序列化和数据交换服务。您可以在Hadoop生态系统和以任何编程语言编写的程序之间交换数据。Avro是基于大数据Hadoop的应用程序中流行的文件格式之一。
ORC文件 代表了优化排柱状的文件格式。ORC文件格式提供了一种将数据存储在Hive表中的高效方法。这个文件系统实际上是为了克服其他Hive文件格式的限制而设计的。Hive从大型表读取,写入和处理数据时,使用ORC文件可以提高性能。

Parquet是一个面向列的二进制文件格式。Parquet对于大型查询的类型是高效的。对于扫描特定表格中的特定列的查询,Parquet特别有用。Parquet桌子使用压缩Snappy,gzip;目前Snappy默认。

存储格式对比
存储格式存储方式特点
TextFile行存储存储空间消耗比较大,并且压缩的text 无法分割和合并 查询的效率最低,可以直接存储,加载数据的速度最高
SequenceFile行存储存储空间消耗最大,压缩的文件可以分割和合并 查询效率高,需要通过text文件转化来加载
RCFile数据按行分块 每块按照列存储
存储空间最小,
查询的效率最高 ,
需要通过text文件转化来加载,
加载的速度最低。
压缩快 快速列存取。
读记录尽量涉及到的block最少 
读取需要的列只需要读取每个row group 的头部定义。 
读取全量数据的操作 性能可能比sequencefile没有明显的优势
ORCFile数据按行分块 每块按照列存储压缩快,快速列存取 ,效率比rcfile高,是rcfile的改良版本
Parquet列存储相对于PRC,Parquet压缩比较低,查询效率较低,不支持update、insert和ACID.但是Parquet支持Impala查询引擎

Parquet与ORC对比
 
Parquet
http://parquet.apache.org
Orc
http://orc.apache.org
发展状态目前都是Apache开源的顶级项目,列式存储引擎目前都是Apache开源的顶级项目,列式存储引擎
开发语言JavaJava
主导公司Twitter/ClouderaHortonworks
 ACID
不支持支持ACID事务
修改操作(update,delete)不支持支持
支持索引 (统计信息)
粗粒度索引
block/group/chunk级别统计信息
粗粒度索引
file/stripe/row级别统计信息,
不能精确到列建立索引
支持的查询引擎Apache Drill、ImpalaApache Hive
查询性能Orc性能更高一点Orc性能更高一点
压缩比Orc压缩比更高(见下图)Orc压缩比更高(见下图)
列编码支持多种编码,字典,RLE,Delta等支持主流编码,与Parquet类似

总结:如果仅仅是在HIve中存储和查询,建议使用ORC格式,如果在Hive中存储,而使用Impala查询,建议使用Parquet。
参考资料:

<think>嗯,用户想了解Hive支持的存储格式以及如何选择合适的。首先我需要回忆Hive常见的存储格式有哪些。记得有TextFile、SequenceFile、RCFile、ORCFile、Parquet这些。然后每个格式的特点和适用场景需要理清楚。 比如TextFile是最基础的,纯文本,适合导入导出方便,但性能可能差。SequenceFile是二进制,支持压缩和分割,可能适合中间数据存储。RCFile是行列混合,而ORCParquet是更高效的行列式存储,适合查询性能要求高的场景。 然后用户可能关心如何选择,比如需要考虑压缩、查询速度、是否频繁更新、是否与外部系统交互等因素。比如ORCParquet在分析查询时现好,但如果需要和Sqoop交互的话可能得用TextFile,像引用4提到的。 还要注意引用里的信息,比如引用2提到ORCParquet实际应用多,引用4提到Sqoop需要TextFile。所以回答里要结合这些引用,给出格式和使用建议,最后生成相关问题。需要确保LaTeX格式正确,行内用$,独立公式用$$,但问题里可能数学公式不多。可能涉及压缩类型如Snappy、Gzip,这些在引用1里提到,所以需要关联到存储格式的选择中。</think>### Hive支持的存储格式及使用场景 Hive支持多种存储格式,每种格式针对不同场景优化。以下是主要格式的特点和应用建议: #### 一、存储格式 1. **文本格式(TextFile)** - **特点**:默认格式,纯文本存储(如CSV、TSV),可读性强,但无压缩且查询效率低 - **适用场景**: - 数据导入/导出需求频繁的场景(如与Sqoop交互时需使用TextFile[^4]) - 临时数据或小规模数据集 - **示例建语句**: ```sql CREATE TABLE logs (id INT, content STRING) STORED AS TEXTFILE; ``` 2. **二进制序列化文件(SequenceFile)** - **特点**:二进制键值对存储,支持压缩和分片,适合Hadoop生态链交互 - **适用场景**: - MapReduce作业中间结果存储 - 需兼容Hadoop其他组件的场景 3. **行列式文件(RCFile)** - **特点**:行组内列式存储,压缩比高于TextFile,但性能弱于ORC/Parquet - **适用场景**: - 历史遗留系统兼容 - 需平衡存储与查询的场景(逐渐被ORC/Parquet替代) 4. **优化的行列式文件(ORCFile)** - **特点**: - 列式存储,支持高压缩比(如Zlib、Snappy[^1]) - 内置索引(如布隆过滤器)加速查询 - 支持ACID事务 - **适用场景**: - 大规模数据分析(如数仓核心) - 高并发查询场景[^2] - **示例建语句**: ```sql CREATE TABLE user_behavior (user_id STRING, action STRING) STORED AS ORC; ``` 5. **Apache Parquet** - **特点**: - 列式存储,支持嵌套数据结构 - 高效压缩(兼容Snappy、Gzip[^1]) - 适合Spark等生态工具 - **适用场景**: - 复杂嵌套结构数据处理(如JSON日志) - 跨计算引擎协作场景(如Hive+Spark) #### 二、选择依据 $$ \text{选择公式} = \max \left( \frac{\text{查询性能} \times \text{压缩比}}{\text{写入成本} + \text{兼容性约束}} \right) $$ 1. **优先ORC/Parquet**:99%的生产场景首选,例如: - ORC适合Hive专属高频分析 - Parquet适合跨平台数据湖 2. **强制使用TextFile**: - 与Sqoop交互时[^4] - 数据需直接人工查看 3. **特殊需求**: - 频繁更新数据 → 使用ORC(支持ACID) - 极致压缩 → ORC+Zlib压缩 #### 三、性能对比 | 格式 | 压缩比 | 查询速度 | 写入速度 | 适用操作类型 | |------------|--------|----------|----------|--------------------| | TextFile | 低 | 慢 | 快 | 全扫描 | | ORC | 高 | 快 | 中 | 列裁剪/聚合 | | Parquet | 高 | 快 | 中 | 嵌套查询/跨平台 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值