运行 Spark Application
本指南演示如何使用 SparkApplication 自定义资源提交 Apache Spark 作业、监控其直至完成,并检查结果。示例使用 Spark 镜像中自带的内置 Spark Pi 示例。
前提条件
- 已安装 Alauda Build of Spark Operator,且其 CSV 报告为
Succeeded— 参见 安装。 - 已拥有目标集群的
kubectl访问权限。
1. 创建命名空间和 Spark RBAC
在 cluster 模式下,Spark driver 会创建并管理其 executor pod,因此 driver 的 ServiceAccount 需要具备在其命名空间中管理 pod(以及 Spark 使用的 services / configmaps)的权限。
保存为 spark-rbac.yaml 并应用:
2. 提交 SparkApplication
spec.image— driver 和 executor 使用的 Apache Spark 运行时镜像。在 air-gapped 集群中,请使用平台 registry 中已重新定位的副本(记录在 CSV 的relatedImages中)或你们内部的镜像仓库,例如build-harbor.alauda.cn/mlops/spark:4.0.1。spec.mainApplicationFile— 应用制品的路径或 URL。local://表示镜像内部的路径;Spark 示例 jar 随 Spark 镜像一同提供。spec.arguments— 传递给应用的参数;对于 Spark Pi,这里是分区数。spec.driver.serviceAccount— 必须引用第 1 步中创建的ServiceAccount。spec.driver.securityContext/spec.executor.securityContext— 为满足受限的 Pod Security Admission 策略所必需。Spark 镜像以 UID/GID185运行。spec.executor.instances— 要运行的 executor pod 数量。
保存为 spark-pi.yaml 并应用:
3. 监控应用
operator 会在 .status.applicationState.state 中报告进度,其状态会依次经过 SUBMITTED → RUNNING → COMPLETED。
4. 验证结果
当应用到达 COMPLETED 时,检查 driver 日志中计算出的 Pi 值:
你应该会看到类似如下的输出:
5. 清理
调度周期性作业
要按计划运行 Spark 应用,请将相同的应用 spec 包装在 ScheduledSparkApplication 中:
spec.schedule— 用于控制运行何时启动的 cron 表达式(或@every <duration>)。spec.concurrencyPolicy—Allow、Forbid或Replace;用于控制是否允许重叠运行。spec.template— 每个调度周期要运行的SparkApplicationspec。
查看该计划及其生成的运行实例:
常见的 SparkApplication 字段
完整 schema 请参见上游 Spark Operator API reference。