前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据文件格式对比 Parquet Avro ORC 特点 格式 优劣势

大数据文件格式对比 Parquet Avro ORC 特点 格式 优劣势

作者头像
大鹅
发布2021-06-16 17:23:04
4K0
发布2021-06-16 17:23:04
举报

文章目录

背景

在大数据环境中,有各种各样的数据格式,每个格式各有优缺点。如何使用它为一个特定的用例和特定的数据管道。数据可以存储为可读的格式如JSON或CSV文件,但这并不意味着实际存储数据的最佳方式。

有三个文件格式用于Hadoop集群:

  • Optimized Row Columnar (ORC)
  • Avro
  • Parquet

Apache Avro

Avro是一种远程过程调用和数据序列化框架,是在Apache的Hadoop项目之内开发的。它使用JSON来定义数据类型和通讯协议,使用压缩二进制格式来序列化数据。它主要用于Hadoop,它可以为持久化数据提供一种序列化格式,并为Hadoop节点间及从客户端程序到Hadoop服务的通讯提供一种电报格式。

  • 基于行的(存储数据行):基于行的数据库是最适合write-heavy事务性工作负载
  • 支持序列化
  • 快速二进制格式
  • 支持块压缩和可分离
  • 支持schema更新
  • 存储模式的头文件数据是自描述

Apache Parquet

源自于google Dremel系统,Parquet相当于Google Dremel中的数据存储引擎,而Apache顶级开源项目Drill正是Dremel的开源实现。

Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer,thrift,json等,将这类数据存储成列式格式,以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,这也是Parquet相比于ORC的优势,它能够透明地将Protobuf和thrift类型的数据进行列式存储,在Protobuf和thrift被广泛使用的今天,与parquet进行集成,是一件非容易和自然的事情。 除了上述优势外,相比于ORC, Parquet没有太多其他可圈可点的地方,比如它不支持update操作(数据写成后不可修改),不支持ACID等。

  • 基于列(在列中存储数据):用于数据存储是包含大量读取操作的优化分析工作负载
  • 与Snappy的压缩压缩率高(75%)
  • 只需要列将获取/读(减少磁盘I / O)
  • 可以使用Avro API和Avro读写模式
  • 支持谓词下推(减少磁盘I / O的成本)

Apache ORC

ORC(OptimizedRC File)存储源自于RC(RecordColumnar File)这种存储格式,RC是一种列式存储引擎,对schema演化(修改schema需要重新生成数据)支持较差,而ORC是对RC改进,但它仍对schema演化支持较差,主要是在压缩编码,查询性能方面做了优化。RC/ORC最初是在Hive中得到使用,最后发展势头不错,独立成一个单独的项目。Hive 1.x版本对事务和update操作的支持,便是基于ORC实现的(其他存储格式暂不支持)。ORC发展到今天,已经具备一些非常高级的feature,比如支持update操作,支持ACID,支持struct,array复杂类型。你可以使用复杂类型构建一个类似于parquet的嵌套式数据架构,但当层数非常多时,写起来非常麻烦和复杂,而parquet提供的schema表达方式更容易表示出多级嵌套的数据类型。

  • 用于(在列中存储数据):用于数据存储是包含大量读取操作的优化分析工作负载
  • 高压缩率(ZLIB)
  • 支持Hive(datetime、小数和结构等复杂类型,列表,地图,和联盟)
  • 元数据使用协议缓冲区存储,允许添加和删除字段
  • HiveQL兼容
  • 支持序列化

总结

相同点

  • 基于Hadoop文件系统优化出的存储结构
  • 提供高效的压缩
  • 二进制存储格式
  • 文件可分割,具有很强的伸缩性和并行处理能力
  • 使用schema进行自我描述
  • 属于线上格式,可以在Hadoop节点之间传递数据

不同点

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

Ref

  1. https://blog.csdn.net/OiteBody/article/details/85055574
  2. https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8
  3. https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 背景
  • Apache Avro
  • Apache Parquet
  • Apache ORC
  • 总结
  • Ref
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档