COMMON文件存储格式
RCFile
RCFile文件格式是FaceBook开源的一种Hive的文件存储格式,首先将表分为几个行组,对每个行组内的数据进行按列存储,每一列的数据都是分开存储,正是先水平划分,再垂直划分的理念。
数据部分我们可以看出RCFile将每一行,存储为一列,将一列存储为一行。
而RCFile由于相同的列都是在一个HDFS块上,所以相对列存储而言会节省很多资源
ORCFile
ORC的全称是(Optimized Row Columnar),它并不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储。
ORC on hive优势:
- 多个输出写到同一个文件上,减少namenode压力
- 文件是可切分(spilt)
- 提供了多种索引
- 支持复杂的数据结构
- 基于块压缩
ORC file structure
ORC & parquet
列式存储压缩原理
数据压缩算法
- delta-encoding 差分编码,增量编码
- 是通过储存差异来达到压缩的目标。
- 比如:
- 输入串:1000, 1001, 1002, 1005
- 压缩后:1000, 1, 2, 5
- 适用场景:有序数据集,例如timestamp
- dictionary encoding 字典编码
- 提供一个字典,如果输入串中的单词命中字典,则用字典中的位置来替换这个词。
- 适用场景:小规模的集合,例如IP地址
- run length encoding 流程编码
- 用一个符号或串长代替具有相同值的连续符号
- 一个例子:
- 输入串:AAAAAAAAAAAAAAA AAAAAAAAAAAAAAA AAA
- 压缩后为:15A 15A 3A
- 适用场景:重复数据