Airflow SparkKubernetesOperator无法向Spark Operator提交应用求助
问题分析与解决方案
核心问题定位
从提供的配置和日志来看,主要有以下几个关键矛盾点导致Spark应用无法提交:
命名空间不匹配
DAG中SparkKubernetesOperator指定的提交命名空间是spark-operator,但write-hdfs.yaml里的SparkApplication配置的命名空间是spark-jobs,两者不一致会导致Spark Operator无法正确识别和处理资源请求。权限与命名空间监听问题
日志中提到Pod位于default命名空间,说明Airflow Worker的执行环境可能在default空间,而该空间的ServiceAccount大概率没有操作spark-jobs或spark-operator空间下Spark资源的权限;同时Spark Operator可能未配置监听目标命名空间。
分步解决方案
1. 统一命名空间配置
将DAG和SparkApplication的命名空间保持一致,二选一修改即可:
- 修改DAG中的
namespace参数:
或者修改t1 = SparkKubernetesOperator( # ... 其他参数不变 namespace="spark-jobs", # 改为与SparkApplication一致的命名空间 # ... 其他参数不变 )write-hdfs.yaml的metadata部分:metadata: name: write-hdfs-ngon namespace: spark-operator # 改为与DAG一致的命名空间
2. 配置Airflow Worker的权限
确保Airflow使用的ServiceAccount具备操作目标命名空间下SparkApplication资源的权限,创建对应的Role和RoleBinding:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: airflow-spark-access namespace: spark-jobs # 目标命名空间 rules: - apiGroups: ["sparkoperator.k8s.io"] resources: ["sparkapplications"] verbs: ["create", "get", "list", "watch", "update", "delete"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: airflow-spark-binding namespace: spark-jobs subjects: - kind: ServiceAccount name: <airflow-worker-sa> # Airflow Worker使用的ServiceAccount名称 namespace: <airflow-namespace> # Airflow部署所在的命名空间(比如default或airflow) roleRef: kind: Role name: airflow-spark-access apiGroup: rbac.authorization.k8s.io
3. 检查Spark Operator的监听配置
确保Spark Operator监听了目标命名空间:
- 如果是Helm部署的Spark Operator,检查
watchNamespace参数,设置为目标命名空间(如spark-jobs)或留空以监听所有命名空间。 - 查看Spark Operator的Pod日志,确认是否有处理
SparkApplication请求的记录:kubectl logs -n spark-operator <spark-operator-pod-name>
4. 验证Spark服务账号
确保write-hdfs.yaml中指定的serviceAccount: spark在目标命名空间下存在,且该账号具备访问K8s内部资源及HDFS的权限。
额外排查建议
- 查看Airflow Worker的日志,获取
SparkKubernetesOperator提交时的具体错误信息(比如权限拒绝、资源不存在等)。 - 手动提交
write-hdfs.yaml测试Spark Operator是否正常工作:
若手动提交成功,说明问题出在Airflow的配置或权限上。kubectl apply -f write-hdfs.yaml -n spark-jobs
内容的提问来源于stack exchange,提问作者LightyD
相关产品推荐
相关产品推荐

