本文为您介绍Kyuubi支持的引擎及共享级别,并通过示例为您介绍如何启动计算引擎和向计算引擎提交任务。
支持引擎
EMR集群安装Kyuubi时会依赖安装YARN和Spark3引擎。EMR Kyuubi支持Spark3 on YARN部署(暂未支持Flink、Trino以及Spark2引擎)。本文以Spark为例,一个Spark引擎对应一个YARN Spark Application,具体请参见示例。
共享级别
根据Kyuubi服务的配置页面的kyuubi-defaults.conf页签中参数kyuubi.engine.share.level的配置,可以为引擎设置不同的共享级别。
共享级别 | 语义 | 适用场景 | 隔离程度 | 共享程度 |
CONNECTION | 每个Session启动一个引擎 |
| 高 | 低 |
USER | 每个用户一个引擎 | 中 | 中 | |
GROUP | 每个资源组一个引擎 | 低 | 高 | |
SERVER | 每个集群一个引擎 | 管理员 | 高安全集群程度最高,非高安全集群程度最低 | 高安全集群只允许管理员使用 |
示例
以下场景以共享级别USER为例(即设置参数kyuubi.engine.share.level为USER),本示例假设所有用户都已通过LDAP或Kerberos认证。
根据需求动态启动计算引擎。
新用户user1需要使用Spark计算引擎,通过kyuubi-beeline工具提交作业后,Kyuubi Server会启动一个新的Spark引擎处理用户作业。
kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql
如果新用户user2需要指定Spark引擎使用的资源量,可以有以下两种方式:
方式一:在JDBC URL中设置Spark Application Executor等资源
# Set User config via JDBC Connection URL kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000?spark.dynamicAllocation.enabled=false;spark.executor.cores=2;spark.executor.memory=4g;spark.executor.instances=4" \ -f query1.sql
方式二:在kyuubi-defaults.conf配置文件中设置Spark引擎使用的资源量
# Set User default config in kyuubi-defatuls.conf # ___user2___.spark.dynamicAllocation.enabled=false # ___user2___.spark.executor.memory=5g # ___user2___.spark.executor.cores=2 # ___user2___.spark.executor.instances=10 kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql
向指定引擎提交任务。
Kyuubi Server启动的Spark引擎在用户作业运行完成之后会继续保留一段时间,新的计算任务可以复用该引擎,无需启动新的YARN Application,提升作业或SQL查询性能。如果长时间没有新作业提交,引擎会自动退出。引擎保留时间由参数kyuubi.session.engine.idle.timeout控制,默认值为PT30M(即保留30分钟),该参数可以在Kyuubi服务的配置页面的kyuubi-defaults.conf页签中配置。
Kyuubi支持在同一个共享级别下创建subdomain。例如新用户user4需要针对不同业务场景使用不同的引擎资源,可以在JDBC URL中设置kyuubi.engine.share.level.subdomain参数,然后提交作业到不同的引擎上。
kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \ -f query1.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \ -f query2.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \ -f query3.sql
单个引擎支持多个Spark Session。
Kyuubi支持多个Spark Session同时使用一个Spark引擎。例如用户user1在两个不同的终端同时提交作业,两个作业会使用同一个Spark引擎进行运算,多个作业会根据Spark内部的默认调度机制完成Executor资源分配。
# Console 1 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz1" \ -f query1.sql # Console 2 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz2" \ -f query2.sql