You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Spark K8s集群模式下ConfigMap未找到的启动错误?

Spark Driver Pod启动失败:ConfigMap未找到的解决方法

错误说明

Driver Pod启动时出现以下错误:

MountVolume.SetUp failed for volume "spark-conf-volume-driver" : configmap "spark-drv-8458dd8e0e30c9d0-conf-map" not found

这个自动生成的ConfigMap是Spark提交流程中用来传递配置给Driver的核心资源,找不到它通常和权限配置、提交参数异常有关,以下是具体解决步骤:


1. 补全ServiceAccount的权限

你创建的spark ServiceAccount需要拥有目标命名空间内创建、读取ConfigMap的权限,否则Spark无法自动生成所需的配置映射。

修正Role权限规则

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: namespace-spark
  name: spark-role
rules:
- apiGroups: [""]
  resources: ["configmaps", "pods", "services", "persistentvolumeclaims"]
  verbs: ["get", "list", "watch", "create", "update", "delete"]

确认RoleBinding绑定关系

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: namespace-spark
  name: spark-role-binding
subjects:
- kind: ServiceAccount
  name: spark
  namespace: namespace-spark
roleRef:
  kind: Role
  name: spark-role
  apiGroup: rbac.authorization.k8s.io

2. 调整SparkLauncher的提交参数

检查并修正以下几个关键配置:

  • 移除setSparkHome("/opt/spark"):K8s集群模式下,Spark环境由容器镜像提供,本地指定的SparkHome会干扰自动配置流程。
  • 确认spark.kubernetes.namespace配置的一致性:确保所有资源都在namespace-spark下创建,避免跨命名空间查找ConfigMap。
  • 验证镜像内文件路径:确认local:///jars/spark.jar在你指定的spark-launcher-example镜像中真实存在,路径错误可能触发异常流程,导致ConfigMap创建失败。

调整后的核心代码片段:

SparkLauncher launcher =
    new SparkLauncher()
        .setMaster("k8s://https://" + host+ ":" + port)
        .setDeployMode("cluster")
        .setMainClass("example.sparkLauncher")
        .setConf("spark.kubernetes.namespace", "namespace-spark")
        .setConf(SparkLauncher.DRIVER_MEMORY, "500m")
        .setConf(SparkLauncher.EXECUTOR_CORES, "1")
        .setConf(SparkLauncher.EXECUTOR_MEMORY, "500m")
        .setConf("spark.executor.instances", "1")
        .setAppName("spark-Launcher")
        .setAppResource("local:///jars/spark.jar")
        .setConf(
            "spark.kubernetes.container.image",
            "spark-launcher-example")
        .setConf("spark.kubernetes.authenticate.driver.serviceAccountName", "spark")
        .setConf("spark.kubernetes.driver.volumes.emptyDir.spark-shared.mount.path", "/tmp")
        .setConf("spark.kubernetes.driver.volumes.emptyDir.spark-shared.mount.readOnly", "false")
        .addJar("local:///jars/spark.jar")
        .setVerbose(true)
        .addAppArgs(argPropertyString);

launcher.launch();

3. 手动指定ConfigMap(自动创建失效时)

如果自动生成ConfigMap的机制持续异常,可以手动创建配置映射并通过SparkConf挂载:

手动创建ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: spark-custom-conf
  namespace: namespace-spark
data:
  spark-defaults.conf: |
    spark.driver.memory 500m
    spark.executor.cores 1
    spark.executor.memory 500m
    # 添加其他需要的Spark配置

在SparkLauncher中添加挂载配置

.setConf("spark.kubernetes.driver.volumes.configMap.spark-conf-volume-driver.mount.path", "/opt/spark/conf")
.setConf("spark.kubernetes.driver.volumes.configMap.spark-conf-volume-driver.name", "spark-custom-conf")
.setConf("spark.kubernetes.driver.volumes.configMap.spark-conf-volume-driver.mount.readOnly", "true")

4. 排查辅助手段

  • 用kubectl describe pod <driver-pod-name> -n namespace-spark查看Pod事件,确认是否有其他权限或资源限制问题。
  • 查看Spark提交日志(已开启setVerbose(true)),定位ConfigMap创建失败的具体报错信息。

内容的提问来源于stack exchange,提问作者Developer208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:50:01