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

Spark on YARN(EKS)应用启动后因S3访问凭证缺失失败求助

排查配置建议

1. 验证Executor容器的AWS环境变量是否完整传递

初始任务能创建S3 staging目录,说明Driver端凭证有效,但后续失败大概率是Executor端无法获取凭证。需要确认:

  • 登录Spark UI的「Executors」页面,查看每个Executor的环境变量,确认所有AWS相关变量(AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_ROLE_ARN、AWS_WEB_IDENTITY_TOKEN_FILE等)是否存在;
  • 若YARN NodeManager未自动传递环境变量,需检查yarn.nodemanager.env-whitelist配置,确保包含所有AWS相关变量;也可在Spark提交时显式传递:
    spark-submit \
      --conf spark.executorEnv.AWS_ACCESS_KEY_ID=<THE_KEY_ID> \
      --conf spark.executorEnv.AWS_SECRET_ACCESS_KEY=<THE_KEY> \
      --conf spark.executorEnv.AWS_ROLE_ARN=arn:aws:iam::ROLE_NAME \
      --conf spark.executorEnv.AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token \
      # 其他提交参数
    

2. 处理Web Identity Token过期问题

你的环境配置了AWS_WEB_IDENTITY_TOKEN_FILE,EKS默认的Web Identity Token有效期为1小时,初始任务启动时token有效,运行超时后会失效。解决方式:

  • 显式指定Spark使用Web Identity凭证提供类,强制自动刷新token:
    --conf spark.hadoop.fs.s3a.aws.credentials.provider=com.amazonaws.auth.WebIdentityTokenCredentialsProvider
    
  • 同时开启S3A客户端的凭证自动刷新:
    --conf spark.hadoop.fs.s3a.session.token.renewal.enabled=true \
    --conf spark.hadoop.fs.s3a.credentials.refresh.interval=300s
    

3. 检查S3A客户端的凭证缓存机制

旧版本Hadoop的S3A客户端可能存在凭证缓存不刷新的问题,需确认:

  • 你使用的Hadoop版本是否支持Web Identity凭证自动刷新(建议Hadoop 3.3+);
  • 关闭S3A的凭证缓存测试:
    --conf spark.hadoop.fs.s3a.credentials.cache.enabled=false
    

4. 区分Driver与Executor的凭证使用阶段

初始的.inprogress文件和staging目录是由Driver端创建的,后续任务的RDD计算、数据读写由Executor执行。可以在代码中添加日志(避免打印敏感信息),分别验证Driver和Executor的凭证状态:

// 在Driver端打印
System.out.println("Driver AWS_ROLE_ARN: " + System.getenv("AWS_ROLE_ARN"));
// 在Executor端打印(比如map算子中)
rdd.map(x -> {
    System.out.println("Executor AWS_ROLE_ARN: " + System.getenv("AWS_ROLE_ARN"));
    return x;
}).count();

对比日志中Driver和Executor的环境变量是否一致。

5. 验证IAM角色与S3桶的权限配置

虽然初始能访问S3,但后续操作可能触发了未授权的动作:

  • 检查IAM角色的信任策略,确认是否允许EKS对应的OIDC提供商及目标ServiceAccount扮演该角色;
  • 检查S3桶的Bucket Policy,确认该IAM角色拥有完整的操作权限(如s3:PutObject、s3:GetObject、s3:DeleteObject等,不只是初始的mkdir权限)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:55:06