Spark job server原理初探

 

Spark job server是一個基於Spark的服務系統,提供了管理SparkJob,context,jar的RestFul接口。html

專一標註原文連接 http://www.cnblogs.com/shenh062326/p/6193375.htmlapi

使用說明restful

    參考 http://debugo.com/spark-jobserver/網絡

原理介紹cors

    服務端JobServer首先啓動,它會啓動一個名叫WebApi的HttpService服務,它提供下面這幾個Routesjvm

val myRoutes = cors {
  binaryRoutes ~ jarRoutes ~ contextRoutes ~ jobRoutes ~
  dataRoutes ~ healthzRoutes ~ otherRoutes
}

能夠看到,spark job server支持二進制,jar,context,job,data,health,和其餘這幾類服務。用戶發送http請求到服務端後,WebApi會調用相應的routes。這裏我將介紹兩個最主要的Routes,分別是contextRoutes和jobRoutes。spa

contextRoutesdebug

    在contextRoutes的處理增長context(一個context對應一個SparkContext)邏輯中,會發送AddContext消息給LocalContextSupervisorActor(看起來當前只支持spark client模式), LocalContextSupervisorActor首先會判斷contextName是否已經存在,若是存在則拋異常。不然建立context。(支持多個sparkcontext,代碼中設置了spark.driver.allowMultipleContexts=true, 雖然spark不由止使用多個sparkcontext,但可能會出問題,由於spark源碼中不少地方的假定都是基於sparkcontext,好比共享內存,thread local變量,許多全局的標識。SPARK-2243例子中出現的狀況是一個spark job結束後另一個spark streaming job也失敗)。多個SparkContext會以存在HashMap中。rest

    另外contextRoutes還提供了刪除和更新(先刪除後增長)context的功能。code

jobRoutes

    jobRoutes最主要的功能是提交 job,若是提交job時指定了context,spark job server會把job運行在相應的context中;經過沒有指定,spark job server則會啓動一個臨時的context運行job。spark job server運行job時會調用用戶代碼中的validate方法驗證輸入,而後調用用戶代碼中的runjob執行做業的邏輯,同時把context傳遞給用戶代碼。

    jobRoutes還提供了查詢job信息,kill job等功能。

Spark Job Server的優缺點總結
優勢:
提供了restful接口;能管理job,context,jar等功能;方便用戶重用context,cache的數據。

缺陷

1 用戶編寫程序須要基於spark job server提供的接口,參考LongPiJob,繼承於api.SparkJob。缺點:用戶既要操做spark原生的接口,又要繼承spark job server的SparkJob接口。

2 一個JVM啓動多個SparkContext,可能會出問題。如今spark job Server的作法是忽略這種問題。

3 同一個jvm內啓動多個sparkcontext,即便不出錯,也可能會出現多個sparkcontext相互影響,如內存,網絡(boardCast,getMapOutStatus,collect等)磁盤。須要提供相似接入層的邏輯,啓動多個機器運行sparkContext。

雖然存在一些問題,但spark job server向人們提供了一種操做spark context和job的方式,值得咱們在構建spark應用平臺時借鑑。

相關文章
相關標籤/搜索