amazon-web-services - Spark凭证链排序 - S3 Exception Forbidden
问题描述
我在 EC2 实例上运行 Spark 2.4。我假设一个 IAM 角色并在 sparkSession.sparkContext.hadoopConfiguration 中设置密钥/秘密密钥/令牌,并将凭证提供程序设置为“org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider”。
当我尝试从 s3 读取数据集(使用 s3a,它也在 hadoop 配置中设置)时,我收到一条错误消息
com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:403,AWS 服务:Amazon S3,AWS 请求 ID:7376FE009AD36330,AWS 错误代码:空,AWS 错误消息:禁止
读取命令:
val myData = sparkSession.read.parquet("s3a://myBucket/myKey")
我反复检查了 S3 路径,它是正确的。我假定的 IAM 角色对 S3 存储桶具有正确的权限。在这一点上我唯一能想到的是 spark 有某种隐藏的凭证链排序,即使我在 hadoop 配置中设置了凭证,它仍然从其他地方获取凭证(我的实例配置文件???)。但我无法诊断。
任何帮助表示赞赏。很高兴提供更多细节。
解决方案
- spark-submit 将获取您的环境变量并将它们设置为 fs.s3a 访问 +secret + 会话密钥,覆盖您已经设置的任何内容。
- 如果您只想使用 IAM 凭证,只需设置
fs.s3a.aws.credentials.provider
为com.amazonaws.auth.InstanceProfileCredentialsProvider
; 这将是唯一使用的
进一步阅读:S3A 故障排除
推荐阅读
- chronicle-map - ClassCastException 使用 ByteBuffer 作为 ChronicleMap 的键
- jquery - 表达式语言代码显示为纯文本 JSP
- function - return_of_invalid_type 返回类型“String”不是“void”,由方法“getData”定义
- python - 即使在更新数据库后,SQLAlchemy 也不会在我的表中找到该列?
- angular - 由于 Firebase 的 IDBIndex 错误,无法提供服务器呈现的应用程序
- java - 如何将 Swing 小部件插入 SWT 我在使用 SWT_AWT.new_Frame 时在线程“main”java.lang.IllegalArgumentException 中出现异常
- angular - Ngrx,Rxjs - 合并可观察的流返回一个新的流
- angular - 子节点出现在每个父节点中
- php - 如何为已在 phpunit 中初始化的 MockObject 实例设置动态属性
- angular - 在 Angular 后端的每个服务上出现 403 错误是在 laravel