簡體   English   中英

從Java的另一個應用程序部署Apache Spark應用程序,最佳實踐

[英]Deploy Apache Spark application from another application in Java, best practice

我是Spark的新用戶。 我有一個Web服務,該服務允許用戶通過從數據庫讀取並將結果推回數據庫來請求服務器執行復雜的數據分析。 我已經將那些分析轉移到了各種Spark應用程序中。 目前,我使用spark-submit來部署這些應用程序。

但是,我很好奇,當我的Web服務器(用Java編寫)收到用戶請求時,什么是啟動相應Spark應用程序的“最佳實踐”方法? Spark的文檔似乎是使用“ spark-submit”,但我寧願不將命令傳遞給終端以執行此操作。 我看到了一個替代方案Spark-JobServer,它提供了一個RESTful接口來完成此操作,但是我的Spark應用程序是用Java或R編寫的,似乎無法與Spark-JobServer很好地接口。

是否有另一種最佳實踐來從Web服務器(Java)中啟動Spark應用程序,並等待狀態結果(無論作業成功還是失敗)?

任何其他人為實現此目的正在做什么的想法都將非常有幫助! 謝謝!

我也有類似的要求。 這是我所做的:

  1. 要提交應用程序,我使用隱藏的Spark REST提交API: http : //arturmkrtchyan.com/apache-spark-hidden-rest-api

  2. 使用相同的API,您可以查詢驅動程序的狀態,也可以稍后取消工作

  3. 還有另一個隱藏的UI Json API: http:// [master-node]:[master-ui-port] / json / ,以JSON格式公開了主UI上可用的所有信息。

使用“提交API”提交驅動程序,並使用“主UI API”等待驅動程序和應用程序狀態為RUNNING

Web服務器還可以充當Spark驅動程序。 因此它將具有一個SparkContext實例,並包含用於RDD的代碼。

這樣做的好處是,Spark執行程序的壽命很長。 您不必一直啟動/停止它們,從而節省了時間。 您可以在操作之間緩存RDD。

缺點是,由於執行程序一直在運行,因此它們占用了群集中其他進程可能使用的內存。 另一個問題是,您不能擁有一個以上的Web服務器實例,因為同一個Spark應用程序不能擁有多個SparkContext

我們使用的是Spark Job-server,它在Java上運行良好,也只是構建了Java代碼罐,並用Scala包裝它以與Spark Job-Server一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM