我正在编写一个pyspark工作,需要读出两个不同的s3存储桶。每个存储桶都有不同的凭据,这些凭据作为~/.aws/credentials
中的单独配置文件存储在我的计算机上。
有没有办法告诉pyspark在连接到s3时使用哪个配置文件?
使用单个存储桶时,我在AWS_ACCESS_KEY_ID
中设置了AWS_SECRET_ACCESS_KEY
和conf/spark-env.sh
个环境变量。当然,这仅适用于访问2个桶中的1个。
我知道我可以在需要时在pyspark中手动设置这些值,使用:
sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", "ABCD")
sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", "EFGH")
但是更喜欢这些值没有硬编码的解决方案。这可能吗?
答案 0 :(得分:2)
可以使用不同的S3A客户端配置访问不同的S3存储桶。这允许不同的端点,数据读取和写入策略,以及登录详细信息。
答案 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