压缩格式与分片

643 阅读1分钟

为了减小文件占用的磁盘空间,我们一般会对文件进行压缩,如果要采用mapreduce或spark对文件进行读取就要注意压缩文件的格式。

因为我们一般采用的gzip,snappy都不支持splittable,即不能通过多个task同时处理一个文件。


表格来自hadoop权威指南

针对这种情况我们一般采用parquetorc格式。

parquet,orc及avro的区别

  1. 相同点

  • 基于Hadoop文件系统优化出的存储结构

  • 提供高效的压缩

  • 二进制存储格式

  • 文件可分割,具有很强的伸缩性和并行处理能力

  • 使用schema进行自我描述

  • 属于线上格式,可以在Hadoop节点之间传递数据

  1. 不同点

  • 行式存储or列式存储:Parquet和ORC都以列的形式存储数据,而Avro以基于行的格式存储数据。
  • 就其本质而言,面向列的数据存储针对读取繁重的分析工作负载进行了优化,而基于行的数据库最适合于大量写入的事务性工作负载。
  • 压缩率:基于列的存储区Parquet和ORC提供的压缩率高于基于行的Avro格式。
  • 可兼容的平台:ORC常用于Hive、Presto; Parquet常用于Impala、Drill、Spark、Arrow; Avro常用于Kafka、Druid。