假设您有Spark + Standalone群集管理器。你用一些配置打开了火花会话,并希望与不同的参数并行启动SomeSparkJob
40次。
1)我很确定第一点是可能的,因为它可以在spark local mode。我只是不知道如何在独立模式下这样做
2-3)可以在spark.sparkContext().addSparkListener(new SparkListener() {
之类的火花上下文中处理听众。但似乎SparkListener
缺少失败回调。
还有很多方法都有很差的文档。我从未使用它们,但我希望可以帮助我解决我的问题:
spark.sparkContext().dagScheduler().runJob();
spark.sparkContext().runJob()
spark.sparkContext().submitJob()
spark.sparkContext().taskScheduler().submitTasks();
spark.sparkContext().dagScheduler().handleJobCancellation();
spark.sparkContext().statusTracker()
答案 0 :(得分:1)
您可以使用 SparkLauncher 并控制流程。
import org.apache.spark.launcher.SparkLauncher;
public class MyLauncher {
public static void main(String[] args) throws Exception {
Process spark = new SparkLauncher()
.setAppResource("/my/app.jar")
.setMainClass("my.spark.app.Main")
.setMaster("local")
.setConf(SparkLauncher.DRIVER_MEMORY, "2g")
.launch();
spark.waitFor();
}
}
有关详细信息,请参阅API。
由于它创建了流程,您可以检查流程状态并重试,例如尝试以下:
public boolean isAlive()
如果处理不是重新开始,请参阅API了解详情。
希望能够高度理解我们如何实现您在问题中提到的内容。可能有更多方法可以做同样的事情,但想过分享这种方法。
干杯!
答案 1 :(得分:0)
检查您的spark.sql.broadcastTimeout和spark.broadcast.blockSize属性,尝试增加它们。