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

K8s使用Bitnami Spark镜像提交任务报invalid null input: name异常

根因说明

抛出invalid null input: name空指针、容器内显示I have no name!是同一问题的两个表现:Bitnami Spark镜像内置的Hadoop安全认证模块启动时,会调用系统接口获取当前运行用户的用户名,当通过runAsUser: 1001指定非root用户运行时,如果容器内/etc/passwd对UID 1001不可读,或是文件内没有UID 1001对应的用户条目,系统无法返回有效用户名,就会直接触发认证失败。

非root场景修复方案(符合K8s安全规则,无需使用root用户运行)
  • 方案1:配置Pod安全上下文自动映射用户(优先推荐,无需修改镜像)
    保留原有runAsUser: 1001配置,在spark-submit命令中补充以下Pod安全上下文参数即可,K8s kubelet会自动调整/etc/passwd文件权限、补全UID 1001的用户映射,全程不需要root权限:

    --conf spark.kubernetes.driver.podSecurityContext.runAsNonRoot=true
    --conf spark.kubernetes.driver.podSecurityContext.fsGroup=1001
    --conf spark.kubernetes.executor.podSecurityContext.runAsNonRoot=true
    --conf spark.kubernetes.executor.podSecurityContext.fsGroup=1001
    

    配置完成后重新提交任务,exec进入容器时不会再出现I have no name!提示,认证报错也会消失。如果你的集群版本在1.27以上,可以额外加--conf spark.kubernetes.driver.podSecurityContext.supplementalGroupsPolicy=MustRunAs参数,用户映射会更稳定。

  • 方案2:自定义镜像预置用户配置(适配低版本K8s集群)
    如果你的集群版本低于1.20,不支持kubelet自动映射passwd条目,可以基于Bitnami基础镜像构建自定义镜像,仅在构建阶段临时使用root调整配置,运行时仍然使用UID 1001的非root用户,没有安全风险。Dockerfile参考如下:

    FROM bitnami/spark:3.2.1
    USER root
    RUN echo "spark:x:1001:1001:Spark User:/opt/bitnami/spark:/bin/bash" >> /etc/passwd \
        && chmod 644 /etc/passwd \
        && chown -R 1001:1001 /opt/bitnami/spark
    USER 1001
    

    构建完成后替换原有镜像地址提交任务即可。

  • 方案3:通过环境变量强制指定认证用户名(临时快速验证用)
    如果暂时无法调整安全上下文、也不能重建镜像,可以直接给Driver和Executor注入环境变量,强制指定Hadoop认证使用的用户名,跳过系统用户查询逻辑:

    --conf spark.kubernetes.driverEnv.HADOOP_USER_NAME=spark
    --conf spark.executorEnv.HADOOP_USER_NAME=spark
    

    该方案配置成本最低,但部分依赖系统用户标识的Spark组件可能出现兼容问题,仅建议临时调试任务使用。

注意:不需要为了解决这个问题给Pod配置特权模式、或者切换到root用户运行,上述三个方案均满足非root运行的安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:12:57