Spark-Java:在SparkLauncher中指定依赖项jar

时间:2016-10-21 20:53:12

标签: java apache-spark

我正在尝试使用SparkLauncher运行一个火花作业。 我的spark应用程序jar不是一个胖jar,它取决于很多其他第三方jar,有没有办法在SparkLauncher中指定依赖jar?

2 个答案:

答案 0 :(得分:4)

使用addJar,请参阅 https://spark.apache.org/docs/latest/api/java/org/apache/spark/launcher/SparkLauncher.html#addJar(java.lang.String)

Process spark = new SparkLauncher()
            .addJar("/path/to/local/jar/file1.jar")
            .addJar("/path/to/local/jar/file2.jar")

在这种情况下将分发jar文件。

或者将它们添加到DRIVER_EXTRA_CLASSPATHEXECUTOR_EXTRA_CLASSPATH(但是依赖项需要手动分发,或者需要位于每个工作者都可以访问的共享文件夹中)。

Process spark = new SparkLauncher()
            .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, "/path/to/jar/file.jar")
            .setConf(SparkLauncher.EXECUTOR_EXTRA_CLASSPATH, "/path/to/jar/file.jar")

您还可以通过在类路径中包含所有文件来包含多个jar文件:

Process spark = new SparkLauncher()
            .setConf(SparkLauncher.DRIVER_EXTRA_CLASSPATH, "/path/to/jar/*")
            .setConf(SparkLauncher.EXECUTOR_EXTRA_CLASSPATH, "/path/to/jar/*")

答案 1 :(得分:1)

使用addJar方法添加多个jar时,我们看到一个问题,说文件路径不正确或文件名,目录名或卷标语法不正确。这个问题的原因是sparklauncher内部调用spark-submit有问题,考虑用逗号分隔的双引号中的jar。当我将spark-submit2.cmd的内容复制到spark-submit.cmd时,上面的问题得到了解决,我们就能够执行驱动程序了。