You need to enable JavaScript to run this app.
导航

Kyuubi 高级特性

最近更新时间2024.02.19 11:48:27

首次发布时间2023.12.08 17:55:52

本文向您介绍与 Kyuubi 相关的一些概念与高级特性使用情况。

1 引擎支持

火山引擎 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 引擎。

2 引擎共享等级

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

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

3 正确配置 Kyuubi 引擎

Kyuubi 引擎本质是通过 spark-submit 提交的计算引擎,该引擎最终的配置定义,可以有多个来源,且遵循一定的优先级进行覆盖。

3.1 通过 spark-defaults.conf

与其他的 Spark 作业一样,Kyuubi 引擎的首要来源是 spark-defaults.conf 文件中的定义。

3.2 通过 kyuubi-defaults.conf

更进一步,Kyuubi 也支持在自身的 kyuubi-defaults.conf 配置文件中直接添加 spark 配置,在该文件中的配置定义,会覆盖 spark-defaults.conf 中的同名配置。

3.3 通过 JDBC Connection URL

如果您是通过 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.coresspark.executor.memoryspark.driver.coresspark.driver.memory 默认值,您可以通过配置修改来更新相关参数。

3.4 通过 SET Syntax

该方式请参考官方文档指引,Set Command

3.5 租户级别引擎配置

在 Kyuubi 中,为了支持更细粒度租户级别的引擎配置,在 kyuubi-defaults.conf 配置文件中,支持以___{username}___.{config_key}形式定义此类配置,在用户名的两侧需要有连续三个下划线_,并以.符号将具体config_key与前缀分隔开。
这种形式配置生效的时机,只发生在引擎创建时。它的优先级,高于spark-defaultskyuubi-defaults,但会被JDBC Connection URLSet 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

4 引擎复用与 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