列存储格式学习

本贴最后更新于 2384 天前,其中的信息可能已经时移俗易

背景

学习一下常用的列存储格式。

概况

内容整理自[2]

块压缩 读性能 写性能 增加列 场景 备注
CSV 不支持 很低 部分支持,只能加到末尾
JSON 不支持 全面支持
Sequence 不支持 只能追加字段 Hadoop 中间数据
RCFile (Record Columnar) 支持 很好 Hadoop 上第一个列存储
ORC (Optimized RC) 比 RCFile 更好 更好 不支持 Hortonworks/Hive
Parquet 很好 很好 比较慢 有限 Cloudera/Impala
Avro 很好?
  • 数据格式:text、RC、Parquet、ORC
  • 相同大小的原始数据集,转换成相应的格式之后的文件大小:Text > RC > Parquet > ORC

具体数据

内容整理自[3],进行了归一化处理,以 RCFile 为基准。

存储格式 压缩比 存储时间 查询时间
RCFile 100% 100% 100%
ORC 2.8% 98.6% 22.2%
SequenceFile 105% 115.1% 208.0%
Parquet 17.24% 98.9% 27.4%
Avro 104.5% 100.2% 318.2%

初步结果

  • 压缩比:ORC >> Parquet >> Avro, SequenceFile, RCFile ORC 较大领先压缩比最高
  • 存储时间:ORC, Parquet > RCFile, SequenceFile, Avro 差别不大
  • 查询时间:ORC > Parquet >> RCFile > SequenceFile > Avro 列存储都比较快,压缩比越高越快

综合结果

首选 ORC, 次选 Parquet

备注

我们内部测试的时候:

  1. ORC 的大小是 Parquet 的 1/2 ~ 1/3,没有达到[3]中的近 1/8 的效果。
  2. JSON 的大小约为 CSV 的 2.5 倍,这个是可以理解的,JSON 中 meta 信息是完整的。

来源

  1. Data Lake Analytics > 最佳实践 > CSV 文件格式
  2. text、RC、Parquet、ORC
  3. Hive 的几种常见压缩格式(ORC,Parquet,Sequencefile,RCfile,Avro)的读写查询性能测试

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...