Spark服務化需求
由於項目需要,需要開發一個Spark服務化的功能,可以提交sql,代碼和jar包到Spark集群運行,作為模型自動調度的基礎功能。
開始階段,自己實現。自然而然的想到,通過在Spark中建立一個常駐應用,通過rpc調用sql 和 內置的應用。這樣夠簡單,不用引入新組件,但是配置和更新應用都不夠靈活, 開發出來後發現在穩定性也不夠,需要大量時間調優。
SparkJobServer VS Livy
後來發現了SparkJobServer 和 Livy, 都提供了Spark的服務化功能。
相同點:
sparkJobServer 和 Livy, 都提供了REST接口提交spark任務,並且都支持sparkContext複用。
不同點:
- 支持的任務類型,SparkJobServer 只支持jar包, Livy支持提交jar,sql,scala,python等。
- 運行模式,SparkJobServer支持client模式,Livy支持client/cluster
- 對代碼的侵入,SparkJobServer需要繼承對應的接口,Livy 不需要。
綜合考慮選擇了Livy。
Livy簡介
Livy的基本架構:
用戶可以以REST請求的方式通過Livy啟動一個新的Spark集群,Livy將每一個啟動的Spark集群稱之為一個會話(session),一個會話是由一個完整的Spark集群所構成的,並且通過RPC協議在Spark集群和Livy服務端之間進行通信。根據處理交互方式的不同,Livy將會話分成了兩種類型:
交互式會話(interactive session),這與Spark中的交互式處理spark-shell相同,交互式會話在其啟動後可以接收用戶所提交的代碼片段,在遠端的Spark集群上編譯並執行;
批處理會話(batch session),用戶可以通過Livy以批處理的方式啟動Spark應用,這樣的一個方式在Livy中稱之為批處理會話,這與Spark中的批處理是相同的。
可以看到,Livy所提供的核心功能與原生Spark是相同的,它提供了兩種不同的會話類型來代替Spark中兩類不同的處理交互方式。
閱讀更多 陳序猿9527 的文章