通过创建Kubernetes Spark节点,您可以在DataWorks中利用Kubernetes集群作为计算资源,开发、调试和周期性调度运行Spark任务。
适用范围
计算资源限制:仅支持使用已绑定Kubernetes计算资源的工作空间。
资源组限制:仅支持使用Serverless资源组运行该类型任务,并需确保资源组与Kubernetes集群API Server网络连通。
权限限制:(可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限,添加成员的操作详情请参见为工作空间添加空间成员。
如果您使用的是主账号,则可忽略该添加操作。
新建节点
新建入口参考:创建节点。
开发节点
Kubernetes Spark节点提供可视化表单和YAML编辑器两种配置方式,两者内容会实时双向同步。建议您优先使用可视化表单完成常用配置,对于复杂需求再通过YAML编辑器进行补充。
可视化表单配置
在节点编辑页面,您可以配置Spark任务运行所需的各项参数。
参数 | 具体描述 |
Type | 选择Spark任务的开发语言类型,支持 |
Name | Spark应用在Kubernetes中运行时所采用的名称。 该名称将作为 |
Main Application File | 指定主应用程序文件的路径。
|
Image | 指定Spark Driver和Executor运行时所使用的Docker镜像地址。 重要 镜像中必须包含与您的任务兼容的Spark版本和Hadoop客户端依赖。如果任务需要访问OSS,请确保镜像中包含正确的 |
Main Class | 当Type为 |
+ 添加 | 单击可添加更多Spark配置项,例如 重要 完整参数介绍请参见Spark on Kubernetes参数说明。 |
Labels | 为任务创建的所有Pods添加Kubernetes Labels。用于资源筛选、策略应用等。格式为 |
Executor Annotations | 为Executor Pods添加Kubernetes Annotations。格式为 常用于配置第三方工具集成,如配置 |
Driver Annotations | 为Driver Pod添加Kubernetes Annotations。 |
YAML编辑器配置
所有在可视化表单中配置的参数都会实时映射为下方的YAML内容。该YAML文件遵循Spark on Kubernetes Operator的SparkApplicationCRD规范。
双向同步:修改上方表单,YAML内容会自动更新;反之,在YAML编辑器中直接修改内容,上方对应的表单项也会同步变更。
高级配置与问题排查:对于一些复杂或不常用的Spark属性(如
volumes、nodeSelector、tolerations等),您可以在YAML编辑器中直接编写。这是解决高级调度问题和挂载特定存储的关键。
# 示例:通过添加 sparkConf 配置 OSS 访问凭证,并从 OSS 拉取应用代码(解藕示例)
# 完整结构示例
apiVersion: sparkoperator.k8s.io/v1beta2
kind: SparkApplication
metadata:
name: spark-pi-example
namespace: default
spec:
type: Scala
mode: cluster
image: "registry.cn-hangzhou.aliyuncs.com/spark-operator/spark:v3.1.1"
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "oss://your-bucket-name/path/to/spark-examples_2.12-3.1.1.jar"
sparkVersion: "3.1.1"
restartPolicy:
type: Never
driver:
cores: 1
memory: "512m"
labels:
version: 3.1.1
# 确保 ServiceAccount 有权限访问 OSS(如果使用 RAM 角色授权)
serviceAccountName: spark
executor:
cores: 1
instances: 1
memory: "512m"
labels:
version: 3.1.1
# ↓↓↓ 这部分配置现在至关重要,因为它不仅用于读写数据,还用于下载 mainApplicationFile ↓↓↓
sparkConf:
spark.hadoop.fs.oss.accessKeyId: "YOUR_ACCESS_KEY_ID"
spark.hadoop.fs.oss.accessKeySecret: "YOUR_ACCESS_KEY_SECRET"
spark.hadoop.fs.oss.endpoint: "oss-cn-hangzhou-internal.aliyuncs.com"调试节点
单击节点编辑页面右侧的调试配置,配置任务运行所需资源。
配置项
说明
计算资源
选择已绑定的Kubernetes计算资源。该下拉框仅展示Kubernetes类型的计算资源。
资源组
选择用于执行任务的独享资源组。
脚本参数
当您在YAML或
Arguments参数中通过${参数名}的方式定义变量时,需要在此处配置参数名和临时的参数值用于调试运行。详情请参见调度参数来源及其表达式。在节点编辑页面上方工具栏,单击运行任务。
在底部的运行日志面板中,查看任务的实时日志和最终运行结果。如果任务失败,请仔细阅读日志中的
ERROR和Exception信息,并对照上文的常见问题进行排查。
常见问题与开发实践
在开发Kubernetes Spark节点时,您可能会遇到以下常见问题,请参考对应的解决方案。
Q:如何查看周期调度实例对应的Spark作业?
若节点填写Name字段,通过周期调度运行的Spark作业名格式为:
{Name}-{实例ID}。若节点未填写Name字段,通过周期调度运行的Spark作业名格式为:
DataWorks-Job-{实例ID}。
Q:任务长时间处于
SUBMITTED状态,无法启动Driver Pod。可能原因与解决方案:
镜像拉取失败:检查您填写的Image地址是否正确,以及Kubernetes集群节点是否有权限从该镜像仓库拉取镜像。对于私有仓库,需要配置
imagePullSecrets。资源不足:Kubernetes集群没有足够的CPU或内存资源来调度Driver Pod。请检查集群资源使用情况。
权限问题:运行任务的ServiceAccount没有创建Pod的权限。请在YAML中通过
spec.driver.serviceAccountName指定一个具有正确RBAC权限的账户。
Q:Driver已启动,但Executor无法启动或一直处于
Pending状态。可能原因与解决方案:
资源不足:同上,集群没有足够资源来创建Executor Pods。
调度约束:您可能通过
nodeSelector、affinity或tolerations设置了调度规则,但集群中没有满足条件的节点。请检查YAML中的相关配置。
Q:任务因
java.lang.ClassNotFoundException或NoClassDefFoundError失败。可能原因与解决方案:
依赖缺失:您的应用程序依赖了某些第三方库,但这些库没有被正确地包含进来。
解决方案1(推荐):将所有依赖的JAR包构建到您的自定义Image中。
解决方案2:使用+ 添加功能,添加
Jars或Files参数,并指定依赖文件在OSS上的路径。
Q:任务在运行时报错,提示访问OSS/HDFS等数据源权限被拒绝。
可能原因与解决方案:
凭证未配置:任务运行时需要访问数据源的凭证信息。请通过+ 添加 >
spark conf的方式,或者直接在YAML的sparkConf部分,添加访问数据源所需的配置,如spark.hadoop.fs.oss.accessKeyId等。
图标唤起发布流程,通过该流程将任务发布至生产环境。项目目录下的节点只有在发布至生产环境后,才会进行周期性调度。