按计划运行 Spark 应用

按计划运行 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 控制,其有效值包括 AllowForbidReplace,其中 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 重启策略通常是正确的选择。

反馈

此页面有帮助吗?


最后修改于 2024 年 6 月 22 日: Add docs for spark-operator (#3767) (b622672)