[英]How to execute spark-submit in Java with Scala .jar provided?
我有幾個用Scala
編寫的Spark
大數據應用程序。 這些應用程序的其他版本用R
編寫。
我也有一個用Java
編寫的Web服務器應用程序。 這是作為Web GUI的API提供的。 目的是使GUI能夠執行這些應用程序並選擇版本: R
或Spark
。 我設法從Java
API調用R
代碼並將結果轉換為JSON
。 但是現在執行Spark
程序似乎非常復雜。
到目前為止,我已經能夠將Scala
.jar文件之一與帶有Maven
的Java
API合並。 為此,我將Spark
程序作為本地存儲庫放置在pom.xml
以便將Scala
代碼包含在最終的.jar包中。 我還提到了Scala
和breeze
庫作為pom.xml
依賴項。 當我嘗試使用API發送請求時,它當然會引發錯誤,提示java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$
。 至此,我意識到這是因為我沒有在Maven
依賴項中提到Spark
庫,但是后來我認為我做錯了,因為Spark
應用程序通常通過在終端中執行spark-submit
命令來運行。
所以現在我在想的是將Java
API .jar和Scala
.jar放在一個文件夾中,然后從Java
API .jar內部執行spark-submit
,以Scala
.jar為目標。 這是正確的嗎? 以及如何執行Java代碼中的spark-submit
? 是否必須使用此處提到的Runtime.exec()
?
SparkLauncher
可用於從Java Api代碼提交火花代碼(在scala中編寫,其中預scala.jar
jar scala.jar
放置在特定位置)。
使用SparkLauncher的saprk文檔推薦以下方法從Java應用程序內部以編程方式提交spark作業。 將以下代碼添加到您的Java Api代碼中。
import org.apache.spark.launcher.SparkAppHandle;
import org.apache.spark.launcher.SparkLauncher;
public class MyLauncher {
public static void main(String[] args) throws Exception {
SparkAppHandle handle = new SparkLauncher()
.setAppResource("/my/scala.jar")
.setMainClass("my.spark.app.Main")
.setMaster("local")
.setConf(SparkLauncher.DRIVER_MEMORY, "2g")
.startApplication();
// Use handle API to monitor / control application.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.