常见问题

最近更新时间: 2026-03-13 09:03:00

Kyuubi 连接执行报错

问题

TBDS执行SparkSQL-Kyuubi报错

原因

一体化/云原生 kyuubi 连接串错误,例如:

  • principal 写在 # 号后面,# 号前是 beeline 使用参数,如认证。
  • 号后是 kyuubi server 使用参数

  • 云原生场景下,多加了不必要的 yarn 参数。

解决方案

参考文档:示例工程开发

引擎共享等级

根据 kyuubi-defaults 配置文件中提供的 kyuubi.engine.share.level 配置,您可以定义 Kyuubi 服务的引擎共享级别。
支持的共享等级与相关含义说明如下所示:

共享级别 含义 备注
CONNECTION 每个 Session 独占一个引擎 每个连接首次建立时,带来较大的引擎创建开销。
USER 每个用户独占一个引擎 开箱配置。
GROUP 每个资源组使用一个引擎 --
SERVER 每个集群使用一个引擎 隔离级别最低,需要管理员对集群安全性有足够把握。

租户级别引擎配置

在 Kyuubi 中,为了支持更细粒度租户级别的引擎配置,在 Kyuubi-defaults.conf 配置文件中,支持以___{username}__.{config_key}形式定义此类配置,在用户名的两侧需要有连续三个下划线,并以.符号将具体config_key与前缀分隔开。
这种形式配置生效的时机,只发生在引擎创建时。它的优先级,高于Spark-defaults与Kyuubi-defaults,但会被JDBC Connection URL与Set Command提供的配置覆盖。
下面提供部分配置示例。

# For system defaults
spark.master=local
spark.sql.adaptive.enabled=true 

# For a user named kent
___kent___.spark.master=yarn
___kent___.spark.sql.adaptive.enabled=false 

# For a user named bob
___bob___.spark.master=spark://master:7077
___bob___.spark.executor.memory=8g

引擎复用与 Subdomain 定义

以下场景基于 USER 共享级别。
Kyuubi 提交的 Spark 引擎,会在作业完成之后存在一段时间,在引擎存活的期间,继续提交的作业可以直接复用原引擎,省去了引擎提交等待创建的开销,可以有效提升作业性能。该存活时间由配置kyuubi.session.engine.idle.timeout决定,默认时间是PT30M(即半小时)。
对于同一个用户,在实际的生产环境中,可能希望根据不同的作业类型,在不同的引擎中进行作业运行。在 Kyuubi 中,这样的需求可以通过配置kyuubi.engine.share.level.subdomain满足。
这是一个连接级别的配置,在对应连接配置参数中直接指定,就可以将本次连接的作业提交到不同的 subdomain 当中。

beeline -n user1 -p user1_password -u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \  
-f query1.sql

beeline -n user1 -p user1_password -u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \  
-f query2.sql

beeline -n user1 -p user1_password -u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \  
-f query3.sql

Curl API接口出现问题


上述问题主要在Curl版本过低的情况下低版本Curl 不支持 SPNEGO,建议升级Curl的版本,测试环境下Curl版本>=7.71.1。