在spark scala应用程序中使用aws凭据配置文件

6ovsh4lw  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(390)

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

rkkpypqq

rkkpypqq1#

默认情况下,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\u profile环境变量在配置文件之间切换。如果需要的话,很乐意在任何一点上展开讨论。

epggiuax

epggiuax2#

如果你有 AWS_ 环境变量集, spark-submit 会把它们复制成s3a的秘密。
如果您想为s3a设置一个提供者链,那么您可以在选项中提供提供者类的列表 fs.s3a.aws.credentials.provider ,这些将使用配置示例(如果存在)创建,否则将使用空构造函数。默认列表是:一个用于从uri或config获取机密,一个用于env vars,最后一个用于ec2iam机密。您可以将它们更改为现有的(匿名提供程序、会话提供程序),或者编写自己的…任何实现 com.amazonaws.auth.AWSCredentialsProvider 是允许的。
你应该可以设置 fs.s3a.aws.credentials.providercom.amazonaws.auth.profile.ProfileCredentialsProvider 并在本地获取它(也许您需要自己的 Package 器,它从传入的配置中提取概要文件名)。这将适用于任何主机,其中有你的凭据…它不会工作,如果你只有当地的秘密,并希望提交工作到其他地方。设置环境变量并使其传播可能是最简单的方法。

相关问题