Parquet性能测试之项目实践中应用测试

本文通过对比测试,验证了Parquet在SparkSql中的读写性能优于普通格式,列式计算效率高,且占用内存更小。在列数较多的查询中,可能会影响效率,但在大多数情况下,Parquet的性能优势显著。
摘要由CSDN通过智能技术生成

一、SparkSql中两种格式存储的读写性能(以资源产品拓扑信息宽表为例)

    1、假设:由于对于parquet存储格式来说,针对列式的查询读取操作以及列式的计算性能更高于普通的存储格式,所以在读取相同的sql过程中,表的存储格式为parquet,读取的性能更高,所花费的时间更少。

2、测试步骤:

   sparksql用的相关hive表,建立相同的parquet存储格式的表;

   分别执行生成的jar包,进行数据的整合;

   统计运行的时间,进行比较得出结论。

 

   3、测试结果:(可能是由于资源占用问题第三次测试中parquet存储格式花费时间较长,但是仍然低于hdfs格式存储的读取效率)

    

次数|时间

Parquet格式表

普通格式表

1

90

1451

2

938

1418

3

139

1614

平均时间

1036

1508

 

   4、测试分析

  此次测试,使用相同的sparksql进行读取转化,只是所使用的hive 的存储方式不同,由以上的执行时间来看,很明显在读写生成资源产品拓扑信息宽表过程中,建表为parquet存储所花费的时间更少,假设成立。

 

二、存储的格式不同,列式计算中parquet格式存储比普通文件存储进行列式运算的效率更高

   1、假设:由于parquet进行列式存储,不需要扫描全部全部的数据,只读取每次查询涉及的列,这样可以将I/O降低至N倍,另外可以保存每一列的统计信息实现部分谓词下推。因此,我们假设存储的格式不同,列式计算中parquet格式存储比普通文件存储进行列式运算的效率更高

   2、测试步骤:

   sparksql中需要处理的表存储为parquet格式和普通格式;

   执行列式运算的sparksql

   对比执行时间,得出结论。

 

 

 

 

 

 

 

 

 

   3、测试结果:

   

生成文件来源|执行所花费的时间

Parquet格式存储运算耗时

普通格式存储耗时

Sql难度分析

七天质量跟踪(Build_mov_fix_7day_fix)用表oss.build_mov_fix

218

750

Sparksql要对500万左右的数据进行多次分组求最大值

计算客户健康度分数Cust_Count_Yarn)用表oss.cust_health_detail

43

445

Sparksql要对40亿的数据查一天并进行多组复杂的加减求最大值以及判断最终获取结果

客户健康档案--开通装移修监控期数据Build_mov_fix_7day_health用表oss.cust_health_detailoss.cust_health_detail_num

1249

42

Sparksql对健康档案详单和统计表7天的数据进行计算关联,两张表的数据在40亿以上

 

 

4、测试分析

此次测试,通过复杂的大数据量的数据进行运算,写出结果。通过执行的时间,我们可以从里面看出执行效率如何。从前两次测试结果来看parquet格式存储的优势明显高于普通的文件存储。而从第三个来看关联查询运算,数据量也比较大,测试结果并非我们所假设的那样。什么原因造成的上述结果,经过查询资料,我们得知在列数查询较少的情况下,我们使用parquet格式存储进行查询的效率很高,包括直接impala查询大表所消耗的时间也是相比来说非常短。造成上述原因的主要原因应该是所需要进行聚合函数的字段过多,导致parquet格式存储的查询效率极具降低。因此,我们在进行sparksql执行时要考虑到所使用的表字段的个数,若是字段过多,建议使用一般的存储格式,不宜使用parquet来存储。通过分析,我们对假设要分情况来讨论,通过具体的字段数来决定使用哪种方式来进行数据格式的存储。

 

 

三、存储格式不同,Parquet格式存储所占用的内存更小

   1、假设:由于parquet存储格式每一列的成员都是同构的,针对不同的数据类型使用更高效的数据压缩算法,进一步减少I/O;并且由于每一列的成员的同构性,可以使用更加适合CPU pipeline的编码方式,减少CPU的缓存失效,所以我们假设存储格式不同,Parquet格式存储所占用的内存更小。

   2、测试步骤:

   生成相同数据量;

   将生成的数据按照普通文件格式存储和parquet格式存储;

   查看生成文件所占用的空间大小,进而得出结论。

 

3、测试结果:

 

 

 

 

生成文件的来源|所占用内存大小

Parquet存储文件大小

普通文件大小

相对节约比例

节约空间大小

资源产品拓扑信息宽表中间文件(zyproinfotwo

3.6G

12.6G

71.4%

9G

资源宽表回写oracle的数据(zydata_to_oracle)

726M

2.3G2355.2M

69.2%

1629.2M

拓扑导入bras数据(topo_add_stb

294.3M

1.2G1228.8M

76%

934.5M

 

 

4、测试分析

    此次测试,我们可以通过测试的数据看出使用Parquet格式来存储数据,占用的空间更小,节约的空间在70%以上,在我们的应用之中针对大数据量的基础表的存储,我们可以生成parquet格式进行存储,在代码之中我们可以通过读取所需的文件解析注册成临时表再进行操作提取所需要的字段。由此看见假设成立,存储格式不同,Parquet格式存储所占用的内存更小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值