概述git
當前spark上的管控平臺有spark job server,zeppelin,因爲spark job server和zeppelin都存在一些缺陷,好比spark job server不支持提交sql,zeppelin不支持jar包方式提交,而且它們都不支持yarn cluster模式,只能以client的模式運行,這會嚴重影響擴展性。針對這些問題,cloudera研發了Livy,Livy結合了spark job server和Zeppelin的優勢,並解決了spark job server和Zeppelin的缺點,下面是他們的對比。github
Livy的三套接口sql
Livy提供三套管理任務的接口分別是:編程
(1) 使用Using the Programmatic API,經過程序接口提交做業。session
a) 須要繼承com.cloudera.livy.Job接口編程,經過LivyClient提交 app
(2) 使用RestAPI的session接口提交代碼段方式運行 性能
(3) 使用RestAPI的batch接口提交jar包方式運行ui
更詳細的API文檔能夠參考連接:https://github.com/cloudera/livy#prerequisitesspa
Livy執行做業流程 設計
下面這幅圖片是Livy的基本原理,客戶端提交任務到Livy server後,Livy server啓動相應的session,而後提交做業到Yarn集羣,當Yarn拉起ApplicationMaster進程後啓動SparkContext,並鏈接到Livy Server進行通訊。後續執行的代碼會經過Livy server發送到Application進程執行。
(圖片摘自livy社區)
下面是源碼級別的詳細的執行流程:
a.live-server啓動,啓動BatchSessionManager, InteractiveSessionManager。
b.初始化WebServer,經過ServletContextListener啓動InteractiveSessionServlet和BatchSessionServlet。
c.經過http調用SessionServlet的createSession接口,建立session並註冊到sessionManager,InteractiveSession和BatchSession會建立SparkYarnApp,SparkYarnApp負責啓動Spark做業,並維護yarnclient,獲取做業信息、狀態或kill做業。
d. BatchSession是以jar包的方式提交做業,運行結束後session做業就結束。
e. InteractiveSession會啓動com.cloudera.livy.repl.ReplDriver,ReplDriver繼承RSCDriver,初始化期間會經過RPC鏈接到livy-server,並啓動RpcServer;其次會初始化Interpreter(支持PythonInterpreter,SparkInterpreter,SparkRInterpreter)。接收來自livy-server,並啓動RpcServer;其次會初始化Interpreter(支持PythonInterpreter,SparkInterpreter,SparkRInterpreter)。接收來自livy-server的信息(代碼),而後經過Interpreter執行,livy-server經過RPC請求做業結果。
Livy 還存在的問題
Livy是當前spark上最好的管控平臺, 即便不使用Livy,也能夠借鑑Livy的設計思路。固然Livy當前還沒徹底成熟,下面列舉了幾個待完善的點,社區也在開發過程當中,但願Livy後續變得更加完善。
1. 不支持提交SQL https://issues.cloudera.org/browse/LIVY-19
2. session,app信息都維護在livy-server,livy-server掛掉信息丟失,須要HA。
3. livy-server的性能如何,能並行多少session。
4. 多個livy-server如何管理?