PySpark s3使用多个AWS凭据配置文件进行访问?

时间:2016-05-27 09:20:18

标签: amazon-web-services amazon-s3 apache-spark pyspark

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

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

使用单个存储桶时,我在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")

但是更喜欢这些值没有硬编码的解决方案。这可能吗?

2 个答案:

答案 0 :(得分:2)

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

  1. 除了一小组不可修改的值(目前为fs.s3a.impl)之外的所有fs.s3a选项都可以基于每个桶进行设置。
  2. 通过替换fs.s3a来设置存储桶特定选项。使用fs.s3a.bucket.BUCKETNAME。选项的前缀,其中BUCKETNAME是存储桶的名称。
  3. 连接到存储桶时,显式设置的所有选项都将覆盖基础fs.s3a。值。
  4. 来源http://hadoop.apache.org/docs/r2.8.0/hadoop-aws/tools/hadoop-aws/index.html#Configurations_different_S3_buckets

答案 1 :(得分:0)

s3n不支持存储在~/.aws/credentials中的aws凭据,你应该尝试使用hadoop 2.7和新的hadoop s3 impl:s3a,它使用的是aws sdk。

不确定当前的火花释放1.6.1是否适用于hadoop 2.7,但是火花2.0对于hadoop 2.7和s3a来说绝对没问题。

对于spark 1.6.x,我们用EMR的s3驱动程序做了一些肮脏的黑客攻击......你可以看一下这个文档:https://github.com/zalando/spark-appliance#emrfs-support