Kyuubi介紹

Kyuubi 是對spark thrift server的加強版,它彌補了spark thrift server缺少的多租戶,授權,負載均衡,高可用特性。
在這裏插入圖片描述

統一接口

Kyuubi使用的協議與HiveServer保持一致,因此它能夠支持所有的JDBC/ODBC客戶端,用戶應用程序也可以根據上圖的thrift API寫。用戶可以用多種類型的客戶端連接kyuubi服務,每個連接都綁定了一個sparkSession實例,sparkSession中包含了HiveMetaStoreClient,它能夠與hive MetaStore Server交互。

運行時資源彈性

在啓動期間,Kyuubi不會佔用集羣管理器(Yarn)的任何資源,如果沒有與SparkContext交互的活動會話,Kyuubi會將所有資源返回給Yarn。此外,它還支持Spark動態資源分配,允許我們在SparkContext中動態分配資源。

Kyuubi動態SparkContext緩存

Kyuubi實現了一個SparkSessionCacheManager來控制SparkSession/SparkContext的實例化、註冊、緩存、重用和回收。不同的用戶在第一次連接到服務器後,在Kyuubi服務器中只有一個SparkContext實例,它將在整個連接生命週期和所有連接關閉後的一段時間內緩存在SparkSessionCacheManager中。這樣SparkContext就會有多個實例,每個用戶使用屬於自己的實例,每個SparkContext佔用yarn上部分資源,這就實現了多租戶的功能。
在這裏插入圖片描述

所有屬於同一用戶的連接共享這個SparkContext來生成它們自己的SparkSession。

spark動態資源分配

Spark提供了一種機制,可以根據工作負載動態調整應用程序佔用的資源。這意味着,如果不再使用資源,您的應用程序可能會將它們返回給集羣,並在以後需要時再次請求它們。如果多個應用程序共享Spark集羣中的資源,該特性尤其有用。

安全

kyuubi支持Kerberos認證,並且支持集成spark-authorizer權限驗證插件,該插件對Spark沒有侵入性,主要用於查詢優化的最後階段。實際上,具體權限對接的是Ranger中的權限控制中心,通過集成Spark-authorizer,能夠做到細粒度的權限控制。

在這裏插入圖片描述

高可用

在這裏插入圖片描述

當配置spark.kyuubi.ha.enabled=true時,多個Kyuubi服務器實例可以向ZooKeeper註冊。然後客戶端可以通過ZooKeeper找到一個Kyuubi服務器。當一個客戶端請求一個服務器實例時,ZooKeeper會隨機返回一個選中的註冊實例。這個特性提供了:
 高可用性
 負載均衡
 滾動升級

內部結構

在這裏插入圖片描述
FrontendService負責維護與客戶端的連接,與客戶端進行交互,將客戶端的SQL請求轉發至BackendService;BackendService負責執行Spark SQL並將執行結果返回給FrontendService。FrontendService最後將結果返回至客戶端。

SparkSessionCacheManager 負責管理SparkSession,OperationManager負責管理KyuubiOperation。客戶端提交上來的請求轉化爲KyuubiOperation。通過KyuubiSession獲取到sparkSession,將請求提交到spark sql執行。

總結

Kyuubi以HiveServer2 Thrift API爲接口協議,提供Spark SQL服務。相比傳統的Spark,Kyuubi主要增加多租戶、權限、負載均衡等功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章