Hive文件存储格式——Parquet


发布于 2017-04-30 / 31 阅读 / 0 评论 /
Parquet是一种新型列式存储格式。

1.Parquet概述

Apache Parquet是Hadoop生态圈中一种新型列式存储格式,它可以兼容Hadoop生态圈中大多数计算框架(Mapreduce、Spark等),被多种查询引擎支持(Hive、Impala、Drill等),并且它是语言和平台无关的。Parquet最初是由Twitter和Cloudera合作开发完成并开源,2015年5月从Apache的孵化器里毕业成为Apache顶级项目。

Parquet文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此Parquet格式文件是自解析的。

Parquet旨在支持灵活的压缩选项和高效的编码方案。由于每列的数据类型非常相似,因此每列的压缩都很简单,这就使得查询更快。可以使用可用的多个编解码器之一压缩数据,因此可以以不同的方式压缩不同的数据文件。

Apache Parquet最适合交互式和无服务器技术,如AWS Athena、Google BigQuery和Google Dataproc。

2.Parquet存储格式(storage format)

parquet-format项目(https://github.com/apache/parquet-format)中定义了Parquet内部的数据类型、存储格式等信息。

3.Parquet对象模型转换器(object model converters)

这部分功能由parquet-mr项目(https://github.com/apache/parquet-mr)来实现,主要完成外部对象模型与Parquet内部数据类型的映射。如下图所示,当前parquet支持一下转换器:

对于C++版本的对象模型,可以使用parquet-cpp项目(https://github.com/apache/parquet-cpp)来实现。

4.Parquet对象模型(object models)

对象模型可以简单理解为内存中的数据表示,Avro、Thrift、Protocol Buffers、Hive SerDe、Pig Tuple、Spark SQL InternalRow等这些都是对象模型。Parquet也提供了一个example object model 帮助大家理解。