本文為您介紹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