我正在尝试使用SparkLauncher
运行一个火花作业。
我的spark应用程序jar不是一个胖jar,它取决于很多其他第三方jar,有没有办法在SparkLauncher
中指定依赖jar?
答案 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_CLASSPATH
和EXECUTOR_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时,上面的问题得到了解决,我们就能够执行驱动程序了。