Livy 系列 - Livy 的核心功能及模塊概述#
內容整理自:
Livy 的核心功能點#
- 透過 http 請求將任務發送到 Livy server
- Livy server 端接收用戶的請求,並進行相應的路由去調用某個類的某個方法
- 鑑權 (可以不开啟)
- 根據任務請求啟動 Spark 應用服務
- 執行用戶指定的任務,提供獲取運行狀態、獲取運行結果、共享 SparkContext 以及被正常停止等能力
- 容錯機制,任務能夠從失敗前狀態恢復
模塊概述#
對應上面功能點可以歸納出以下幾個模塊:
- Client
- router
- 權限管理
- 生成 Spark App
- 交互式 Driver(僅對於 session 任務有,batch 並沒有)
- 狀態數據存儲
router#
Livy server 提供的 api 是 rest api,Client 發送的請求也是針對各個資源(uri)的增刪改查。router 的核心職責是管理好要把對什麼資源的什麼操作指派給哪個類的哪個函數來處理。
該模塊核心類是 SessionServlet
,,有兩個子類:InteractiveSessionServlet
及 BatchSessionServlet
,分別用來路由對 session 及 batch 相關的請求
權限管理#
權限由 AccessManager 類管理,維護了幾種不同級別的 user:
superUser
modifyUser
viewUser
allowedUser
以及不用級別的 acl(訪問控制列表):
viewAcls
:superUsers ++ modifyUsers ++ viewUsers,對應查看權限modifyAcls
:superUsers ++ modifyUsers,對應修改權限(包括 kill 權限)superAcls
:superUsers,有所有權限allowedAcls
:superUsers ++ modifyUsers ++ viewUsers ++ allowedUsers,表示 acl 的全集
生成 SparkAPP#
對於 session 和 batch 的任務,生成 Spark App 的邏輯及最終生成的 Spark App 都是不同的
生成 batch 的 Spark App 涉及的主要類:
-
SparkProcessBuilder
:用於從 livyConf 中提取出運行一個 Spark App 所需的一切,包括 mainClass、executableFile、deployMode、conf、master、queue、env 及 driver 和 executors 的資源配置等等;並最終生成一條啟動 Spark App 的 spark-submit 命令 -
SparkYarnApp
:用來運行 SparkProcessBuilder 生成的啟動命令,並監控管理啟動運行起來的 Spark App,包括獲取狀態、日誌、診斷信息、kill 等(目前 livy 只支持 local 和 yarn 兩種模式)
生成 session 的 Spark App 涉及的主要類:
-
ContextLauncher
:用於啟動一個新的 Spark App(通過 SparkLauncher)以及獲取如何連接到其 driver 的信息(地址、clientId 及秘鑰) -
RSCClient
:與 Spark Driver 建立連接,向其發送創建、查看狀態結果日誌、修改 statement、job 等請求並獲取響應
交互式 Driver#
核心類是 RSCDriver
,其繼承與 RpcDispatcher
,RpcDispatcher 接收來自 RSCClient
發送的 rpc 請求,根據請求的類型調用 RSCDriver
相應的方法去處理請求中包含的具體信息,對於最核心的執行代碼片段(statement)請求,調用 repl/Session
去處理,repl/Session 最終會根據不同的 session kind
調用不同的 Interpreter
進行真正的代碼執行。
狀態數據存儲#
核心類是 StateStore
,狀態數據的存儲都是以 key-value 形式,目前有基於filesystem文件系統
和 Zookeeper
的實現。另外,SessionStore
繼承了該類提供高階 Api 來進行 sessions 的存儲和恢復