配置流式读取Spark Driver执行结果
配置场景
在执行查询语句时,返回结果有可能会很大(10万数量以上),此时很容易导致JDBCServer OOM(Out of Memory)。因此,提供数据汇聚功能特性,在基本不牺牲性能的情况下尽力避免OOM。
配置描述
提供两种不同的数据汇聚功能配置选项,两者在Spark JDBCServer服务端的tunning选项中进行设置,设置完后需要重启JDBCServer。
参数 |
说明 |
默认值 |
---|---|---|
spark.sql.bigdata.thriftServer.useHdfsCollect |
是否将结果数据保存到HDFS中而不是内存中。 优点:由于查询结果保存在hdfs端,因此基本不会造成JDBCServer的OOM。 缺点:速度慢。
|
false |
spark.sql.uselocalFileCollect |
是否将结果数据保存在本地磁盘中而不是内存里面。 优点:结果数据小数据量情况下和原生内存的方式相比性能损失可以忽略,大数据情况下(亿级数据)性能远比使用hdfs,以及原生内存方式好。 缺点:需要调优。大数据情况下建议JDBCServer driver端内存10G,executor端每个核心分配3G内存。
|
false |
spark.sql.collect.Hive |
该参数在spark.sql.uselocalFileCollect开启的情况下生效。直接序列化的方式,还是间接序列化的方式保存结果数据到磁盘。 优点:针对分区数特别多的表查询结果汇聚性能优于直接使用结果数据保证在磁盘的方式。 缺点:和spark.sql.uselocalFileCollect开启时候的缺点一样。
|
false |
spark.sql.collect.serialize |
该参数在spark.sql.uselocalFileCollect, spark.sql.collect.Hive同时开启的情况下生效。 作用是进一步提升性能
|
java |
参数spark.sql.bigdata.thriftServer.useHdfsCollect和spark.sql.uselocalFileCollect不能同时设置为true。