【发布时间】:2018-11-09 23:41:20
【问题描述】:
我有 spark 作业,需要从其他帐户**(数据帐户)** 中的 s3 读取数据并处理该数据。
一旦处理完毕,它应该写回我帐户中的 s3。
所以我在我的 spark 会话中配置了 “数据帐户” 的访问权限和密钥,如下所示
val hadoopConf=sc.hadoopConfiguration
hadoopConf.set("fs.s3a.access.key","DataAccountKey")
hadoopConf.set("fs.s3a.secret.key","DataAccountSecretKey")
hadoopConf.set("fs.s3a.endpoint", "s3.ap-northeast-2.amazonaws.com")
System.setProperty("com.amazonaws.services.s3.enableV4", "true")
val df = spark.read.json("s3a://DataAccountS/path")
/* Reading is success */
df.take(3).write.json("s3a://myaccount/test/")
这个读数很好,但我在写作时遇到错误。
com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 301, AWS Service: Amazon S3, AWS Request ID: A5E574113745D6A0, AWS Error Code: PermanentRedirect, AWS Error Message: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
但如果我不配置数据帐户的详细信息并尝试从 spark 将一些虚拟数据写入我的 s3,它就可以工作。
那么我应该如何配置以使从不同帐户 s3 读取和写入我的帐户 s3 都可以工作
【问题讨论】:
-
不是真正的 Spark 问题,而是 AWS 权限问题。您需要在您自己的账户中为数据账户授予对 S3 存储桶的写入权限。查看 AWS 文档,了解如何为另一个账户设置 S3 存储桶的写入权限。
标签: amazon-web-services amazon-s3 amazon-iam