深入分析Parquet列式存储格式.docxVIP

  • 7
  • 0
  • 约9.14千字
  • 约 13页
  • 2019-11-26 发布于广东
  • 举报
深入分析Parquet列式存储格式 Parquet是而向分析型业务的列式存储格式,由Twitter和CloiAclera合作开发,2-0^5 年S月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是2.8.0。 列式存储 列式存储和行式存储相比有哪些优势呢? 可以跳过不符合条件的数据,只读取需要的数据,降低I。数据量。 压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高 效的压缩编码(例如Run. Length. Excodiag和Delta Eacod?认g)进一步节约存储空 间。 只读取需要的列,支持向量运算,能够获取更好的扫描性能。 当时Twitter的日增数据量达到压缩之后的1QOTB+,存储在HDFS上,工程师会使用 多种计算框架(例如MapReduce, Hive, Pig等)对这些数据做分析和挖掘;日志结构是 复杂的嵌套数据类型,例如一个典型的日志的schema有87列,嵌套了 7层。所以需要 设计一种列式存储格式,既能支持关系型数据(简单数据类型),又能支持复杂的嵌套类型 的数据,同时能够适配多种数据处理框架。 关系型数据的列式存储,可以将每一列的值直接排列下來,不用引入其他的概念,也不会丢 失数据。关系型数据的列式存储比较好理解,而嵌套类型数据的列存储则会遇到一些麻烦。 如图2所示,我们把嵌套数据类型的一行叫做一个记录(record),嵌套数据类型的特点是 一个record中的cobwm除了可以是仏匕Long丿String这样的原语(.primitive)类型 以外,还可以是List, Map, Set这样的复杂类型。在行式存储中一行的多列是连续的写在 一起的,在列式存储屮数据按列分开存储,例如可以只读取A.B.C这一列的数据而不去读 A.E和A.B.D,那么如何根据读取出来的各个列的数据重构出一行记录呢? 1record- orie ntedcolum n- orie nted 1 record- orie nted colum n- orie nted 图2行式存储和列式存储 Google的Prckvxe/系统解决了这个问题,核心思想是使用<frecord shredding ai^d as^bly 川仇穴来表示复杂的嵌套数据类型,同时辅以按列的高效压缩和编码技术, 实现降低存储空间,提高Q效率,降低上层应用延迟。Parquet就是基于Pre^e/的数 据模型和算法实现的。 Parquet适配多种计算框架 Parquet是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组 件,能够与Parquet配合的组件有: 查询引擎:Hive, \w\pa\a, Pig, Presto, Drill, Tajo, HAWQ, IBM Big SQL 计算框架:MapReduce, Spark, Cascading, CriAinch, Scalding, Kite 数据模型:Aw。,Thrift, Protocol Buffers, POJOs 那么Parquet是如何与这些组件协作的呢?这个可以通过图2来说明。数据从内存到 Parquet文件或者反过来的过程主要由以下三个部分组成: 4 存储格式(storage format) parquet - fo旷mat项目定义了 Parquet内部的数据类型、存储格式等。 2丿对彖模型转换器(object ^odel converters) 这部分功能由项目来实现,主要完成外部对彖模型与Parquet内部数据类 型的映射。 3,对彖模型(object models) 对象模型可以简单理解为内存屮的数据表示,Awe Thrift, Protocol Buffers, Hive SerPe? Pig Tup? Spark SQL I lateral Row 等这些都是对象模型。Parquet 也提供 了 一个example object i^odel帮助大家理解。 例如pairquet-i^r项目里的parquet-pig项目就是负责把内存中的Pig Tuple序列化并 按列存储成Parquet格式,以及反过来把Parquet文件的数据反序列化成Pig Tuple。 这里需要注意的是Avq TMift, Protocol Buffers都有他们自己的存储格式,但是 Parquet并没有使用他们,而是使用了自己在parquet-format项目里定义的存储格式。 所以如果你的应用使用了 Asm等对象模型,这些数据序列化到磁盘还是使用的 paqudm厂定义的转换器把他们转换成Parquet自己的存储格式。 图2 Parquet项目的结构 Parquet数据模型 理解Parquet首先要理解这个列存储格式的数据模型。我们以一个

文档评论(0)

1亿VIP精品文档

相关文档