Kyuubi计算引擎管理

本文为您介绍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启动一个引擎

  • 大规模ETL

  • Ad-hoc查询

USER

每个用户一个引擎

GROUP

每个资源组一个引擎

SERVER

每个集群一个引擎

管理员

高安全集群程度最高,非高安全集群程度最低

高安全集群只允许管理员使用

示例

以下场景以共享级别USER为例(即设置参数kyuubi.engine.share.level为USER),本示例假设所有用户都已通过LDAP或Kerberos认证。

  1. 根据需求动态启动计算引擎。

    新用户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
  2. 向指定引擎提交任务。

    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
  3. 单个引擎支持多个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

参考文档