本文向您介绍与 Kyuubi 相关的一些概念与高级特性使用情况。
火山引擎 E-MapReduce(EMR)Kyuubi 开箱支持 Spark3 On YARN 模式,对于 Flink、Trino、Spark2 等引擎没有验证,暂不提供生产可用的承诺。
注意
若您有通过 Kyuubi 使用其他引擎的需求,可通过配置 kyuubi.engine.type 进行切换,配置修改详见管理服务配置参数。
需要注意的是,kyuubi.engine.type 为实验性质的配置,当选用非 SPARK_SQL 的其他配置值,会将共享等级限定为 CONNECTION 级别,与 kyuubi.engine.share.level 配置冲突。
下文提到的 Kyuubi 引擎全部为 On YARN 的 Spark3 引擎。
根据 kyuubi-defaults 配置文件中提供的 kyuubi.engine.share.level 配置,您可以定义 Kyuubi 服务的引擎共享级别。
支持的共享等级与相关含义说明如下所示:
共享级别 | 含义 | 备注 |
---|---|---|
CONNECTION | 每个 Session 独占一个引擎 | 每个连接首次建立时,带来较大的引擎创建开销。 |
USER | 每个用户独占一个引擎 | 开箱配置。 |
GROUP | 每个资源组使用一个引擎 | |
SERVER | 每个集群使用一个引擎 | 隔离级别最低,需要管理员对集群安全性有足够把握。 |
Kyuubi 引擎本质是通过 spark-submit 提交的计算引擎,该引擎最终的配置定义,可以有多个来源,且遵循一定的优先级进行覆盖。
与其他的 Spark 作业一样,Kyuubi 引擎的首要来源是 spark-defaults.conf 文件中的定义。
更进一步,Kyuubi 也支持在自身的 kyuubi-defaults.conf 配置文件中直接添加 spark 配置,在该文件中的配置定义,会覆盖 spark-defaults.conf 中的同名配置。
如果您是通过 JDBC 方式使用 Kyuubi,可以直接在连接串中定义连接级别的相关配置;对于 Static SQL 与其他 Spark Core 配置(如 spark.executor.memory),如果本次连接会新建引擎实例,也会一并生效。
说明
相关配置文档可参考:
Spark Runtime SQL Configuration,每次连接均生效。
Static SQL and Spark Core Configuration,是否生效,取决于本次连接是否创建引擎实例。
对于EMR-3.7.3及以上版本,Kyuubi 配置针对 Spark3 引擎设置spark.dynamicAllocation.enabled
默认值为true
, 您可以通过配置修改来关闭动态资源分配或调整其相关参数。
对于EMR-3.8.0及以上版本,根据集群规格,Kyuubi 配置针对 Spark3 引擎设置一些资源配置参数spark.executor.cores
,spark.executor.memory
,spark.driver.cores
,spark.driver.memory
默认值,您可以通过配置修改来更新相关参数。
该方式请参考官方文档指引,Set Command。
在 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
以下场景基于 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