我正在写一个pyspark作业,该作业需要读取两个不同的s3存储桶。每个存储桶都有不同的凭据,这些凭据作为~/.aws/credentials中的单独配置文件存储在我的计算机上。

连接到s3时,是否有办法告诉pyspark使用哪个配置文件?

当使用单个存储桶时,我已经在AWS_ACCESS_KEY_ID中设置了AWS_SECRET_ACCESS_KEYconf/spark-env.sh环境变量。自然,这仅适用于访问2个存储桶中的1个。

我知道我可以在需要时使用以下方法在pyspark中手动设置这些值:

sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "ABCD")
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "EFGH")


但是,如果不对这些值进行硬编码,则最好使用一种解决方案。这可能吗?

最佳答案

可以使用不同的S3A客户端配置访问不同的S3存储桶。这允许使用不同的端点,数据读取和写入策略以及登录详细信息。


除少数不可修改的值(当前为fs.s3a.impl)外,所有fs.s3a选项都可以在每个存储桶的基础上进行设置。
通过替换fs.s3a设置存储桶特定选项。 fs.s3a.bucket.BUCKETNAME。选项的前缀,其中BUCKETNAME是存储桶的名称。
连接到存储桶时,所有明确设置的选项都将覆盖基础fs.s3a。价值观。


来源http://hadoop.apache.org/docs/r2.8.0/hadoop-aws/tools/hadoop-aws/index.html#Configurations_different_S3_buckets

08-07 23:56