是否有一种方法可以读取不在您的AWS账户中的S3存储桶,并且您不能担当角色来获得对其的访问权限,尤其是在EMR中。
在普通Hadoop或Spark中,您可以指定:
fs.s3.access.key=<accessKey>
fs.s3.secret.ket=<secretKey>
在使用SimpleAWSCredentialsProvider的Hadoop配置中。这在本地工作,但是当尝试在使用EMRS的EMR上运行时,我无法使它正常工作,我总是得到403:
com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403
我仅具有要从存储桶读取的IAM用户访问ID和密钥,我创建EMR EC2实例的实例配置文件没有读取存储桶的权限。
为了提供更多背景信息,我从提供EMR的帐户中的多个s3存储桶中进行读取和写入,但是有一个存储桶位于我尝试访问的外部。
编辑
这是针对Scala Spark应用程序的,我试图在其中将S3存储桶的内容直接加载到数据帧中。
您可以尝试在pyspark中使用“ boto3”库来查看是否可以读取该文件。
类似的东西:
s3 = boto3.client('s3',aws_access_key_id = ACCESS_KEY,aws_secret_access_key_id = SECRET_KEY))
对于s3.buckets.all()中的存储桶:...打印(bucket.name)
链接到示例:https://www.datastackpros.com/2020/05/upload-file-to-s3-bucket-using-python.html
更多boto3功能:https://boto3.amazonaws.com/v1/documentation/api/latest/reference/core/collections.html