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