【问题标题】:PySpark s3 Access with Multiple AWS Credential Profiles?使用多个 AWS 凭证配置文件访问 PySpark s3?
【发布时间】:2016-09-25 13:37:03
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 除了一小组不可修改的值(当前为 fs.s3a.impl)之外的所有 fs.s3a 选项都可以基于每个存储桶进行设置。
    2. 通过替换 fs.s3a 设置存储桶特定选项。带有 fs.s3a.bucket.BUCKETNAME. 的选项的前缀,其中 BUCKETNAME 是存储桶的名称。
    3. 连接到存储桶时,所有显式设置的选项都将覆盖基础 fs.s3a。价值观。

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

    【讨论】:

      【解决方案2】:

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

      不确定当前的 spark 版本 1.6.1 是否适用于 hadoop 2.7,但 spark 2.0 对 hadoop 2.7 和 s3a 绝对没有问题。

      对于 spark 1.6.x,我们使用 EMR 的 s3 驱动程序做了一些肮脏的修改...您可以查看此文档:https://github.com/zalando/spark-appliance#emrfs-support

      【讨论】:

      • 我不确定这是否能回答我的问题-您能否扩展/举一个访问具有不同凭据的 2 个存储桶的示例?
      • 您可以将所有不同的凭据添加为 ~/.aws/credentials 下的 aws 配置文件,然后您可以通过更改 spark 代码中的 AWS_DEFAULT_PROFILE env var 来切换配置文件。
      • s3 客户端 spark 使用不支持使用不同的凭据访问不同的存储桶。您可以通过使用 s3n 客户端获取一组凭据,使用 s3a 获取另一组凭据来作弊。还有另一个强烈反对在 URL 中使用 username:password 的技巧,如 s3n://awsID@escapedkey:bucket/path 请注意:这样做,您的 AWS 机密将分散在您的日志中
      猜你喜欢
      • 2015-07-09
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2018-01-31
      • 2019-03-12
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多