Spark服務化-為什麼選擇livy

Spark服務化需求

由於項目需要,需要開發一個Spark服務化的功能,可以提交sql,代碼和jar包到Spark集群運行,作為模型自動調度的基礎功能。

Spark服務化-為什麼選擇livy

開始階段,自己實現。自然而然的想到,通過在Spark中建立一個常駐應用,通過rpc調用sql 和 內置的應用。這樣夠簡單,不用引入新組件,但是配置和更新應用都不夠靈活, 開發出來後發現在穩定性也不夠,需要大量時間調優。

SparkJobServer VS Livy

後來發現了SparkJobServer 和 Livy, 都提供了Spark的服務化功能。

相同點:

sparkJobServer 和 Livy, 都提供了REST接口提交spark任務,並且都支持sparkContext複用。

不同點:

  1. 支持的任務類型,SparkJobServer 只支持jar包, Livy支持提交jar,sql,scala,python等。
  2. 運行模式,SparkJobServer支持client模式,Livy支持client/cluster
  3. 對代碼的侵入,SparkJobServer需要繼承對應的接口,Livy 不需要。

綜合考慮選擇了Livy。

Livy簡介

Livy的基本架構:

Spark服務化-為什麼選擇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中兩類不同的處理交互方式。


分享到:


相關文章: