假设您有 Spark + Standalone 集群管理器。您使用一些配置打开了 spark 会话,并希望SomeSparkJob
使用不同的参数并行启动 40 次。
问题
- 如何在工作失败时设置reties数量?
- 如何在失败时以编程方式重新启动作业?如果作业因缺乏资源而失败,这可能很有用。我可以一一启动所有需要额外资源的工作。
- 如何在作业失败时重新启动 Spark 应用程序?如果作业即使同时启动也缺乏资源,这可能很有用。比起更改内核、CPU 等配置,我需要在独立集群管理器中重新启动应用程序。
我的解决方法
1)我很确定第一点是可能的,因为它可以在spark local mode。我只是不知道如何在独立模式下做到这一点。
2-3) 可以在 spark 上下文中传递侦听器,例如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()