hadoop列式存储和行式存储

列式存储和行式存储在压缩和读取上有显著区别。列式存储利于压缩和快速读取特定列,适合大数据查询;行式存储适合全表扫描,如TextFile、SequenceFile、Avro是行式存储格式。列式存储如ORC、RCfile、Parquet提供高效查询,尤其在大数据场景下广泛应用。Avro适合ETL,Parquet适合宽表查询,ORC在压缩和ACID属性上有优势。Hive常用ORC和Parquet作为存储格式。

列式存储和行式存储的区别

在这里插入图片描述

  • 压缩比较

列式存储是按照列进行存储的,同一列的相邻的value的数据类型是一样,可以对value进行压缩。

行式存储按照行存储,一行中有多个字段,字段类型不一样,会导致压缩性能就较差

  • 读取比较

读取 select id, time from table;

行式存储:需要遍历每一行,再将id、time拼接出来

列式存储: 只需要读取id、time两列就好

但是对于select * from table

列实存储需要再拼接,所以效率会低一些。

但是在大数据领域下一般不会进行全表扫描,所以大多采用列式存储

为什么我们需要不同的文件存储格式呢?

不同的文件存储格式在存储大小、读取速率、写入速率会有不同的表现。而不同的场景下对这两者的要求是不同的,比如说在数据仓库通常是一次写入,多次读取的,对读取性能有更高的要求。所以需要有不同的文件存储格式满足不同的需求。

常见的行式存储格式:TextFile、SequenceFile、Avro

常见的列式存储格式有:ORC、RC file、parquet

ORC、RC file是结合了行、列存储的数据格式

  • TextFile

    常采用csv、json等固定长度的纯文本格式

    hive中表数据的默认存储格式,将所有的数据都存储为String类型,不便于数据的解析,却比较通用。不具备随机读写的能力,占用空间较大

  • SequenceFile

    按行存储二进制键值对数据,HDFS自带

    二进制文件,将<key,value> 序列化到文件中,二进制的可读性就不好

    可用于hadoop中小文件的打包存档

    支持记录压缩、块压缩

  • Avro

    一个序列化系统。基于行存储

    序列化:将内存中的对象转为字节序列,便于网络中的传输。

    反序列化:将字节序列转为内存中的对象。

    用Json格式存储数据定义(表的描述、字段、字段类型),二进制格式存储数据

    通用的数据格式

    可压缩

    可读性就较低

    自带RPC

  • Parquet

    按照列进行存储,spark sql的默认数据源格式,列式存储的优缺点。即读取某一列的数据较快

  • RC file

    先划分行集合,在行集合中存储列式数据,加入轻量级索引,允许跳过行。

  • ORC FIle

    RC的优化版本

在这里插入图片描述

ORC 文件格式将行集合存储在一个文件中,并且在集合中,行数据以列格式存储

ORC 文件包含称为stripe的行数据组和File footer(文件页脚)中的辅助信息 。默认stripe大小为 250 MB。大stripe大小支持从 HDFS 进行大量、高效的读取。

在Hive中常用的使用方式:一般读入源文件为Avro格式,在Hive中的中间过程可以使用ORC存储,而最后保存也选择Avro格式保存。因为Avro格式比较通用,而ORC格式在很多地方并不能使用。

差异

  • 读取(速度从高到低排序)

Avro:查询随时间变化,支持扩展字段

Parquet:适合在宽表上查询少数列

Parquet & ORC:以牺牲性能为代价,优化读取能力

TextFile:可读性最佳,但是文件读取速度慢

  • Hive查询(速度从高到低排序)

ORC**(常用):几乎专门为Hive定制的格式,速度很快
Parquet
(常用)**
Text
Avro**(常用)**:占地小,节省磁盘空间,也是比较通用的格式
SequenceFile:占地小,节省磁盘空间;本身是为了MR的k、v对设计,而非Hive,所以对于Hive来说速度最慢。

总结:常用的格式是AVRO 、Parquet、ORC;Parquet、ORC是列式存储格式,Avro是行式存储格式。

对比Avro和Parquet:

1.Parquet由于是列式存储格式,所以在读取查询效率比较高。

2.在模式演变方面,Avro比 PARQUET 成熟得多。Parquet 仅支持模式追加,而 Avro支持功能强大的模式演变,即添加或修改列。也就是说在写操作上,Avro表现更好。

3.Avro是ETL操作的理想选择,需要查询所有的列

ORC和Parquet的比较

Parquet更能存储嵌套数据

ORC更能进行谓词下推

ORC支持ACID属性

ORC压缩效率更高

参考文章:
Hadoop文件存储格式(Avro、Parquet、ORC及其他)

(65条消息) Hadoop文件存储格式_赵昕彧的博客-CSDN博客_hadoop文件存储格式

(65条消息) 行式数据和列式数据对比 存储压缩性能_回忆美好的博客-CSDN博客_列式存储压缩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_47467016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值