簡體   English   中英

如何使用提供的Scala .jar在Java中執行spark-submit?

[英]How to execute spark-submit in Java with Scala .jar provided?

我有幾個用Scala編寫的Spark大數據應用程序。 這些應用程序的其他版本用R編寫。

我也有一個用Java編寫的Web服務器應用程序。 這是作為Web GUI的API提供的。 目的是使GUI能夠執行這些應用程序並選擇版本: RSpark 我設法從Java API調用R代碼並將結果轉換為JSON 但是現在執行Spark程序似乎非常復雜。

到目前為止,我已經能夠將Scala .jar文件之一與帶有MavenJava API合並。 為此,我將Spark程序作為本地存儲庫放置在pom.xml以便將Scala代碼包含在最終的.jar包中。 我還提到了Scalabreeze庫作為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.

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