写在前面
本文隶属于专栏《100个问题搞定大数据理论体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和文献引用请见100个问题搞定大数据理论体系
解答
Parquet是Hadoop上一种支持列式存储的文件格式, 本质上将嵌套结构存储为扁平格式。
Parquet非常适用于 OLAP 场景,按列存储和扫描。
Parquet被称为大数据时代存储格式的事实标准。
补充
特点
- 更高的压缩比
列存使得更容易对每个列使用高效的压缩和编码,降低磁盘空间。(网上的case是不压缩、gzip、snappy分别能达到11/27/19的压缩比)
- 更小的IO操作
使用映射下推和谓词下推,只读取需要的列,跳过不满足条件的列,能够减少不必要的数据扫描,带来性能的提升并在表字段比较多的时候更加明显。
映射下推
这是列式存储最突出的优势,是指在获取数据时只需要扫描需要的列,不用全部扫描。
谓词下推
是指通过将一些过滤条件尽可能的在最底层执行以减少结果集。
谓词就是指这些过滤条件,即返回bool:true和false的表达式,比如SQL中的大于小于等于、Like、Is Null等。
文件格式
Parquet 的存储模型主要由行组(Row Group)、列块(Column Chunk)、页(Page)组成。
-
Row Group:Parquet 在水平方向上将数据划分为行组,默认行组大小与 HDFS Block 块大小对齐,Parquet 保证一个行组会被一个 Mapper 处理。
-
Column Chunk:行组中每一列保存在一个列块中,一个列块具有相同的数据类型,不同的列块可以使用不同的压缩。
-
Page:Parquet 是页存储方式,每一个列块包含多个页,一个页是最小的编码的单位,同一列块的不同页可以使用不同的编码方式。
另外 Parquet 文件还包含header与footer信息,分别存储文件的校验码与Schema等信息。