引擎共享级别选择
引擎共享级别(kyuubi.engine.share.level)直接决定引擎的启动与复用行为,选择建议如下:
1、CONNECTION:每个 jdbc 连接串会启动一个 spark 的 application,执行结束后马上退出,隔离性最好,适合临时查询、需要与其他任务完全隔离的场景;
2、USER:一个用户一个 application,多个会话复用,避免频繁启动引擎,适合交互式分析等日常场景,也是集群默认级别;
3、GROUP、SERVER:按组或服务共享引擎,适合大规模批处理统一入口场景,需要结合集群资源评估使用。
说明
日常交互式查询使用默认USER 级别即可;需要强隔离的批处理任务可使用 CONNECTION 级别,避免相互影响。
引擎隔离(subdomain)
如果要一个用户启动不同的application,那么增加参数 kyuubi.engine.share.level.subdomain,后面的值随便定义,不同的值启动不同的 application,例如 kyuubi.engine.share.level.subdomain=test1。
典型用法:将生产任务与临时查询、不同业务线任务使用不同的subdomain 隔离,避免内存、队列资源互相抢占。
引擎资源调优
引擎(Spark application)资源相关参数可以通过连接串追加或服务端配置调整:
| 参数 | 配置方式 | 说明 |
|---|---|---|
| spark.driver.memory | 连接串追加或kyuubi-defaults.conf | driver 内存,资源不足时适当调大 |
| spark.executor.instances | 连接串追加或kyuubi-defaults.conf | executor 个数,控制引擎并行度 |
| spark.executor.memory | 连接串追加或kyuubi-defaults.conf | 单个executor 内存 |
| spark.executor.cores | 连接串追加或kyuubi-defaults.conf | 单个executor 核数 |
| ___<user>___.spark.driver.memory | kyuubi-defaults.conf(需重启服务) | 按用户定制引擎参数,例如___hdfs___.spark.driver.memory=4g |
SQL 执行调优
1、Shuffle 并行度:通过连接串追加 spark.sql.shuffle.partitions 参数调整(默认200),Join/聚合数据量大时适当调大;
2、避免 select *:只查询需要的列,减少扫描与传输量;
3、大结果集导出:使用 INSERT OVERWRITE ... 将结果直接写入 HDFS,避免结果集全量拉取到客户端;
4、广播 Join:小表关联场景可通过 spark.sql.autoBroadcastJoinThreshold 控制广播阈值,避免 Shuffle。