列式存储格式与压缩算法

列式存储格式与压缩算法

列式存储

在OLAP系统中使用列式存储可以在存储和查询两方面取得优势:

  • 存储:由于每列的数据类型是相同的,列式存储可以达到更好的压缩比
  • 查询:需要查询那些列才去扫描读取,在宽表及数据量大时优势更为明显

常见的列式存储格式有:Parquet、ORC(optimized RCFile)、RCFile(Row Columnar)

文件结构:

​ ORC和Parquet在存储时都是先分行组然后分列存储的

image-20210708180211081

支持引擎:

​ Parquet:Apache Hive 、Cloudera Impala、Apache Spark 等

​ ORC:Hive、MapReduce、Spark 等

ORC 详解:大数据:Hive - ORC 文件存储格式
Parquet 详解:为什么我们选择 Parquet

一句话总结:Parquet 支持复杂的数据嵌套式结构,但不支持数据删改及 ACID

压缩算法

压缩格式 压缩比 压缩速率 解压速率 多文件 splitable native 工具 hadoop自带
gzip 13.4% 21 MB/s 118 MB/s gzip
bzip2 13.2% 2.4MB/s 9.5MB/s bzip2
lzo 20.5% 135 MB/s 410 MB/s lzop
snappy 22.2% 172 MB/s 409 MB/s

*lzo 文件如果要切片需要建立索引

不同文件格式支持的压缩算法

image-20210708180651993

​ 当文件较大且不持支切片时,该文件将只能由一个 map task 读取并处理,导致处理时间过长,所以当有大文件需要读取处理的时候更多选择的是 Lzo 和 Parquet 的组合。

参考资料

- [1] Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结

- [2] 大数据:Hive - ORC 文件存储格式

- [3] 为什么我们选择 Parquet

原文地址:https://www.cnblogs.com/DavonC/p/14987766.html