代码之家  ›  专栏  ›  技术社区  ›  Benny Suryajaya

如何使用Scala在Java中执行spark submit。是否提供jar?

  •  0
  • Benny Suryajaya  · 技术社区  · 6 年前

    我有几个 Spark 编写大数据应用程序 Scala . 这些应用程序都编写了其他版本 R .

    我还编写了一个web服务器应用程序 Java . 这是作为web GUI的API提供的。目的是使GUI能够执行这些应用程序并选择版本: R 火花 . 我设法打电话给 R 来自的代码 Java语言 API并将结果获取到 JSON . 但现在执行 火花 程序。

    直到现在,我才能够合并 斯卡拉 .jar文件 Java语言 API与 Maven . 我通过放置 火花 在中作为本地存储库进行编程 pom.xml 因此 斯卡拉 代码包含在最终版本中。jar包。我还提到 斯卡拉 breeze 中的库作为依赖项 pom。xml . 当我尝试用API发送请求时,它当然会抛出一个错误 java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$ . 至此,我意识到这是因为我没有提到 火花 中的库 专家 依赖关系,但我认为我一直在做错事,因为 火花 应用程序通常通过执行 spark-submit 终端中的命令。

    所以现在我想的是 Java语言 应用程序编程接口。jar和 斯卡拉 .jar,然后执行 spark提交 从内部 Java语言 应用程序编程接口。jar,针对 斯卡拉 .罐子这是对的吗?以及如何执行 spark提交 来自Java代码?是否必须使用 Runtime.exec() 如中所述 here ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Amit Kumar    6 年前

    SparkLauncher 可用于提交spark代码(用scala编写,带有预编译jar scala.jar 放置在某个位置)中。

    这个 saprk documentaion 对于使用SparkLauncher,建议使用以下方法从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.
         }
       }