如何为Apache Spark Thrift服务器的incrementalCollect设置行批量大小
配置不生效原因
spark.sql.inMemoryColumnarStorage.batchSize的作用是控制Spark缓存列式存储数据时的单批次行数,和Thrift Server增量返回查询结果的批次逻辑完全无关,因此配置后不会生效。
自定义批次大小的实现方案
Spark 3.1.2版本中,开启spark.sql.thriftServer.incrementalCollect后的10000行返回批次属于硬编码常量,官方未在该版本暴露公开配置项,可根据你的场景选择以下方案:
- 方案一:升级Spark版本至3.2及以上
该版本官方新增了专属配置项spark.sql.thriftServer.incrementalCollect.batchSize,可直接在Thrift Server启动参数中指定预期批次大小,示例配置如下:spark-sbin/start-thriftserver.sh \ --conf spark.sql.thriftServer.incrementalCollect=true \ --conf spark.sql.thriftServer.incrementalCollect.batchSize=500000 - 方案二:修改Spark 3.1.2源码重新编译
找到源码中org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation类,修改常量INCREMENTAL_COLLECT_BATCH_SIZE的默认值为你需要的大小,重新编译Spark包后部署即可。
调整注意事项
- 批次大小提升后,单次查询的服务端内存占用会同步上升,需要结合你的节点内存规格、同时运行的并发查询数合理设置,避免内存溢出
- 调整完成后建议先进行单查询压测和并发压测,验证稳定性和性能符合预期后再全量上线
内容的提问来源于stack exchange,提问作者fokoenecke
相关产品推荐
相关产品推荐

