我想能够使用~/.aws/凭据文件,我维护与我的spark scala应用程序不同的配置文件,如果可能的话。我知道如何在我的应用程序中为s3a设置hadoop配置,但我不想继续使用不同的硬编码密钥,而是像使用不同程序一样使用我的凭证文件。我还尝试过使用javaapi,比如 val credentials = new DefaultAWSCredentialsProviderChain().getCredentials()
然后创建一个s3客户机,但这不允许我在从s3读取文件时使用密钥。我也知道钥匙可以插进去 core-site.xml
当我运行我的应用程序,但我如何才能管理不同的键,以及我如何设置它与intellij,以便我可以有不同的键拉入使用不同的配置文件?
2条答案
按热度按时间rkkpypqq1#
默认情况下,defaultawscredentialsproviderchain不包含提供程序。您需要添加一些,例如:
您可以将它们与s3客户端一起使用,或者如您提到的spark:
要在不同的aws配置文件之间切换,可以通过设置aws\u profile环境变量在配置文件之间切换。如果需要的话,很乐意在任何一点上展开讨论。
epggiuax2#
如果你有
AWS_
环境变量集,spark-submit
会把它们复制成s3a的秘密。如果您想为s3a设置一个提供者链,那么您可以在选项中提供提供者类的列表
fs.s3a.aws.credentials.provider
,这些将使用配置示例(如果存在)创建,否则将使用空构造函数。默认列表是:一个用于从uri或config获取机密,一个用于env vars,最后一个用于ec2iam机密。您可以将它们更改为现有的(匿名提供程序、会话提供程序),或者编写自己的…任何实现com.amazonaws.auth.AWSCredentialsProvider
是允许的。你应该可以设置
fs.s3a.aws.credentials.provider
至com.amazonaws.auth.profile.ProfileCredentialsProvider
并在本地获取它(也许您需要自己的 Package 器,它从传入的配置中提取概要文件名)。这将适用于任何主机,其中有你的凭据…它不会工作,如果你只有当地的秘密,并希望提交工作到其他地方。设置环境变量并使其传播可能是最简单的方法。