为了减小文件占用的磁盘空间,我们一般会对文件进行压缩,如果要采用mapreduce或spark对文件进行读取就要注意压缩文件的格式。
因为我们一般采用的gzip,snappy都不支持splittable,即不能通过多个task同时处理一个文件。
表格来自hadoop权威指南
针对这种情况我们一般采用parquet或orc格式。
parquet,orc及avro的区别
相同点
基于Hadoop文件系统优化出的存储结构
提供高效的压缩
二进制存储格式
文件可分割,具有很强的伸缩性和并行处理能力
使用schema进行自我描述
属于线上格式,可以在Hadoop节点之间传递数据
不同点
- 行式存储or列式存储:Parquet和ORC都以列的形式存储数据,而Avro以基于行的格式存储数据。
- 就其本质而言,面向列的数据存储针对读取繁重的分析工作负载进行了优化,而基于行的数据库最适合于大量写入的事务性工作负载。
- 压缩率:基于列的存储区Parquet和ORC提供的压缩率高于基于行的Avro格式。
- 可兼容的平台:ORC常用于Hive、Presto; Parquet常用于Impala、Drill、Spark、Arrow; Avro常用于Kafka、Druid。