列式存储格式与压缩算法
列式存储
在OLAP系统中使用列式存储可以在存储和查询两方面取得优势:
- 存储:由于每列的数据类型是相同的,列式存储可以达到更好的压缩比
- 查询:需要查询那些列才去扫描读取,在宽表及数据量大时优势更为明显
常见的列式存储格式有:Parquet、ORC(optimized RCFile)、RCFile(Row Columnar)
文件结构:
ORC和Parquet在存储时都是先分行组然后分列存储的
支持引擎:
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 文件如果要切片需要建立索引
不同文件格式支持的压缩算法
当文件较大且不持支切片时,该文件将只能由一个 map task 读取并处理,导致处理时间过长,所以当有大文件需要读取处理的时候更多选择的是 Lzo 和 Parquet 的组合。
参考资料
- [1] Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结
- [2] 大数据:Hive - ORC 文件存储格式
- [3] 为什么我们选择 Parquet