bigdata存储格式parquet分享

作者:小涛 Parquet 列式存储格式

1.背景 随着大数据时代的到来,越来越多的数据流向了 Hadoop 生态圈,同时对于能够快速的 从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop 生态圈的快速发展过程中,涌现了一批开源的数据分析引擎,例如 Hive、Spark SQL、Impala、 Presto 等,同时也产生了多个高性能的列式存储格式,例如 RCFile、ORC、Parquet 等。 2. Parquet 存储格式 Apache Parquet 是 Hadoop 生态圈中一种新型列式存储格式,它可以兼容 Hadoop 生态 圈中大多数计算框架(Mapreduce、Spark 等),被多种查询引擎支持(Hive、Impala、Drill 等), 并且它是语言和平台无关的。Parquet 最初是由 Twitter 和 Cloudera合作开发完成并开源,2015 年 5 月从 Apache 的孵化器里毕业成为 Apache 顶级项目,目前最新版本 1.9.0。 3. 列式存储 由于 OLAP 查询的特点,列式存储可以提升其查询性能,但是它是如何做到的呢?这就要从 列式存储的原理说起,从图 1 中可以看到,相对于关系数据库中通常使用的行式存储,在使 用列式存储时每一列的所有元素都是顺序存储的。由此特点可以给查询带来如下的优化: 1 查询的时候不需要扫描全部的数据,而只需要读取每次查询涉及的列,这样可以将 I/O 消耗降低 N 倍。 2 由于每一列的成员都是同构的,可以针对不同的数据类型使用更高效的数据压缩算 法,进一步减小 I/O。

在这里插入图片描述

3 适配多种计算框架 Parquet 是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和 组件,能够与 Parquet 配合的组件有: 查询引擎: Hive, Impala, Pig, Presto, Drill, IBM Big SQL 计算框架: MapReduce, Spark, Cascading, Kite 4. 文件结构 Parquet 文件是以二进制方式存储的,是不可以直接读取和修改的,Parquet 文件是自解析的, 文件中包括该文件的数据和元数据。Parquet 文件中存在如下几个概念: 1 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的 行数,在一个 HDFS 文件中至少存储一个行组,Parquet 读写的时候会将整个行组缓存在内 存中,所以每一个行组的大小是由内存大的小决定的。 2 列块(Column Chunk):在一个行组中每一列保存在一个列块中,行组中的所有列连 续的存储在这个行组文件中。不同的列块可能使用不同的算法进行压缩。 3 页(Page):每一个列块划分为多个页,一个页是最小的编码的单位,在同一个列块 的不同页可能使用不同的编码方式。

  1. 上图展示了一个 Parquet 文件的内容,一个文件中可以存储多个行组,文件的首位都是 该文件的 Magic Code,用于校验它是否是一个 Parquet 文件,Footer length 了文件元数据的 大小,通过该值和文件长度可以计算出元数据的偏移量,文件的元数据中包括每一个行组的 元数据信息和该文件存储数据的 Schema 信息。

     											4种压缩格式的特征比较
    

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值