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