大数据技术栈速览之:Parquet

本文详细介绍了Parquet,一种面向分析型业务的列式存储格式,其优势在于列式存储、存储空间优化和计算时间优化。Parquet能够支持多种查询引擎,如Spark、Hive等,且在读取列数据时可实现映射和谓词下推,提高查询效率。此外,文章还探讨了Parquet的数据模型,包括Repetition Levels和Definition Levels,以及文件格式和计算时间优化策略。

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

几种hdfs文件存储格式的区别

Text:原始存储,

RCFile:结合列存储和行存储的优缺点,Facebook于是提出了基于行列混合存储的RCFile,它是基于SEQUENCEFILE实现的列存储格式,它即满足快速数据加载和动态负载高适应的需求外,也解决了SEQUENCEFILE的一些瓶颈。该存储结构遵循的是“先水平划分,再垂直划分”的设计理念。先将数据按行水平划分为行组,这样一行的数据就可以保证存储在同一个集群节点;然后在对行进行垂直划分。 

ORC:ORC File,它的全名是Optimized Row Columnar (ORC) file,其实就是对RCFile做了一些优化。据官方文档介绍,这种文件格式可以提供一种高效的方法来存储Hive数据。它的设计目标是来克服Hive其他格式的缺陷。运用ORC File可以提高Hive的读、写以及处理数据的性能。ORC File包含一组组的行数据,称为stripes,除此之外,ORC File的file footer还包含一些额外的辅助信息。在ORC File文件的最后,有一个被称为postscript的区,它主要是用来存储压缩参数及压缩页脚的大小。

ORCFile的主要优点为:

(1)、每个task只输出单个文件,这样可以减少NameNode的负载;

(2)、支持各种复杂的数据类型,比如:datetime, decimal, 以及一些复杂类型(struct、list、 map和 union);

(3)、在文件中存储了一些轻量级的索引数据;

(4)、基于数据类型的块模式压缩:

            Integer类型的列用行程长度编码(run-length encoding)

            String类型的列用字典编码(dictionary encoding)

(5)、用多个互相独立的RecordReaders并行读相同的文件;

(6)、无需扫描markers就可以分割文件;

(7)、绑定读写所需要的内存;

(8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。

avro:它可以提供:
1 丰富的数据结构类型
2 快速可压缩的二进制数据形式
3 存储持久数据的文件容器
4 远程过程调用RPC
5 简单的动态语言结合功能,Avro和动态语言结合后,读写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化只值得在静态类型语言中实现。
Avro依赖于模式(Schema)。Avro数据的读写操作是很频繁的,而这些操作都需要使用模式,这样就减少写入每个数据资料的开销,使得序列化快速而又轻巧。这种数据及其模式的自我描述方便于动态脚本语言的使用。

Parquet:Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发。一个Parquet文件是由一个header以及一个或多个block块组成,以一个footer结尾。header中只包含一个4个字节的数字PAR1用来识别整个Parquet文件格式。文件中所有的metadata都存在于footer中。footer中的metadata包含了格式的版本信息,schema信息、key-value paris以及所有block中的metadata信息。footer中最后两个字段为一个以4个字节长度的footer的metadata,以及同header中包含的一样的PAR1。

之前新统计系统的日志都是用Avro做序列化和存储,鉴于Parquet的优势和对Avro的兼容,将HDFS上的存储格式改为Paruqet,并且只需做很小的改动就用原读取Avro的API读取Parquet,单列查询效率可以提高近一个数量级。

 

在互联网大数据应用场景下,通常数据量很大且字段很多,

但每次查询数据只针对其中的少数几个字段,这时候列式存储是极佳的选择。列式存储,天然擅长分析,千万级别的表,count,sum,group by ,秒出结果!!

列式存储要解决的问题:

  • 把IO只给查询需要用到的数据
    • 只加载需要被计算的列
  • 空间节省
    • 列式的压缩效果更好
    • 可以针对数据类型进行编码
  • 开启矢量化的执行引擎(不再1条1条的处理数据,而是一次处理1024条数据)

 

Parquet是列式存储的一种文件类型,是Hadoop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值