更新时间:2024-11-12 GMT+08:00

配置流式读取Spark Driver执行结果

配置场景

在执行查询语句时,返回结果有可能会很大(10万数量以上),此时很容易导致JDBCServer OOM(Out of Memory)。因此,提供数据汇聚功能特性,在基本不牺牲性能的情况下尽力避免OOM。

配置描述

提供两种不同的数据汇聚功能配置选项,两者在Spark JDBCServer服务端的tunning选项中进行设置,设置完后需要重启JDBCServer。

表1 参数说明

参数

说明

默认值

spark.sql.bigdata.thriftServer.useHdfsCollect

是否将结果数据保存到HDFS中而不是内存中。

优点:由于查询结果保存在hdfs端,因此基本不会造成JDBCServer的OOM。

缺点:速度慢。

  • true:保存至HDFS中。
  • false:不使用该功能。
    须知:

    spark.sql.bigdata.thriftServer.useHdfsCollect参数设置为true时,将结果数据保存到HDFS中,但JobHistory原生页面上Job的描述信息无法正常关联到对应的SQL语句,同时spark-beeline命令行中回显的Execution ID为null,为解决JDBCServer OOM问题,同时显示信息正确,建议选择spark.sql.userlocalFileCollect参数进行配置。

false

spark.sql.uselocalFileCollect

是否将结果数据保存在本地磁盘中而不是内存里面。

优点:结果数据小数据量情况下和原生内存的方式相比性能损失可以忽略,大数据情况下(亿级数据)性能远比使用HDFS,以及原生内存方式好。

缺点:需要调优。大数据情况下建议JDBCServer driver端内存10G,executor端每个核心分配3G内存。

  • true:使用该功能。
  • false: 不使用该功能。

false

spark.sql.collect.Hive

该参数在spark.sql.uselocalFileCollect开启的情况下生效。直接序列化的方式,还是间接序列化的方式保存结果数据到磁盘。

优点:针对分区数特别多的表查询结果汇聚性能优于直接使用结果数据保证在磁盘的方式。

缺点:和spark.sql.uselocalFileCollect开启时候的缺点一样。

  • true:使用该功能。
  • false:不使用该功能。

false

spark.sql.collect.serialize

该参数在spark.sql.uselocalFileCollect, spark.sql.collect.Hive同时开启的情况下生效。

作用是进一步提升性能

  • java:采用java序列化方式收集数据。
  • kryo:采用kryo序列化方式收集数据,性能要比采用java好。

java

参数spark.sql.bigdata.thriftServer.useHdfsCollect和spark.sql.uselocalFileCollect不能同时设置为true。