运行 SparkApplication

运行 Kueue 调度的 SparkApplication
Feature state alpha since Kueue v0.17

此页面展示了在运行 Spark Operator SparkApplication 时,如何利用 Kueue 的调度和资源管理能力。

本指南适用于对 Kueue 有基本了解的批处理用户。 欲了解更多信息,请参阅 Kueue 概述

在你开始之前

在 Kueue 中启用 SparkApplication 集成。你可以修改已安装版本的 Kueue 配置,以将 sparkoperator.k8s.io/sparkapplication 作为允许的工作负载。

启用 SparkApplicationIntegration 特性门控。有关特性门控配置的详细信息,请参阅安装指南。

检查管理集群配额,以获取初始集群设置的详细信息。

查阅 Spark Operator 安装指南

Spark Operator 定义

a. 队列选择

目标本地队列应在 SparkApplication 配置的 metadata.labels 部分中指定。

metadata:
  labels:
    kueue.x-k8s.io/queue-name: user-queue

b. (可选)在 SparkApplication 中设置 Suspend 字段

spec:
  suspend: true

默认情况下,Kueue 将通过 Webhook 将 suspend 设置为 true,并在 SparkApplication 被允许时取消挂起。

SparkApplication 示例

apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
  name: spark-pi
  labels:
    kueue.x-k8s.io/queue-name: user-queue
spec:
  type: Scala
  mode: cluster                 # spark-operator supports "cluster" mode only
  sparkVersion: 4.0.0
  image: spark:4.0.0
  imagePullPolicy: IfNotPresent
  mainClass: org.apache.spark.examples.SparkPi
  mainApplicationFile: local:///opt/spark/examples/jars/spark-examples.jar
  arguments:
  - "50000"
  memoryOverheadFactor: "0"     # spark adds extra memory on memory limits
                                # for non-JVM tasks. 0 can avoid it.
  driver:
    coreRequest: "1"
    memory: 1g                  # In Java format (e.g. 512m, 2g)
    serviceAccount: spark       # You need to create this service account beforehand,
                                # and the service account should have proper role
                                # ref: https://github.com/kubeflow/spark-operator/blob/master/config/rbac/spark-application-rbac.yaml
  executor:
    instances: 2
    coreRequest: "1"
    memory: 1g                  # In Java format (e.g. 512m, 2g)
    deleteOnTermination: false  # to keep terminated executor pods for demo purpose