【问题标题】:How to execute spark-submit in Java with Scala .jar provided?如何使用提供的 Scala .jar 在 Java 中执行 spark-submit?
【发布时间】:2018-01-04 15:08:58
【问题描述】:

我有几个SparkScala 编写的大数据应用程序。这些应用程序的其他版本写在R

我还有一个用Java 编写的Web 服务器应用程序。这是作为 Web GUI 的 API 提供的。目的是使 GUI 能够执行这些应用程序并选择版本:RSpark。我设法从Java API 调用R 代码并将结果发送给JSON。但是现在执行Spark 程序似乎相当复杂。

到目前为止,我能够将Scala .jar 文件之一与Java API 与Maven 合并。为此,我将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 。罐。这甚至正确吗?以及如何从 Java 代码中执行spark-submit?是否必须使用here 中提到的Runtime.exec()

【问题讨论】:

    标签: java scala maven apache-spark jar


    【解决方案1】:

    SparkLauncher 可用于从 Java Api 代码提交 spark 代码(用 scala 编写,预编译 jar scala.jar 放置在特定位置)。

    使用 SparkLauncher 的 saprk documentaion 推荐以下方式从 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.
         }
       }
    

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 2017-12-25
      • 2023-02-12
      • 2019-03-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2019-11-22
      相关资源
      最近更新 更多