问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Parquet性能测试调优及其优化建议

创作时间:
作者:
@小白创作中心

Parquet性能测试调优及其优化建议

引用
51CTO
1.
https://blog.51cto.com/u_11964104/2071800

Parquet是一种列式存储格式,广泛应用于大数据处理和存储领域。本文通过详细的性能测试和数据分析,展示了Parquet在读取效率、列式计算和压缩效率方面的优势,并提供了实际应用中的优化建议。

一、为什么选择Parquet

  1. 外部因素
  • 我们已经在使用Spark集群,而Spark原生支持Parquet格式,并推荐其作为默认存储格式。
  • Hive也支持Parquet格式存储,使用HiveSQL查询完全兼容。
  1. 内在优势
  • 高效压缩:由于每一列的成员都是同构的,可以针对不同的数据类型使用更高效的数据压缩算法。测试显示,Parquet的压缩比可达27倍(默认使用gzip压缩,压缩率最高,解压速度最快)。
  • 列式读取:查询时只需读取涉及的列,无需扫描全部数据,显著降低I/O消耗。同时,可以保存列的统计信息(如min、max、sum等)。
  • 分区过滤与列修剪:Parquet结合Spark可以实现分区过滤和列修剪,减少不必要的数据读取,提高查询效率。

二、Parquet存储格式解析

Parquet文件在磁盘上的分布情况如下图所示:

  • Row group:数据被水平切分成Row group,每个Row group包含其对应区间内的所有列的column chunk。
  • Column chunk:负责存储某一列的数据,包括Repetition level、Definition level和Values。
  • Page:是压缩和编码的单元,对数据模型透明。
  • Footer:存储文件的元数据信息和统计信息。

推荐设置较大的Row group以提高并行度,一般建议配置为1G大小,同时HDFS块大小也为1G,一个HDFS文件只包含一个块。

三、Parquet性能测试

1. 普通文件与Parquet文件读取列性能对比

测试环境:58.56机器、Spark 1.6、STS、Hive等

测试目的:验证Spark在读取普通文件和Parquet文件时,读取相同列的速率差异。

测试结果(约27005万数据):

查询列数
普通Hive表耗时
Parquet表耗时
1列
2分53秒
2分42秒
5列
3分53秒
1分27秒
20列
5分58秒
3分56秒
35列
9分16秒
9分36秒
50列
13分19秒
8分11秒

结论:随着列数增加,读取时间增加。在列数较多时,使用Parquet存储可以显著提高读取效率。

2. Parquet列式存储在列式计算中的效率

测试环境:58.56机器、Spark 1.6、STS、Hive等

测试目的:验证Spark在读取普通文件和Parquet文件时,针对某些列式运算的性能差异。

测试结果

  • 第一组(2个求和,3个求平均):

  • 普通Hive表平均耗时:2分33秒

  • Parquet表平均耗时:1分27秒

  • 第二组(2个求和,3个求平均,2个求最大值,2个求最小值):

  • 普通Hive表平均耗时:2分37秒

  • Parquet表平均耗时:1分42秒

  • 第三组(4个求和,4个求平均,4个求最大值,4个求最小值):

  • 普通Hive表平均耗时:2分52秒

  • Parquet表平均耗时:2分02秒

结论:Parquet在列式计算中比普通行式存储有明显优势,运算效率提升30%-40%。

3. 压缩效率对比

测试环境:58.56机器、Spark 1.6、STS、Hive等

测试目的:验证普通文件和Parquet文件的压缩效率差异。

测试结果

  • 普通文件总大小:12.6G
  • Parquet文件总大小:3.6G
  • 压缩空间减少:近70%

四、Parquet在实际项目中的应用建议

  1. 当读取的列数并非全部列数时,建议使用Parquet格式存储(建表时使用stored by parquet)。
  2. 在进行列式计算或向量计算时,建议使用Parquet格式存储,以提高运算效率。
  3. 如果需要备份存储,可以使用Parquet文件进行压缩,以节约空间并提高压缩效率和速率。

:文中提到的Spark版本(1.6)已较为陈旧,当前Spark的最新版本在功能和性能上可能有所改进。在实际应用中,建议参考最新版本的官方文档和最佳实践。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号