按计划运行 Spark 应用
该 Operator 支持使用 ScheduledSparkApplication
自定义资源类型的对象,按照标准的 cron 计划运行 Spark 应用。ScheduledSparkApplication
对象指定应用运行的 cron 计划,以及用于创建每次应用运行的 SparkApplication
对象的 SparkApplication
模板。以下是 ScheduledSparkApplication
的示例
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: ScheduledSparkApplication
metadata:
name: spark-pi-scheduled
namespace: default
spec:
schedule: "@every 5m"
concurrencyPolicy: Allow
successfulRunHistoryLimit: 1
failedRunHistoryLimit: 3
template:
type: Scala
mode: cluster
image: gcr.io/spark/spark:v3.1.1
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar
driver:
cores: 1
memory: 512m
executor:
cores: 1
instances: 1
memory: 512m
restartPolicy:
type: Never
应用运行的并发性由 .spec.concurrencyPolicy
控制,其有效值包括 Allow
、Forbid
和 Replace
,其中 Allow
为默认值。每个值的含义如下所述
Allow
:允许应用运行多个实例,例如当前一次运行尚未完成,但下一次运行的时间已到。Forbid
:不允许应用运行多个实例。下一次应用运行必须等待前一次运行完成后才能开始。Replace
:不允许应用运行多个实例。当下一次应用运行时间到时,前一次运行将被终止,然后开始下一次运行作为替代。
通过将 .spec.suspend
设置为 true
,可以暂时暂停计划的 ScheduledSparkApplication
(不会触发未来的应用计划运行)。通过删除 .spec.suspend
或将其设置为 false
可以恢复计划。ScheduledSparkApplication
可以在 Status
部分跟踪应用过去运行的 SparkApplication
对象的名称,如下所述。保留跟踪的过去成功运行次数和过去失败运行次数分别由字段 .spec.successfulRunHistoryLimit
和字段 .spec.failedRunHistoryLimit
控制。上面的示例允许跟踪 1 次过去的成功运行和 3 次过去的失败运行。
ScheduledSparkApplication
对象的 Status
部分通过 .status.lastRun
和 .status.nextRun
分别显示应用的上一次运行时间和建议的下一次运行时间。应用最近一次运行(可能正在运行或已完成)的 SparkApplication
对象的名称存储在 .status.lastRunName
中。应用过去成功运行的 SparkApplication
对象的名称存储在 .status.pastSuccessfulRunNames
中。类似地,应用过去失败运行的 SparkApplication
对象的名称存储在 .status.pastFailedRunNames
中。
请注意,某些重启策略(在 .spec.template.restartPolicy
中指定)可能无法与 ScheduledSparkApplication
指定的计划和并发策略很好地配合。例如,对于 ScheduledSparkApplication
,绝不应使用 Always
重启策略。在大多数情况下,OnFailure
重启策略也不是一个好的选择,因为下一次运行通常无论如何都会从前一次运行停止的地方继续。出于这些原因,如上例所示,使用 Never
重启策略通常是正确的选择。