Livy原理詳解


概述

  當前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的缺點,下面是他們的對比。

 

 Livy的三套接口

  Livy提供三套管理任務的接口分別是:

 (1) 使用Using the Programmatic API,通過程序接口提交作業。

    a) 需要繼承com.cloudera.livy.Job接口編程,通過LivyClient提交

2) 使用RestAPI的session接口提交代碼段方式運行

(3) 使用RestAPI的batch接口提交jar包方式運行

更詳細的API文檔可以參考鏈接:https://github.com/cloudera/livy#prerequisites

 

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如何管理?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM