【问题标题】:Using aws credentials profiles with spark scala app将 aws 凭证配置文件与 spark scala 应用程序一起使用
【发布时间】:2016-07-29 22:15:44
【问题描述】:

如果可能的话,我希望能够在我的 spark scala 应用程序中使用我维护的具有不同配置文件的 ~/.aws/credentials 文件。我知道如何在我的应用程序中为 s3a 设置 hadoop 配置,但我不想继续使用硬编码的不同密钥,而宁愿像使用不同程序一样使用我的凭据文件。我还尝试过使用 val credentials = new DefaultAWSCredentialsProviderChain().getCredentials() 之类的 java api,然后创建一个 s3 客户端,但这不允许我在从 s3 读取文件时使用我的密钥。我也知道,当我运行我的应用程序时,密钥可以进入 core-site.xml,但我如何管理不同的密钥,以及如何使用 IntelliJ 进行设置,以便我可以使用不同的配置文件拉入不同的密钥?

【问题讨论】:

  • 我没有时间查找链接,但您可以指定用于凭据的文件,而不是使用默认的提供程序链。
  • 谢谢。你能提供更多细节来说明你的意思吗?你的意思是还在使用AmazonS3Client client = new AmazonS3Client(new ProfileCredentialsProvider("my_profile_name"))?不确定这将如何适用于使用 s3a:// 使用 spark 读取 s3 文件

标签: scala amazon-web-services hadoop intellij-idea apache-spark


【解决方案1】:

DefaultAWSCredentialsProviderChain 默认不包含提供者。您需要添加一些,例如:

val awsCredentials = new AWSCredentialsProviderChain(new 
  auth.EnvironmentVariableCredentialsProvider(), new 
  auth.profile.ProfileCredentialsProvider(), new 
  auth.AWSCredentialsProvider())

您可以将它们与 S3 客户端一起使用,或者正如您提到的 Spark:

hadoopConfig.set("fs.s3a.access.key", awsCredentials.getAWSAccessKeyId)
hadoopConfig.set("fs.s3a.secret.key", awsCredentials.getAWSSecretKey)

要在不同的 AWS 配置文件之间切换,您可以通过设置 AWS_PROFILE 环境变量在配置文件之间切换。如果需要,很乐意扩展任何特定点。

【讨论】:

    【解决方案2】:

    如果您设置了 AWS_ 环境变量,spark-submit 会将它们复制为 s3a 机密。

    如果要为 S3A 设置提供程序链,则可以在选项 fs.s3a.aws.credentials.provider 中提供提供程序类的列表,如果存在,这些将使用配置实例创建,否则使用空构造函数。默认列表是:一个用于从 URI 或配置中获取机密,一个用于环境变量,最后一个用于 EC2 IAM 机密。您可以将它们更改为现有的(匿名提供者、会话提供者),或编写自己的...任何实现 com.amazonaws.auth.AWSCredentialsProvider 的东西都是允许的。

    您应该能够将 fs.s3a.aws.credentials.provider 设置为 com.amazonaws.auth.profile.ProfileCredentialsProvider 并在本地获取它(也许您需要自己的包装器,它从传入的配置中提取配置文件名称。这适用于任何具有您的凭据...如果您只有本地机密并想在其他地方提交工作,它将无法工作。设置环境变量并让 spark-submit 传播它们可能是最简单的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2022-07-26
      • 2021-01-15
      • 1970-01-01
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多