介绍
Parquet是目前比较流行的大数据文件列存储格式,主流的大数据计算框架都对其有良好的支持,包括spark,hive,impala等。相对于传统的行存储模式,列存储主要有以下优点:
可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量。
压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间。
只读取需要的列,支持向量运算,能够获取更好的扫描性能。
相对于其它的列式存储格式,例如ORC,Parquet主要优势在于支持更为广泛,且对嵌套数据的支持更好。详细的比较可以参考
http://dongxicheng.org/mapreduce-nextgen/columnar-storage-parquet-and-orc/
主要概念
- Parquet文件是以二进制方式存储的,不能直接读取和修改,文件中包括该文件的数据和schema(自解析,可以理解为类似JSON)
- 行组(Row Group):按照行将数据物理上划分为多个单元,每一个行组包含一定的行数,Row group是数据读写时候的缓存单元,Parquet读写的时候会将整个行组缓存在内存中;
- 列块(Column Chunk):列块负责存储一个行组中某一列的数据,行组中的所有列连续的存储在这个行组文件中。不同的列块可能使用不同的算法进行压缩。
- 页(Page):每一个列块又划分为多个页,Page是压缩和编码的最小单元,对数据模型来说是透明的,在同一个列块的不同页可能使用不同的编码方式。
性能调优
如果采用HDFS文件系统,影响Parquet文件读写性能的参数主要有两个,dfs.blocksize和parquet.block.size
- dfs.blocksize: 控制HDFS file中每个block的大小,该参数主要影响计算任务的并行度,例如在spark中,一个map操作的默认分

Parquet是一种广泛应用于大数据计算框架的列存储格式,如Spark、Hive和Impala。列存储相比行存储,能减少IO量,通过压缩编码节省空间,并支持向量运算提升扫描性能。Parquet文件包含数据和schema,由行组、列块和页组成。性能调优关键在于合理设置dfs.blocksize和parquet.block.size,以平衡并行度和内存开销。推荐每个RowGroup和HDFS块大小均为1GB。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



