首页 > 解决方案 > 使用 Apache Spark 写入具有有限权限的 S3 存储桶

问题描述

我正在使用 S3a 协议写入属于其他人的存储桶。我只能使用一组有限的 S3 操作(我不知道具体是哪个)。

尝试使用 AWS Glue 使用 spark 写入数据时,我收到错误403: AccessDenied

在 EMR 中使用 s3distcp 有效,但我必须更改基础设施的设置方式。使用允许所有 S3 操作的存储桶也可以,但我猜存储桶所有者不想更改权限。

有没有办法告诉 spark 写入数据而不需要这么多权限?

编辑: Spark 需要 S3:DeleteObject 权限。有没有办法绕过这个?

这是代码:

sparkSession.sparkContext.hadoopConfiguration.set("fs.s3a.bucket.some-bucket.access.key", "accesskey")
sparkSession.sparkContext.hadoopConfiguration.set("fs.s3a.bucket.some-bucket.secret.key", "secretkey")

data.write.csv(s"s3a://some-bucket/test")

标签: apache-sparkamazon-s3aws-glue

解决方案


Spark 需要 S3:DeleteObject 权限。有没有办法绕过这个?

需要

  • 修剪目录标记对象
  • 将 rename() 实现为复制 + 删除
  • 清理作业尝试目录
  • 在写入目录树之前删除它们

Hadoop 3.1+ S3A 连接器应该能够在不删除访问权限的情况下应对整个树。与管理员团队协商,让您的 IAM 账户拥有对所有输出所在存储桶路径的删除权限


推荐阅读