【发布时间】:2017-03-14 20:31:25
【问题描述】:
我有一个 EMR Spark 作业,需要从一个帐户的 S3 读取数据并写入另一个帐户。
我把我的工作分成两个步骤。
从 S3 读取数据(不需要凭据,因为我的 EMR 集群在同一个账户中)。
读取步骤 1 创建的本地 HDFS 中的数据,并将其写入另一个帐户的 S3 存储桶中。
我尝试设置hadoopConfiguration:
sc.hadoopConfiguration.set("fs.s3n.awsAccessKeyId", "<your access key>")
sc.hadoopConfiguration.set("fs.s3n.awsSecretAccessKey","<your secretkey>")
并导出集群上的密钥:
$ export AWS_SECRET_ACCESS_KEY=
$ export AWS_ACCESS_KEY_ID=
我尝试了 cluster 和 client 模式以及 spark-shell 都没有运气。
每个都返回一个错误:
ERROR ApplicationMaster: User class threw exception: com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:
Access Denied
【问题讨论】:
-
小心——看起来
fs.s3n.awsAccessKeyId只适用于通过s3n://bucket/file访问的文件。这可能不是您的系统从 S3 读取的方式。请参阅:Hadoop-AWS module: Integration with Amazon Web Services。 -
您的说法“首先,从 S3 读取数据(不需要凭据,因为我的 EMR 集群在同一个帐户中)”不太准确。 EMR 集群确实需要凭证才能访问 Amazon S3 内容。凭据通过与集群节点关联的角色传入。它允许访问您自己的 S3 存储桶。
标签: apache-spark amazon-s3 amazon-emr